Magik.ExcelView (Magik v0.10.0) View Source

ExcelView helps to render Excel content for Elixlsx easier

Use as a view

  defmodule TestView do
    use Magik.ExcelView

    # render list or stream
    def render_content(user_list) do
      fields = [:name, :email, :age, :is_teenager]
      render_row(user_list, fields)

      # or render with assigns
      render_row(user_list, fields, %{message: "hi"})
    end

    # by default raw value of the item is used
    # here we define custom render for a specific view
    def render_field(:is_teenager, user) do
      if user.age < 20, do: "YES", else: "NO"
    end
  end

Fields Could be a real field in the data or virtual field. If it's virtual field, you have to define a custom render function as described below. A field could be:

  • field_name Ex: :name
  • {field, format} Ex: {:name, bold: true, italic: true}

Custom render You can define custom render function for specific field

  • render_field(field_name, struct)
  • render_field(field_name, struct, assigns)

Use without view

ExcelView can be used without defining a view.

def render_excel_data (user_list) do
  fields = [
    :name,
    {:email, bold: true},
    :age,
    {:is_teenager, &/is_teenager/1}
  ]
  Magik.ExcelView.rener_row(user_list, fields)

  # or with assigns
  Magik.ExcelView.rener_row(user_list, fields, %{custom: "custom"})
end

def is_teenager(user) do
  if user.age < 20, do: "YES", else: "NO"
end

A field could be:

  • field_name Ex: :name
  • {field, format} Ex: {:name, bold: true, italic: true}
  • {field, render_func}
  • {field, render_func, format}

Render functions would be accepted

  • func(struct)
  • func(field_name, struct)

Link to this section Summary

Link to this section Functions

Link to this function

render_cell(struct, view, field, assigns \\ [])

View Source

render cell without view, in this case, field must be a tuple of

  • {field, render_fn, format}
  • {field, render_fn}
  • {field, format}
  • field_name

render cell with a view, view must define render_cell/2 for each field field definition format:

  • {field_name, format}
  • field_name
Link to this function

render_row(struct, view \\ nil, fields, assigns \\ [])

View Source