xlsx_reader v0.4.0 XlsxReader.Conversion View Source

Conversion of cell values to Elixir types.

Link to this section 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.

Link to this section Types

Specs

date_system() :: 1900 | 1904

Date system identified by its reference year

Specs

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

Supported number types identified by module name

Specs

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

Supported number value types

Link to this section Functions

Specs

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

Specs

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
Link to this function

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

View Source

Specs

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
Link to this function

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

View Source

Specs

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

Specs

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

Specs

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

Specs

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

Specs

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