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/chart_functions.ex
defmodule UmyaSpreadsheet.ChartFunctions do
@moduledoc """
Functions for creating and manipulating charts in a spreadsheet.
"""
alias UmyaSpreadsheet.Spreadsheet
alias UmyaNative
@doc """
Adds a chart to a spreadsheet.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `chart_type` - The type of chart (e.g., "bar", "line", "pie")
- `from_cell` - The top-left cell of the chart position
- `to_cell` - The bottom-right cell of the chart position
- `title` - The title of the chart
- `data_series` - A list of data series ranges
- `series_titles` - A list of series titles
- `point_titles` - A list of point titles (categories)
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.ChartFunctions.add_chart(
spreadsheet,
"Sheet1",
"bar",
"E2",
"K15",
"Sales Chart",
["B2:B10"],
["Sales"],
["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep"]
)
"""
def add_chart(
%Spreadsheet{reference: ref},
sheet_name,
chart_type,
from_cell,
to_cell,
title,
data_series,
series_titles,
point_titles
) do
case UmyaNative.add_chart(
ref,
sheet_name,
chart_type,
from_cell,
to_cell,
title,
data_series,
series_titles,
point_titles
) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Adds a chart to a spreadsheet with advanced options.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `chart_type` - The type of chart (e.g., "bar", "line", "pie")
- `from_cell` - The top-left cell of the chart position
- `to_cell` - The bottom-right cell of the chart position
- `title` - The title of the chart
- `data_series` - A list of data series ranges
- `series_titles` - A list of series titles
- `point_titles` - A list of point titles (categories)
- `style` - Chart style number
- `vary_colors` - Boolean indicating whether to vary colors by point
- `view_3d` - 3D view options (rotation, perspective)
- `legend` - Legend options (position, overlay)
- `axes` - Axes options (titles, formatting)
- `data_labels` - Data label options
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.ChartFunctions.add_chart_with_options(
spreadsheet,
"Sheet1",
"bar",
"E2",
"K15",
"Sales Chart",
["B2:B10"],
["Sales"],
["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep"],
2,
true,
%{rot_x: 30, rot_y: 20, perspective: 30, height_percent: 100},
%{position: "right", overlay: false},
%{category_axis_title: "Month", value_axis_title: "Amount"},
%{show_values: true, show_percent: false, show_category_name: false, show_series_name: true, position: "outside_end"}
)
"""
def add_chart_with_options(
%Spreadsheet{} = spreadsheet,
sheet_name,
chart_type,
from_cell,
to_cell,
title,
data_series,
series_titles,
point_titles,
style,
vary_colors,
view_3d,
legend,
axes,
data_labels
) do
add_chart_with_options(
spreadsheet,
sheet_name,
chart_type,
from_cell,
to_cell,
title,
data_series,
series_titles,
point_titles,
style,
vary_colors,
view_3d,
legend,
axes,
data_labels,
nil
)
end
@doc """
Adds a chart to a spreadsheet with advanced options, including chart-specific options.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `chart_type` - The type of chart (e.g., "bar", "line", "pie")
- `from_cell` - The top-left cell of the chart position
- `to_cell` - The bottom-right cell of the chart position
- `title` - The title of the chart
- `data_series` - A list of data series ranges
- `series_titles` - A list of series titles
- `point_titles` - A list of point titles (categories)
- `style` - Chart style number
- `vary_colors` - Boolean indicating whether to vary colors by point
- `view_3d` - 3D view options (rotation, perspective)
- `legend` - Legend options (position, overlay)
- `axes` - Axes options (titles, formatting)
- `data_labels` - Data label options
- `chart_specific` - Chart-specific options
## Returns
- `:ok` on success
- `{:error, reason}` on failure
"""
def add_chart_with_options(
%Spreadsheet{reference: ref},
sheet_name,
chart_type,
from_cell,
to_cell,
title,
data_series,
series_titles,
point_titles,
style,
vary_colors,
view_3d,
legend,
axes,
data_labels,
chart_specific
) do
case UmyaNative.add_chart_with_options(
ref,
sheet_name,
chart_type,
from_cell,
to_cell,
title,
data_series,
series_titles,
point_titles,
style,
vary_colors,
view_3d,
legend,
axes,
data_labels,
chart_specific
) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Sets the chart style.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `chart_index` - The index of the chart (0-based)
- `style` - The style number (1-48)
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.ChartFunctions.set_chart_style(spreadsheet, "Sheet1", 0, 5)
"""
def set_chart_style(%Spreadsheet{reference: ref}, sheet_name, chart_index, style) do
case UmyaNative.set_chart_style(ref, sheet_name, chart_index, style) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Sets data labels for a chart.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `chart_index` - The index of the chart (0-based)
- `show_values` - Boolean indicating whether to show values
- `show_percent` - Boolean indicating whether to show percentages
- `show_category_name` - Boolean indicating whether to show category names
- `show_series_name` - Boolean indicating whether to show series names
- `position` - The position of the data labels (e.g., "outside_end", "center", "inside_end")
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.ChartFunctions.set_chart_data_labels(
spreadsheet,
"Sheet1",
0,
true,
false,
true,
false,
"outside_end"
)
"""
def set_chart_data_labels(
%Spreadsheet{reference: ref},
sheet_name,
chart_index,
show_values,
show_percent,
show_category_name,
show_series_name,
position
) do
case UmyaNative.set_chart_data_labels(
ref,
sheet_name,
chart_index,
show_values,
show_percent,
show_category_name,
show_series_name,
position
) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Sets the legend position for a chart.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `chart_index` - The index of the chart (0-based)
- `position` - The position of the legend (e.g., "right", "left", "top", "bottom", "top_right")
- `overlay` - Boolean indicating whether the legend should overlay the chart
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.ChartFunctions.set_chart_legend_position(spreadsheet, "Sheet1", 0, "right", false)
"""
def set_chart_legend_position(
%Spreadsheet{reference: ref},
sheet_name,
chart_index,
position,
overlay
) do
case UmyaNative.set_chart_legend_position(ref, sheet_name, chart_index, position, overlay) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Sets 3D view properties for a chart.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `chart_index` - The index of the chart (0-based)
- `rot_x` - X-axis rotation (degrees)
- `rot_y` - Y-axis rotation (degrees)
- `perspective` - Perspective (0-100)
- `height_percent` - Height as percentage of width
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.ChartFunctions.set_chart_3d_view(spreadsheet, "Sheet1", 0, 30, 20, 30, 100)
"""
def set_chart_3d_view(
%Spreadsheet{reference: ref},
sheet_name,
chart_index,
rot_x,
rot_y,
perspective,
height_percent
) do
case UmyaNative.set_chart_3d_view(
ref,
sheet_name,
chart_index,
rot_x,
rot_y,
perspective,
height_percent
) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
@doc """
Sets axis titles for a chart.
## Parameters
- `spreadsheet` - The spreadsheet struct
- `sheet_name` - The name of the sheet
- `chart_index` - The index of the chart (0-based)
- `category_axis_title` - The title for the category (X) axis
- `value_axis_title` - The title for the value (Y) axis
## Returns
- `:ok` on success
- `{:error, reason}` on failure
## Examples
{:ok, spreadsheet} = UmyaSpreadsheet.read_file("input.xlsx")
:ok = UmyaSpreadsheet.ChartFunctions.set_chart_axis_titles(spreadsheet, "Sheet1", 0, "Month", "Sales (USD)")
"""
def set_chart_axis_titles(
%Spreadsheet{reference: ref},
sheet_name,
chart_index,
category_axis_title,
value_axis_title
) do
case UmyaNative.set_chart_axis_titles(
ref,
sheet_name,
chart_index,
category_axis_title,
value_axis_title
) do
{:ok, :ok} -> :ok
:ok -> :ok
result -> result
end
end
end