XlsxReader.Conversion (xlsx_reader v0.8.12)

Copy Markdown View Source

Conversion of cell values to Elixir types.

Summary

Types

Date system identified by its reference year

Supported number types identified by module name

Supported number value types

Functions

Returns the base date for the given date system.

Converts the string representation of a truth value into to a boolean.

Converts a string into an arbitrary precision decimal.

Converts a string into a float.

Converts a string into an integer.

Converts a string into the given number type.

Types

date_system()

@type date_system() :: 1900 | 1904

Date system identified by its reference year

number_type()

@type number_type() :: Integer | Float | Decimal | String

Supported number types identified by module name

number_value()

@type number_value() :: integer() | float() | Decimal.t() | String.t()

Supported number value types

Functions

base_date(arg1)

@spec base_date(date_system()) :: Date.t() | :error

Returns the base date for the given date system.

Examples

iex> XlsxReader.Conversion.base_date(1900)
~D[1899-12-30]

iex> XlsxReader.Conversion.base_date(1904)
~D[1904-01-01]

iex> XlsxReader.Conversion.base_date(2019)
:error

to_boolean(arg1)

@spec to_boolean(String.t()) :: {:ok, boolean()} | :error

Converts the string representation of a truth value into to a boolean.

Cells with type attribute "b" store boolean values as a single digit: "1" or "0".

Examples

iex> XlsxReader.Conversion.to_boolean("1")
{:ok, true}

iex> XlsxReader.Conversion.to_boolean("0")
{:ok, false}

iex> XlsxReader.Conversion.to_boolean("true")
:error

to_date(string, base_date \\ %{__struct__: Date, calendar: Calendar.ISO, day: 30, month: 12, year: 1899})

@spec to_date(String.t(), Date.t()) :: {:ok, Date.t()} | :error

Converts a serial date into a Date.

Examples

iex> XlsxReader.Conversion.to_date("40396")
{:ok, ~D[2010-08-06]}

iex> XlsxReader.Conversion.to_date("43783")
{:ok, ~D[2019-11-14]}

iex> XlsxReader.Conversion.to_date("1", ~D[1999-12-31])
{:ok, ~D[2000-01-01]}

iex> XlsxReader.Conversion.to_date("-1", ~D[1999-12-31])
:error

to_date_time(string, base_date \\ %{__struct__: Date, calendar: Calendar.ISO, day: 30, month: 12, year: 1899})

@spec to_date_time(String.t(), Date.t()) :: {:ok, NaiveDateTime.t()} | :error

Converts a serial date to a NaiveDateTime.

Examples

iex> XlsxReader.Conversion.to_date_time("43783.0")
{:ok, ~N[2019-11-14 00:00:00]}

iex> XlsxReader.Conversion.to_date_time("43783.760243055556")
{:ok, ~N[2019-11-14 18:14:45]}

iex> XlsxReader.Conversion.to_date_time("0.4895833333333333")
{:ok, ~N[1899-12-30 11:45:00]}

iex> XlsxReader.Conversion.to_date_time("1.760243055556", ~D[1999-12-31])
{:ok, ~N[2000-01-01 18:14:45]}

iex> XlsxReader.Conversion.to_date_time("-30.760243055556", ~D[1999-12-31])
:error

to_decimal(string)

@spec to_decimal(String.t()) :: {:ok, Decimal.t()} | :error

Converts a string into an arbitrary precision decimal.

Examples

iex> XlsxReader.Conversion.to_decimal("123")
{:ok, %Decimal{coef: 123, exp: 0, sign: 1}}

iex> XlsxReader.Conversion.to_decimal("-123.45")
{:ok, %Decimal{coef: 12345, exp: -2, sign: -1}}

iex> XlsxReader.Conversion.to_decimal("0.12345e3")
{:ok, %Decimal{coef: 12345, exp: -2, sign: 1}}

iex> XlsxReader.Conversion.to_decimal("0.12345E3")
{:ok, %Decimal{coef: 12345, exp: -2, sign: 1}}

iex> XlsxReader.Conversion.to_decimal("bogus")
:error

to_float(string)

@spec to_float(String.t()) :: {:ok, float()} | :error

Converts a string into a float.

Examples

iex> XlsxReader.Conversion.to_float("123")
{:ok, 123.0}

iex> XlsxReader.Conversion.to_float("-123.45")
{:ok, -123.45}

iex> XlsxReader.Conversion.to_float("0.12345e3")
{:ok, 123.45}

iex> XlsxReader.Conversion.to_float("0.12345E3")
{:ok, 123.45}

iex> XlsxReader.Conversion.to_float("bogus")
:error

to_integer(string)

@spec to_integer(String.t()) :: {:ok, integer()} | :error

Converts a string into an integer.

Examples

iex> XlsxReader.Conversion.to_integer("123")
{:ok, 123}

iex> XlsxReader.Conversion.to_integer("-123")
{:ok, -123}

iex> XlsxReader.Conversion.to_integer("123.45")
:error

iex> XlsxReader.Conversion.to_integer("bogus")
:error

to_number(string, arg)

@spec to_number(String.t(), number_type()) :: {:ok, number_value()} | :error

Converts a string into the given number type.

Supported number types are: Integer, Float, String or Decimal (requires the decimal library)

Examples

iex> XlsxReader.Conversion.to_number("123", Integer)
{:ok, 123}

iex> XlsxReader.Conversion.to_number("-123.45", Float)
{:ok, -123.45}

iex> XlsxReader.Conversion.to_number("0.12345e3", Float)
{:ok, 123.45}

iex> XlsxReader.Conversion.to_number("-123.45", Decimal)
{:ok, %Decimal{coef: 12345, exp: -2, sign: -1}}

iex> XlsxReader.Conversion.to_number("0.12345E3", Decimal)
{:ok, %Decimal{coef: 12345, exp: -2, sign: 1}}

iex> XlsxReader.Conversion.to_number("-123.45", String)
{:ok, "-123.45"}

iex> XlsxReader.Conversion.to_number("0.12345e3", String)
{:ok, "0.12345e3"}

iex> XlsxReader.Conversion.to_number("123.0", Integer)
:error