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/image_functions.ex
defmodule UmyaSpreadsheet.ImageFunctions do
@moduledoc """
Functions for working with images in a spreadsheet.
"""
alias UmyaSpreadsheet.Spreadsheet
alias UmyaSpreadsheet.ErrorHandling
alias UmyaNative
@doc """
Adds an image to a spreadsheet.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1") where the top-left corner of the image should be placed
- `image_path` - The path to the image file
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.ImageFunctions.add_image(spreadsheet, "Sheet1", "C5", "path/to/image.png")
"""
def add_image(%Spreadsheet{reference: ref}, sheet_name, cell_address, image_path) do
UmyaNative.add_image(ref, sheet_name, cell_address, image_path)
|> ErrorHandling.standardize_result()
end
@doc """
Extracts an image from a spreadsheet and saves it to a file.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1") where the image is located
- `output_path` - The path where the image should be saved
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.ImageFunctions.download_image(spreadsheet, "Sheet1", "C5", "extracted_image.png")
"""
def download_image(%Spreadsheet{reference: ref}, sheet_name, cell_address, output_path) do
UmyaNative.download_image(ref, sheet_name, cell_address, output_path)
|> ErrorHandling.standardize_result()
end
@doc """
Changes an existing image in a spreadsheet to a new image.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1") where the image is located
- `new_image_path` - The path to the new image file
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.ImageFunctions.change_image(spreadsheet, "Sheet1", "C5", "path/to/new_image.png")
"""
def change_image(%Spreadsheet{reference: ref}, sheet_name, cell_address, new_image_path) do
UmyaNative.change_image(ref, sheet_name, cell_address, new_image_path)
|> ErrorHandling.standardize_result()
end
@doc """
Gets the dimensions (width, height) of an image in a cell.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1") where the image is located
## Returns
- `{:ok, {width, height}}` where width and height are in pixels
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, {width, height}} = UmyaSpreadsheet.ImageFunctions.get_image_dimensions(spreadsheet, "Sheet1", "C5")
"""
def get_image_dimensions(%Spreadsheet{reference: ref}, sheet_name, cell_address) do
UmyaNative.get_image_dimensions(ref, sheet_name, cell_address)
|> ErrorHandling.standardize_result()
end
@doc """
Lists all images in a sheet with their positions and names.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
## Returns
- `{:ok, [{coordinate, image_name}, ...]}` with a list of image coordinates and names
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, images} = UmyaSpreadsheet.ImageFunctions.list_images(spreadsheet, "Sheet1")
# Print all images in the sheet
Enum.each(images, fn {coord, img_name} ->
IO.puts("Image '\#{img_name}' at position \#{coord}")
end)
"""
def list_images(%Spreadsheet{reference: ref}, sheet_name) do
UmyaNative.list_images(ref, sheet_name)
|> ErrorHandling.standardize_result()
end
@doc """
Gets comprehensive information about an image in a spreadsheet.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `cell_address` - The cell address (e.g., "A1") where the image is located
## Returns
- `{:ok, {name, position, width, height}}` with the image details
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
{:ok, {name, pos, width, height}} = UmyaSpreadsheet.ImageFunctions.get_image_info(spreadsheet, "Sheet1", "C5")
# Print the image information
IO.puts("Image '" <> name <>"' at position " <> pos <>", dimensions: "<>width{}"x"<>height<>" pixels")
"""
def get_image_info(%Spreadsheet{reference: ref}, sheet_name, cell_address) do
UmyaNative.get_image_info(ref, sheet_name, cell_address)
|> ErrorHandling.standardize_result()
end
end