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 font_functions.ex
Raw

lib/umya_spreadsheet/font_functions.ex

defmodule UmyaSpreadsheet.FontFunctions do
@moduledoc """
Functions for manipulating font styles in a spreadsheet.
"""
alias UmyaSpreadsheet.Spreadsheet
alias UmyaSpreadsheet.ErrorHandling
alias UmyaNative
@doc """
Sets the font color for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
- `color` - The color code (e.g., "#FF0000" for red)
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
# Set text to red
:ok = UmyaSpreadsheet.FontFunctions.set_font_color(spreadsheet, "Sheet1", "A1", "#FF0000")
"""
def set_font_color(%Spreadsheet{reference: ref}, sheet_name, cell_address, color) do
UmyaNative.set_font_color(ref, sheet_name, cell_address, color)
|> ErrorHandling.standardize_result()
end
@doc """
Sets the font size for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
- `size` - The font size in points
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.FontFunctions.set_font_size(spreadsheet, "Sheet1", "A1", 14)
"""
def set_font_size(%Spreadsheet{reference: ref}, sheet_name, cell_address, size) do
UmyaNative.set_font_size(ref, sheet_name, cell_address, size)
|> ErrorHandling.standardize_result()
end
@doc """
Sets the font weight (bold) for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
- `is_bold` - Boolean indicating whether the font should be bold
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.FontFunctions.set_font_bold(spreadsheet, "Sheet1", "A1", true)
"""
def set_font_bold(%Spreadsheet{reference: ref}, sheet_name, cell_address, is_bold) do
UmyaNative.set_font_bold(ref, sheet_name, cell_address, is_bold)
|> ErrorHandling.standardize_result()
end
@doc """
Sets the font name for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
- `font_name` - The name of the font
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.FontFunctions.set_font_name(spreadsheet, "Sheet1", "A1", "Arial")
"""
def set_font_name(%Spreadsheet{reference: ref}, sheet_name, cell_address, font_name) do
UmyaNative.set_font_name(ref, sheet_name, cell_address, font_name)
|> ErrorHandling.standardize_result()
end
@doc """
Sets the font style to italic for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
- `is_italic` - Boolean indicating whether the font should be italic
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.FontFunctions.set_font_italic(spreadsheet, "Sheet1", "A1", true)
"""
def set_font_italic(%Spreadsheet{reference: ref}, sheet_name, cell_address, is_italic) do
UmyaNative.set_font_italic(ref, sheet_name, cell_address, is_italic)
|> ErrorHandling.standardize_result()
end
@doc """
Sets the font underline style for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
- `underline_style` - The underline style ("single", "double", "none")
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.FontFunctions.set_font_underline(spreadsheet, "Sheet1", "A1", "single")
"""
def set_font_underline(%Spreadsheet{reference: ref}, sheet_name, cell_address, underline_style) do
UmyaNative.set_font_underline(ref, sheet_name, cell_address, underline_style)
|> ErrorHandling.standardize_result()
end
@doc """
Sets the font strikethrough property for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
- `is_strikethrough` - Boolean indicating whether the font should have strikethrough
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.FontFunctions.set_font_strikethrough(spreadsheet, "Sheet1", "A1", true)
"""
def set_font_strikethrough(
%Spreadsheet{reference: ref},
sheet_name,
cell_address,
is_strikethrough
) do
UmyaNative.set_font_strikethrough(ref, sheet_name, cell_address, is_strikethrough)
|> ErrorHandling.standardize_result()
end
@doc """
Sets the font family for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
- `font_family` - The font family: "roman" (serif), "swiss" (sans-serif), "modern" (monospace),
"script", or "decorative"
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.FontFunctions.set_font_family(spreadsheet, "Sheet1", "A1", "swiss")
"""
def set_font_family(%Spreadsheet{reference: ref}, sheet_name, cell_address, font_family) do
UmyaNative.set_font_family(ref, sheet_name, cell_address, font_family)
|> ErrorHandling.standardize_result()
end
@doc """
Sets the font scheme for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
- `font_scheme` - The font scheme: "major", "minor", or "none"
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.FontFunctions.set_font_scheme(spreadsheet, "Sheet1", "A1", "major")
"""
def set_font_scheme(%Spreadsheet{reference: ref}, sheet_name, cell_address, font_scheme) do
UmyaNative.set_font_scheme(ref, sheet_name, cell_address, font_scheme)
|> ErrorHandling.standardize_result()
end
# Font getter functions
@doc """
Gets the font name for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
## Returns
- `{:ok, font_name}` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, font_name} = UmyaSpreadsheet.FontFunctions.get_font_name(spreadsheet, "Sheet1", "A1")
"""
def get_font_name(%Spreadsheet{reference: ref}, sheet_name, cell_address) do
case UmyaNative.get_font_name(ref, sheet_name, cell_address) do
{:error, _} = error -> error
font_name -> {:ok, font_name}
end
end
@doc """
Gets the font size for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
## Returns
- `{:ok, font_size}` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, font_size} = UmyaSpreadsheet.FontFunctions.get_font_size(spreadsheet, "Sheet1", "A1")
"""
def get_font_size(%Spreadsheet{reference: ref}, sheet_name, cell_address) do
case UmyaNative.get_font_size(ref, sheet_name, cell_address) do
{:error, _} = error -> error
font_size -> {:ok, font_size}
end
end
@doc """
Gets the bold state for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
## Returns
- `{:ok, is_bold}` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, is_bold} = UmyaSpreadsheet.FontFunctions.get_font_bold(spreadsheet, "Sheet1", "A1")
"""
def get_font_bold(%Spreadsheet{reference: ref}, sheet_name, cell_address) do
case UmyaNative.get_font_bold(ref, sheet_name, cell_address) do
{:error, _} = error -> error
is_bold -> {:ok, is_bold}
end
end
@doc """
Gets the italic state for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
## Returns
- `{:ok, is_italic}` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, is_italic} = UmyaSpreadsheet.FontFunctions.get_font_italic(spreadsheet, "Sheet1", "A1")
"""
def get_font_italic(%Spreadsheet{reference: ref}, sheet_name, cell_address) do
case UmyaNative.get_font_italic(ref, sheet_name, cell_address) do
{:error, _} = error -> error
is_italic -> {:ok, is_italic}
end
end
@doc """
Gets the underline style for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
## Returns
- `{:ok, underline_style}` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, underline_style} = UmyaSpreadsheet.FontFunctions.get_font_underline(spreadsheet, "Sheet1", "A1")
"""
def get_font_underline(%Spreadsheet{reference: ref}, sheet_name, cell_address) do
case UmyaNative.get_font_underline(ref, sheet_name, cell_address) do
{:error, _} = error -> error
underline_style -> {:ok, underline_style}
end
end
@doc """
Gets the strikethrough state for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
## Returns
- `{:ok, is_strikethrough}` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, is_strikethrough} = UmyaSpreadsheet.FontFunctions.get_font_strikethrough(spreadsheet, "Sheet1", "A1")
"""
def get_font_strikethrough(%Spreadsheet{reference: ref}, sheet_name, cell_address) do
case UmyaNative.get_font_strikethrough(ref, sheet_name, cell_address) do
{:error, _} = error -> error
is_strikethrough -> {:ok, is_strikethrough}
end
end
@doc """
Gets the font family for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
## Returns
- `{:ok, font_family}` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, font_family} = UmyaSpreadsheet.FontFunctions.get_font_family(spreadsheet, "Sheet1", "A1")
"""
def get_font_family(%Spreadsheet{reference: ref}, sheet_name, cell_address) do
case UmyaNative.get_font_family(ref, sheet_name, cell_address) do
{:error, _} = error -> error
font_family -> {:ok, font_family}
end
end
@doc """
Gets the font scheme for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
## Returns
- `{:ok, font_scheme}` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, font_scheme} = UmyaSpreadsheet.FontFunctions.get_font_scheme(spreadsheet, "Sheet1", "A1")
"""
def get_font_scheme(%Spreadsheet{reference: ref}, sheet_name, cell_address) do
case UmyaNative.get_font_scheme(ref, sheet_name, cell_address) do
{:error, _} = error -> error
font_scheme -> {:ok, font_scheme}
end
end
@doc """
Gets the font color for a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1", "B5")
## Returns
- `{:ok, font_color}` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, font_color} = UmyaSpreadsheet.FontFunctions.get_font_color(spreadsheet, "Sheet1", "A1")
"""
def get_font_color(%Spreadsheet{reference: ref}, sheet_name, cell_address) do
case UmyaNative.get_font_color(ref, sheet_name, cell_address) do
{:error, _} = error -> error
font_color -> {:ok, font_color}
end
end
end