Packages
umya_spreadsheet_ex
0.7.0
Elixir NIF wrapper for the umya-spreadsheet Rust library, providing Excel (.xlsx) file manipulation capabilities.
Current section
Files
Jump to
Current section
Files
lib/umya_spreadsheet/comment_functions.ex
defmodule UmyaSpreadsheet.CommentFunctions do
@moduledoc """
Functions for working with cell comments in spreadsheets.
"""
alias UmyaSpreadsheet.Spreadsheet
alias UmyaSpreadsheet.ErrorHandling
alias UmyaNative
@doc """
Adds a comment to a cell.
## Parameters
* `spreadsheet` - The spreadsheet reference
* `sheet_name` - Name of the worksheet
* `cell_address` - Cell address in A1 notation (e.g., "A1", "B2")
* `text` - Text content of the comment
* `author` - Name of the comment author
## Examples
iex> UmyaSpreadsheet.add_comment(spreadsheet, "Sheet1", "A1", "This is a comment", "John Doe")
:ok
"""
@spec add_comment(Spreadsheet.t(), String.t(), String.t(), String.t(), String.t()) :: :ok | {:error, atom()}
def add_comment(%Spreadsheet{reference: ref}, sheet_name, cell_address, text, author) do
UmyaNative.add_comment(ref, sheet_name, cell_address, text, author)
|> ErrorHandling.standardize_result()
end
@doc """
Gets the comment text and author from a cell.
## Parameters
* `spreadsheet` - The spreadsheet reference
* `sheet_name` - Name of the worksheet
* `cell_address` - Cell address in A1 notation (e.g., "A1", "B2")
## Examples
iex> UmyaSpreadsheet.get_comment(spreadsheet, "Sheet1", "A1")
{:ok, "This is a comment", "John Doe"}
"""
@spec get_comment(Spreadsheet.t(), String.t(), String.t()) :: {:ok, String.t(), String.t()} | {:error, atom()}
def get_comment(%Spreadsheet{reference: ref}, sheet_name, cell_address) do
UmyaNative.get_comment(ref, sheet_name, cell_address)
|> case do
{:ok, {:ok, text, author}} -> {:ok, text, author} # Fix nested :ok tuples
{:ok, text, author} -> {:ok, text, author}
error -> ErrorHandling.unwrap_error(error)
end
end
@doc """
Updates an existing comment in a cell.
## Parameters
* `spreadsheet` - The spreadsheet reference
* `sheet_name` - Name of the worksheet
* `cell_address` - Cell address in A1 notation (e.g., "A1", "B2")
* `text` - New text content for the comment
* `author` - Optional new author name (if nil, keeps the existing author)
## Examples
iex> UmyaSpreadsheet.update_comment(spreadsheet, "Sheet1", "A1", "Updated comment")
:ok
iex> UmyaSpreadsheet.update_comment(spreadsheet, "Sheet1", "A1", "Updated comment", "Jane Smith")
:ok
"""
@spec update_comment(Spreadsheet.t(), String.t(), String.t(), String.t(), String.t() | nil) :: :ok | {:error, atom()}
def update_comment(%Spreadsheet{reference: ref}, sheet_name, cell_address, text, author \\ nil) do
UmyaNative.update_comment(ref, sheet_name, cell_address, text, author)
|> ErrorHandling.standardize_result()
end
@doc """
Removes a comment from a cell.
## Parameters
* `spreadsheet` - The spreadsheet reference
* `sheet_name` - Name of the worksheet
* `cell_address` - Cell address in A1 notation (e.g., "A1", "B2")
## Examples
iex> UmyaSpreadsheet.remove_comment(spreadsheet, "Sheet1", "A1")
:ok
"""
@spec remove_comment(Spreadsheet.t(), String.t(), String.t()) :: :ok | {:error, atom()}
def remove_comment(%Spreadsheet{reference: ref}, sheet_name, cell_address) do
UmyaNative.remove_comment(ref, sheet_name, cell_address)
|> ErrorHandling.standardize_result()
end
@doc """
Checks if a sheet has any comments.
## Parameters
* `spreadsheet` - The spreadsheet reference
* `sheet_name` - Name of the worksheet
## Examples
iex> UmyaSpreadsheet.has_comments(spreadsheet, "Sheet1")
true
"""
@spec has_comments(Spreadsheet.t(), String.t()) :: boolean() | {:error, atom()}
def has_comments(%Spreadsheet{reference: ref}, sheet_name) do
UmyaNative.has_comments(ref, sheet_name)
|> ErrorHandling.standardize_result()
end
@doc """
Gets the number of comments in a sheet.
## Parameters
* `spreadsheet` - The spreadsheet reference
* `sheet_name` - Name of the worksheet
## Examples
iex> UmyaSpreadsheet.get_comments_count(spreadsheet, "Sheet1")
3
"""
@spec get_comments_count(Spreadsheet.t(), String.t()) :: integer() | {:error, atom()}
def get_comments_count(%Spreadsheet{reference: ref}, sheet_name) do
UmyaNative.get_comments_count(ref, sheet_name)
|> ErrorHandling.standardize_result()
end
end