From 1326122446e84cb2109ab671ea65fd1cbed34e0b Mon Sep 17 00:00:00 2001 From: "Vinicius M.R. de Carvalho" Date: Mon, 10 Jun 2024 14:39:34 -0300 Subject: [PATCH] feat: allow hidden sheets --- example.exs | 4 ++++ lib/elixlsx/sheet.ex | 16 +++++++++++++--- lib/elixlsx/xml_templates.ex | 8 +++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/example.exs b/example.exs index f96313f..d790af5 100755 --- a/example.exs +++ b/example.exs @@ -145,7 +145,11 @@ sheet6 = # nest further |> Sheet.group_cols("C", "D") +# Sheets can also be hidden. +sheet7 = Sheet.with_name("Hidden", state: :hidden) + Workbook.append_sheet(workbook, sheet4) |> Workbook.append_sheet(sheet5) |> Workbook.append_sheet(sheet6) +|> Workbook.append_sheet(sheet7) |> Elixlsx.write_to("example.xlsx") diff --git a/lib/elixlsx/sheet.ex b/lib/elixlsx/sheet.ex index 40cddd2..41df127 100644 --- a/lib/elixlsx/sheet.ex +++ b/lib/elixlsx/sheet.ex @@ -28,6 +28,7 @@ defmodule Elixlsx.Sheet do group_rows: [], merge_cells: [], pane_freeze: nil, + state: :visible, show_grid_lines: true, data_validations: [] @@ -40,6 +41,7 @@ defmodule Elixlsx.Sheet do group_rows: list(rowcol_group), merge_cells: [{String.t(), String.t()}], pane_freeze: {number, number} | nil, + state: :visible | :hidden | :very_hidden, show_grid_lines: boolean(), data_validations: list({String.t(), String.t(), list(String.t()) | String.t()}) } @@ -49,10 +51,18 @@ defmodule Elixlsx.Sheet do Create a sheet with a sheet name. The name can be up to 31 characters long. + + ## Options + + * `state` - sets the default visibility of the sheet. Can be one of: + - `:visible` (default) + - `:hidden` + - `:very_hidden` """ - @spec with_name(String.t()) :: Sheet.t() - def with_name(name) do - %Sheet{name: name} + @spec with_name(String.t(), Keyword.t()) :: Sheet.t() + def with_name(name, opts \\ []) do + state = Keyword.get(opts, :state, :visible) + %Sheet{name: name, state: state} end defp split_cell_content_props(cell) do diff --git a/lib/elixlsx/xml_templates.ex b/lib/elixlsx/xml_templates.ex index e2c83e1..3feeac2 100644 --- a/lib/elixlsx/xml_templates.ex +++ b/lib/elixlsx/xml_templates.ex @@ -123,8 +123,14 @@ defmodule Elixlsx.XMLTemplates do } end + state = case sheet_info.state do + :hidden -> "hidden" + :very_hidden -> "veryHidden" + _ -> "visible" + end + """ - """