View Source XlsxReader.Conversion (xlsx_reader v0.8.7)
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 serial date into a Date
.
Converts a serial date to a NaiveDateTime
.
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
@type date_system() :: 1900 | 1904
Date system identified by its reference year
@type number_type() :: Integer | Float | Decimal | String
Supported number types identified by module name
Supported number value types
Functions
@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
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})
View SourceConverts 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})
View Source@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
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
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
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
@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