Packages

Elixir NIF wrapper for the umya-spreadsheet Rust library, providing Excel (.xlsx) file manipulation capabilities.

Current section

Files

Jump to
umya_spreadsheet_ex lib umya_spreadsheet sheet_view_functions.ex
Raw

lib/umya_spreadsheet/sheet_view_functions.ex

defmodule UmyaSpreadsheet.SheetViewFunctions do
@moduledoc """
Functions for configuring how sheets are displayed in the Excel application.
"""
alias UmyaSpreadsheet.Spreadsheet
alias UmyaNative
@doc """
Sets whether to show gridlines in a sheet.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `show_gridlines` - Boolean indicating whether to show gridlines
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.SheetViewFunctions.set_show_grid_lines(spreadsheet, "Sheet1", false)
"""
def set_show_grid_lines(%Spreadsheet{reference: ref}, sheet_name, show_gridlines) do
case UmyaNative.set_show_grid_lines(ref, sheet_name, show_gridlines) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Sets whether a sheet tab is selected (active) when the workbook is opened.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `selected` - Boolean indicating whether the sheet tab should be selected
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.SheetViewFunctions.set_tab_selected(spreadsheet, "Sheet1", true)
"""
def set_tab_selected(%Spreadsheet{reference: ref}, sheet_name, selected) do
case UmyaNative.set_tab_selected(ref, sheet_name, selected) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Sets the top-left cell in the sheet view (the first visible cell).
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5") to set as the top-left cell
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.SheetViewFunctions.set_top_left_cell(spreadsheet, "Sheet1", "B5")
"""
def set_top_left_cell(%Spreadsheet{reference: ref}, sheet_name, cell_address) do
case UmyaNative.set_top_left_cell(ref, sheet_name, cell_address) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Sets the zoom scale for a sheet view.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `scale` - The zoom scale percentage (e.g., 100 for 100%, 150 for 150%)
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.SheetViewFunctions.set_zoom_scale(spreadsheet, "Sheet1", 150)
"""
def set_zoom_scale(%Spreadsheet{reference: ref}, sheet_name, scale) do
case UmyaNative.set_zoom_scale(ref, sheet_name, scale) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Freezes panes at the specified row and column.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `rows` - The number of rows to freeze
- `cols` - The number of columns to freeze
## Examples
# Freeze the top row
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.SheetViewFunctions.freeze_panes(spreadsheet, "Sheet1", 1, 0)
# Freeze the left column
:ok = UmyaSpreadsheet.SheetViewFunctions.freeze_panes(spreadsheet, "Sheet1", 0, 1)
# Freeze both top row and left column
:ok = UmyaSpreadsheet.SheetViewFunctions.freeze_panes(spreadsheet, "Sheet1", 1, 1)
"""
def freeze_panes(%Spreadsheet{reference: ref}, sheet_name, rows, cols) do
case UmyaNative.freeze_panes(ref, sheet_name, rows, cols) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Splits panes at the specified row and column.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `height` - The height of the split in pixels
- `width` - The width of the split in pixels
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.SheetViewFunctions.split_panes(spreadsheet, "Sheet1", 2000, 2000)
"""
def split_panes(%Spreadsheet{reference: ref}, sheet_name, height, width) do
case UmyaNative.split_panes(ref, sheet_name, height, width) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Sets the tab color for a worksheet.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `color` - The color code (e.g., "#FF0000" for red)
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
# Set sheet tab to red
:ok = UmyaSpreadsheet.SheetViewFunctions.set_tab_color(spreadsheet, "Sheet1", "#FF0000")
"""
def set_tab_color(%Spreadsheet{reference: ref}, sheet_name, color) do
case UmyaNative.set_tab_color(ref, sheet_name, color) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Sets the sheet view type.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `view_type` - The type of view: "normal", "page_layout", or "page_break_preview"
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
# Set to normal view
:ok = UmyaSpreadsheet.SheetViewFunctions.set_sheet_view(spreadsheet, "Sheet1", "normal")
# Set to page layout view
:ok = UmyaSpreadsheet.SheetViewFunctions.set_sheet_view(spreadsheet, "Sheet1", "page_layout")
# Set to page break preview
:ok = UmyaSpreadsheet.SheetViewFunctions.set_sheet_view(spreadsheet, "Sheet1", "page_break_preview")
"""
def set_sheet_view(%Spreadsheet{reference: ref}, sheet_name, view_type) do
case UmyaNative.set_sheet_view(ref, sheet_name, view_type) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Sets the zoom scale for the normal view.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `scale` - The zoom scale percentage (e.g., 100 for 100%, 150 for 150%)
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.SheetViewFunctions.set_zoom_scale_normal(spreadsheet, "Sheet1", 75)
"""
def set_zoom_scale_normal(%Spreadsheet{reference: ref}, sheet_name, scale) do
case UmyaNative.set_zoom_scale_normal(ref, sheet_name, scale) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Sets the zoom scale for the page layout view.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `scale` - The zoom scale percentage (e.g., 100 for 100%, 150 for 150%)
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.SheetViewFunctions.set_zoom_scale_page_layout(spreadsheet, "Sheet1", 120)
"""
def set_zoom_scale_page_layout(%Spreadsheet{reference: ref}, sheet_name, scale) do
case UmyaNative.set_zoom_scale_page_layout(ref, sheet_name, scale) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Sets the zoom scale for the page break preview view.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `scale` - The zoom scale percentage (e.g., 100 for 100%, 150 for 150%)
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.SheetViewFunctions.set_zoom_scale_page_break(spreadsheet, "Sheet1", 80)
"""
def set_zoom_scale_page_break(%Spreadsheet{reference: ref}, sheet_name, scale) do
case UmyaNative.set_zoom_scale_page_break(ref, sheet_name, scale) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Sets the active selection in a worksheet.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `active_cell` - The active cell address (e.g., "A1", "B5")
- `sqref` - The selection range reference (e.g., "A1:B5")
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.SheetViewFunctions.set_selection(spreadsheet, "Sheet1", "C3", "C3:D5")
"""
def set_selection(%Spreadsheet{reference: ref}, sheet_name, active_cell, sqref) do
case UmyaNative.set_selection(ref, sheet_name, active_cell, sqref) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Gets whether gridlines are shown in a sheet.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
## Returns
- `{:ok, boolean}` where `boolean` indicates whether gridlines are shown
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, show_gridlines} = UmyaSpreadsheet.SheetViewFunctions.get_show_grid_lines(spreadsheet, "Sheet1")
# show_gridlines = true
"""
def get_show_grid_lines(%Spreadsheet{reference: ref}, sheet_name) do
UmyaNative.get_show_grid_lines(ref, sheet_name)
end
@doc """
Gets the zoom scale for a sheet view.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
## Returns
- `{:ok, integer}` where `integer` is the zoom scale percentage
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, zoom_scale} = UmyaSpreadsheet.SheetViewFunctions.get_zoom_scale(spreadsheet, "Sheet1")
# zoom_scale = 100
"""
def get_zoom_scale(%Spreadsheet{reference: ref}, sheet_name) do
UmyaNative.get_zoom_scale(ref, sheet_name)
end
@doc """
Gets the tab color for a worksheet.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
## Returns
- `{:ok, color}` where `color` is a string with the color code (e.g., "#FF0000" for red)
or an empty string if no color is set
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, color} = UmyaSpreadsheet.SheetViewFunctions.get_tab_color(spreadsheet, "Sheet1")
# color = "#FF0000"
"""
def get_tab_color(%Spreadsheet{reference: ref}, sheet_name) do
UmyaNative.get_tab_color(ref, sheet_name)
end
@doc """
Gets the sheet view type.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
## Returns
- `{:ok, view_type}` where `view_type` is one of "normal", "page_layout", or "page_break_preview"
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, view_type} = UmyaSpreadsheet.SheetViewFunctions.get_sheet_view(spreadsheet, "Sheet1")
# view_type = "normal"
"""
def get_sheet_view(%Spreadsheet{reference: ref}, sheet_name) do
UmyaNative.get_sheet_view(ref, sheet_name)
end
@doc """
Gets the active selection in a worksheet.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
## Returns
- `{:ok, selection}` where `selection` is a map with "active_cell" and "sqref" keys
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, selection} = UmyaSpreadsheet.SheetViewFunctions.get_selection(spreadsheet, "Sheet1")
# selection = %{"active_cell" => "A1", "sqref" => "A1:B5"}
"""
def get_selection(%Spreadsheet{reference: ref}, sheet_name) do
UmyaNative.get_selection(ref, sheet_name)
end
end