I’m trying to dynamically generate a XLSX file, using elixlsx and I’m doing it, but the file generated doesn’t have any file extension, i.e. I just download a file called download and I’d like to download download.xlsx. Can someone help me. please?
My current relevant code is:
config/config.exs
# Configures xlsx mime type
config :mime, :types, %{
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" => ["xlsx"]
}
web/router.ex
defmodule Backoffice.Router do
use Backoffice.Web, :router
pipeline :browser do
plug :accepts, ["html", "xlsx"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
end
pipeline :api do
plug :accepts, ["json"]
end
scope "/", Backoffice do
pipe_through :browser # Use the default browser stack
get "/", PageController, :index
get "/download_form", PageController, :download_form
get "/download", PageController, :download
end
end
web/controllers/page_controller.ex
defmodule Backoffice.PageController do
use Backoffice.Web, :controller
def index(conn, _params) do
render conn, "index.html"
end
# render download form
def download_form(conn, _params) do
render conn, "download_form.html"
end
# generates XLSX
def download(conn, _params) do
render conn, "download.xlsx"
end
end
web/views/page_view.ex
defmodule Backoffice.PageView do
use Backoffice.Web, :view
import Elixlsx
alias Elixlsx.Workbook
alias Elixlsx.Sheet
def render("download.xlsx", _params) do #, %{tweets: tweets}) do
Workbook.append_sheet(%Workbook{}, Sheet.with_name("Sheet 1")
|> Sheet.set_cell("A1", "Hello", bold: true))
|> Elixlsx.write_to_memory("download.xlsx") |> elem(1) |> elem(1)
end
end