# Changelog
## 0.7.0 - 2025-06-04
First public release.
## 0.6.17 - 2025-06-03
### Added
- **Pivot Table Enhancements**:
- **Enhanced Access to Pivot Table Components** - Added comprehensive functions for working with pivot table internal components
- New function `UmyaSpreadsheet.PivotTable.get_pivot_table_cache_fields/3` retrieves all cache fields in a pivot table
- New function `UmyaSpreadsheet.PivotTable.get_pivot_table_cache_field/4` gets detailed information about a specific cache field
- New function `UmyaSpreadsheet.PivotTable.get_pivot_table_data_fields/3` retrieves all data fields in a pivot table
- New function `UmyaSpreadsheet.PivotTable.get_pivot_table_cache_source/3` gets the cache source configuration
- **Enhanced Modification Capabilities** - Added functions to modify pivot table components
- New function `UmyaSpreadsheet.PivotTable.add_pivot_table_data_field/5-7` adds a new data field to an existing pivot table
- New function `UmyaSpreadsheet.PivotTable.update_pivot_table_cache/5` updates the cache source configuration
- **Comprehensive Testing** - Added thorough test suite for new pivot table functionality
- **Improved Documentation** - Updated pivot table guide with detailed documentation for all new enhanced features
### Fixed
- **Conditional Formatting API Consistency**:
- **Return Type Standardization** - Fixed inconsistent return types for conditional formatting getter functions
- Functions `get_color_scales/2-3`, `get_data_bars/2-3`, and `get_icon_sets/2-3` now consistently return `{:ok, list()}` tuples
- Previously these functions returned raw lists while other similar functions returned `{:ok, list()}` tuples
- This change ensures consistent error handling patterns across all conditional formatting getter functions
- Updated all related tests to handle the new consistent API
- **Breaking Change**: Code using these functions must now pattern match on `{:ok, results}` instead of expecting direct lists
### Documentation
- **Conditional Formatting Guide**:
- Updated documentation to reflect the new consistent return types for getter functions
- Added clear examples showing the correct pattern matching for `{:ok, list}` returns
- Enhanced documentation with version notes about API consistency improvements
## 0.6.16 - 2025-06-02
### Added
- **Drawing and Shape Features**:
- **Drawing Getter Functions** - Added comprehensive getter functions for shapes, text boxes, and connectors
- New function `UmyaSpreadsheet.Drawing.get_shapes/2-3` retrieves all shapes in a worksheet
- New function `UmyaSpreadsheet.Drawing.get_text_boxes/2-3` retrieves all text boxes in a worksheet
- New function `UmyaSpreadsheet.Drawing.get_connectors/2-3` retrieves all connector lines in a worksheet
- New utility function `UmyaSpreadsheet.Drawing.has_drawing_objects/2-3` checks if a worksheet contains drawing objects
- New utility function `UmyaSpreadsheet.Drawing.count_drawing_objects/2-3` counts drawing objects in a worksheet
- **Enhanced Documentation** - Added comprehensive guide for drawing functions with examples
- **Data Validation Enhancements**:
- **Enhanced Date Validation** - `add_date_validation/11` now accepts both string dates and Elixir Date structs
- **Improved Documentation** - Merged and enhanced data validation documentation into a comprehensive guide
- **Rule Retrieval Capabilities** - Added comprehensive getter functions for data validation
- New function `UmyaSpreadsheet.DataValidation.get_data_validations/2-3` retrieves all data validation rules for a sheet or range
- New function `UmyaSpreadsheet.DataValidation.get_list_validations/2-3` retrieves dropdown list validation rules
- New function `UmyaSpreadsheet.DataValidation.get_number_validations/2-3` retrieves numeric constraint validation rules
- New function `UmyaSpreadsheet.DataValidation.get_date_validations/2-3` retrieves date constraint validation rules
- New function `UmyaSpreadsheet.DataValidation.get_text_length_validations/2-3` retrieves text length validation rules
- New function `UmyaSpreadsheet.DataValidation.get_custom_validations/2-3` retrieves custom formula validation rules
- New utility function `UmyaSpreadsheet.DataValidation.has_data_validations/2-3` checks if validations exist
- New utility function `UmyaSpreadsheet.DataValidation.count_data_validations/2-3` counts validation rules
- **Conditional Formatting Getter Functions**:
- **Rule Retrieval Capabilities** - Added comprehensive getter functions for conditional formatting rules
- New function `UmyaSpreadsheet.ConditionalFormatting.get_conditional_formatting_rules/2-3` retrieves all conditional formatting rules for a sheet or range
- New function `UmyaSpreadsheet.ConditionalFormatting.get_cell_value_rules/2-3` retrieves cell value conditional formatting rules
- New function `UmyaSpreadsheet.ConditionalFormatting.get_color_scales/2-3` retrieves color scale conditional formatting rules
- New function `UmyaSpreadsheet.ConditionalFormatting.get_data_bars/2-3` retrieves data bar conditional formatting rules
- New function `UmyaSpreadsheet.ConditionalFormatting.get_icon_sets/2-3` retrieves icon set conditional formatting rules
- New function `UmyaSpreadsheet.ConditionalFormatting.get_top_bottom_rules/2-3` retrieves top/bottom conditional formatting rules
- New function `UmyaSpreadsheet.ConditionalFormatting.get_above_below_average_rules/2-3` retrieves above/below average conditional formatting rules
- New function `UmyaSpreadsheet.ConditionalFormatting.get_text_rules/2-3` retrieves text conditional formatting rules
- **VML Drawing Getter Functions**:
- **Shape Property Retrieval** - Added comprehensive getter functions for VML shapes
- New function `UmyaSpreadsheet.VmlDrawing.get_shape_style/3` retrieves the CSS style string
- New function `UmyaSpreadsheet.VmlDrawing.get_shape_type/3` retrieves the shape type (rect, oval, etc.)
- New function `UmyaSpreadsheet.VmlDrawing.get_shape_filled/3` checks if a shape has fill enabled
- New function `UmyaSpreadsheet.VmlDrawing.get_shape_fill_color/3` gets the shape's fill color
- New function `UmyaSpreadsheet.VmlDrawing.get_shape_stroked/3` checks if a shape has stroke enabled
- New function `UmyaSpreadsheet.VmlDrawing.get_shape_stroke_color/3` gets the shape's stroke color
- New function `UmyaSpreadsheet.VmlDrawing.get_shape_stroke_weight/3` gets the shape's stroke weight
- **File Format Options Getters**:
- **Compression Level Information** - Added getter for default compression level
- New function `UmyaSpreadsheet.FileFormatOptions.get_compression_level/1` returns the default compression level
- **Encryption Status Check** - Added functions to check encryption settings
- New function `UmyaSpreadsheet.FileFormatOptions.is_encrypted/1` checks if a spreadsheet has encryption enabled
- New function `UmyaSpreadsheet.FileFormatOptions.get_encryption_algorithm/1` returns the encryption algorithm used
### Fixed
- **NIF Function Registration**:
- **Missing NIF Exports** - Added previously missing NIF function exports for file format options
- Properly registered file format option functions (`write_with_compression`, `write_with_encryption_options`, `to_binary_xlsx`)
- Fixed issue where these functions were implemented but not properly exposed
### Documentation
- **File Format Options Documentation**:
- Enhanced documentation for file format options with getter function examples
- Added information about checking encryption status and retrieving compression settings
### Technical Details
- **Architecture** - Properly aligned Elixir wrapper functions with underlying NIF implementations
- **Consistency** - Ensured all file format options have corresponding getter functions for inspection
## 0.6.15 - 2025-05-31
### Fixed
- **Formula Functions Module Fixes**:
- **Parameter Type Mismatches** - Fixed functions passing incorrect types to NIFs
- Modified 10 formula getter functions to properly extract references from Spreadsheet structs
- Resolved ArgumentError issues in `get_formula_type/3`, `get_shared_index/3`, `get_reference/3`, `get_bx/3`, `get_data_table_2d/3`, `get_data_table_row/3`, `get_input_1deleted/3`, `get_input_2deleted/3`, `get_r1/3`, and `get_r2/3`
- **Default Value Handling** - Improved null value handling for formula properties
- Implemented consistent conversion from default values to `nil`
- Fixed numeric properties to convert `0` to `nil` when appropriate
- Fixed boolean properties to convert `false` to `nil` when appropriate
- Fixed string properties to convert empty strings to `nil` when appropriate
- **Doctest Corrections** - Updated doctests to match actual function behavior
- Fixed `get_reference/3` doctest expectations to match true function behavior
### Documentation
- **Formula Function Guide Enhancements**:
- Added new section on working with formula properties
- Documented new consistent behavior for formula property default values
- Added examples for formula property getter functions
- Clarified return value expectations for different property types
### Technical Details
- **Type Handling** - Fixed all remaining functions that were incorrectly passing Spreadsheet structs to NIFs expecting references
- **Parameter Extraction** - Now correctly extracting `reference` field from Spreadsheet structs before passing to NIFs
- **Default Value Standardization** - Consistently treating default values as `nil` for better developer experience and API consistency
- **Test Coverage** - All 600 doctests and 409 regular tests now pass with the new fixes
## 0.6.14 - 2025-05-30
### Documentation
- **Error Handling Documentation Updates** - Fixed all documentation examples to match actual function return types and demonstrate proper error handling patterns
- **Return Type Clarification** - Added explicit notes about which functions return direct values vs. tuples, ensuring documentation accuracy
- **Function Signature Verification** - Updated all guide examples to reflect actual wrapper function behavior and NIF specifications
- **Auto Filter Documentation** - Fixed error handling examples for `has_auto_filter/2` and `get_auto_filter_range/2` functions
### Fixed
- **Documentation Consistency Updates**:
- **Error Handling Standardization** - Updated all documentation examples to match actual function return types
- Fixed workbook protection examples to use proper `{:ok, boolean()}` pattern matching instead of direct if statements
- Updated comment checking examples to handle `boolean() | {:error, atom()}` return types properly
- Corrected formula function examples to show proper error handling for `get_defined_names/1`
- Fixed sheet operations examples to show correct tuple destructuring for `get_active_sheet/1`
- Updated print settings examples to demonstrate proper error handling for getter functions
- **Return Type Documentation** - Clarified which functions return direct values vs. tuples
- Added explicit notes about `get_sheet_count/1` returning direct integer values
- Documented error handling patterns for functions that can fail vs. those that cannot
- Fixed inconsistent documentation showing wrong assignment patterns
- **Function Signature Verification** - Ensured all documented examples match actual wrapper function behavior
- Verified ErrorHandling.standardize_result() usage patterns across different modules
- Confirmed NIF function specifications align with wrapper implementations
- Updated examples to reflect actual return type standardization
### Technical Details
- **Documentation Accuracy** - All getter function examples now correctly demonstrate error handling patterns
- **Consistency Improvements** - Standardized error handling examples across all guide documents
- **User Experience** - Developers can now copy-paste documentation examples with confidence they will work correctly
## 0.6.13 - 2025-05-30
### Added
- **Print Settings Getter Functions**:
- **Page Setup Inspection** - Retrieve current print and page setup settings
- `UmyaSpreadsheet.get_page_orientation/2` - Get page orientation ("portrait" or "landscape", default: "portrait")
- `UmyaSpreadsheet.get_paper_size/2` - Get paper size code (default: 1 for Letter)
- `UmyaSpreadsheet.get_page_scale/2` - Get page scale percentage (default: 100)
- `UmyaSpreadsheet.get_fit_to_page/2` - Get fit-to-page settings as {width, height} tuple (default: {1, 1})
- **Margin Inspection** - Retrieve page and header/footer margin settings
- `UmyaSpreadsheet.get_page_margins/2` - Get page margins as {top, right, bottom, left} tuple in inches (default: {0.75, 0.7, 0.75, 0.7})
- `UmyaSpreadsheet.get_header_footer_margins/2` - Get header/footer margins as {header, footer} tuple in inches (default: {0.3, 0.3})
- **Header/Footer Content Inspection** - Retrieve header and footer text
- `UmyaSpreadsheet.get_header/2` - Get header text with formatting codes (default: empty string)
- `UmyaSpreadsheet.get_footer/2` - Get footer text with formatting codes (default: empty string)
- **Print Options Inspection** - Retrieve print centering and area settings
- `UmyaSpreadsheet.get_print_centered/2` - Get print centering as {horizontal, vertical} boolean tuple (default: {false, false})
- `UmyaSpreadsheet.get_print_area/2` - Get print area range or nil if not set (default: nil)
- `UmyaSpreadsheet.get_print_titles/2` - Get print titles as {rows, columns} tuple or nils if not set (default: {nil, nil})
- **Native Rust Implementation** - All getter functions implemented in native Rust for optimal performance
- **Error Handling** - Proper error handling for non-existent sheets with appropriate default value returns
- **Comprehensive Test Coverage** - Full unit test suite with 19 test cases covering all getter/setter functions, default values, and error scenarios
- **Documentation Updates** - Complete print settings guide with getter function examples and inspection patterns
### Technical Details
- **DefinedName API Integration** - Properly uses `get_address()` method for retrieving print area and print titles from Excel's defined names
- **Type Safety** - All primitive return values properly dereferenced in Rust NIFs using `*` operator for u32, f64, and bool types
- **String Formatting** - Header/footer text properly formatted using Rust's `format!("{:?}")` for consistent string representation
- **Default Value Consistency** - All getter functions return Excel-compatible default values when settings are not explicitly configured
## 0.6.12 - 2025-05-29
### Added
- **Row and Column Property Getter Functions**:
- **Row Dimension Inspection** - Retrieve row properties and settings
- `UmyaSpreadsheet.get_row_height/3` - Get row height in points (default: 15.0)
- `UmyaSpreadsheet.get_row_hidden/3` - Get row hidden state (default: false)
- **Column Dimension Inspection** - Retrieve column properties and settings
- `UmyaSpreadsheet.get_column_width/3` - Get column width in characters (default: 8.43)
- `UmyaSpreadsheet.get_column_auto_width/3` - Get auto-width enabled state (default: false)
- `UmyaSpreadsheet.get_column_hidden/3` - Get column hidden state (default: false)
- **Native Rust Implementation** - All getter functions implemented in native Rust for optimal performance
- **Error Handling** - Proper error handling for non-existent sheets with appropriate default value returns
- **Auto-width Persistence Fix** - Modified `set_column_auto_width` to set both `auto_width` and `best_fit` fields for Excel compatibility
- **Comprehensive Test Coverage** - Full unit test suite with 11 test cases covering all getter/setter functions and error scenarios
### Fixed
- **Auto-width Persistence Issue** - Fixed `get_column_auto_width` to return `best_fit` value since that's what actually persists in Excel files
- **Error Handling Standardization** - Unified error handling across all row/column NIFs to return simple error strings instead of nested error tuples
- **Option Handling in Rust NIFs** - Fixed proper handling of cases where row/column dimensions don't exist by returning appropriate default values
## 0.6.11 - 2025-05-29
### Added
- **Row and Column Property Getter Functions**:
- **Row Dimension Inspection** - Retrieve row properties and settings
- `UmyaSpreadsheet.get_row_height/3` - Get row height in points (default: 15.0)
- `UmyaSpreadsheet.get_row_hidden/3` - Get row hidden state (default: false)
- **Column Dimension Inspection** - Retrieve column properties and settings
- `UmyaSpreadsheet.get_column_width/3` - Get column width in characters (default: 8.43)
- `UmyaSpreadsheet.get_column_auto_width/3` - Get auto-width enabled state (default: false)
- `UmyaSpreadsheet.get_column_hidden/3` - Get column hidden state (default: false)
- **Native Rust Implementation** - All getter functions implemented in native Rust for optimal performance
- **Error Handling** - Proper error handling for non-existent sheets with appropriate default value returns
- **Auto-width Persistence Fix** - Modified `set_column_auto_width` to set both `auto_width` and `best_fit` fields for Excel compatibility
- **Comprehensive Test Coverage** - Full unit test suite with 11 test cases covering all getter/setter functions and error scenarios
- **Sheet Property Getter Functions**:
- **Sheet Metadata Inspection** - Comprehensive sheet information retrieval
- `UmyaSpreadsheet.SheetFunctions.get_sheet_count/1` - Get total number of sheets in spreadsheet
- `UmyaSpreadsheet.SheetFunctions.get_active_sheet/1` - Get currently active sheet tab index (0-based)
- `UmyaSpreadsheet.SheetFunctions.get_sheet_state/2` - Get sheet visibility state ("visible", "hidden", "veryhidden")
- `UmyaSpreadsheet.SheetFunctions.get_sheet_protection/2` - Get detailed sheet protection settings and status
- `UmyaSpreadsheet.SheetFunctions.get_merge_cells/2` - Get list of merged cell ranges in a sheet
- **Native Rust Implementation** - All getter functions implemented in native Rust for optimal performance
- **Error Handling** - Proper error handling for non-existent sheets and invalid operations
- **Comprehensive Test Coverage** - Full unit test suite with 8 test cases covering success and error scenarios
- **Sheet View Getter Functions**:
- **Sheet Display Settings** - Retrieve sheet view display settings
- `UmyaSpreadsheet.get_show_grid_lines/2` - Get whether gridlines are shown (true/false)
- `UmyaSpreadsheet.get_zoom_scale/2` - Get zoom level percentage (e.g., 100, 150, 75)
- `UmyaSpreadsheet.get_tab_color/2` - Get tab color in hex format (e.g., "#FF0000")
- `UmyaSpreadsheet.get_sheet_view/2` - Get view type ("normal", "page_layout", "page_break_preview")
- `UmyaSpreadsheet.get_selection/2` - Get active cell and selection range as map
- **Workbook View Getter Functions**:
- **Active Tab Retrieval** - Get the currently active worksheet in a workbook
- `UmyaSpreadsheet.get_active_tab/1` - Returns the 0-based index of the active tab
- **Window Position Retrieval** - Get the position and size of the Excel window
- `UmyaSpreadsheet.get_workbook_window_position/1` - Returns a map with :x, :y, :width, and :height of the workbook window
- **Workbook Protection Getter Functions**:
- **Protection Status** - Check if a workbook has protection settings enabled
- `UmyaSpreadsheet.is_workbook_protected/1` - Returns true if the workbook has protection enabled
- **Protection Details** - Get detailed information about workbook protection settings
- `UmyaSpreadsheet.get_workbook_protection_details/1` - Returns a map with detailed protection settings
- **Complete Cell Formatting Getter Functions**:
- **Font Property Inspection API** - Retrieve all font properties from spreadsheet cells
- `UmyaSpreadsheet.get_font_name/3` - Get font name/typeface (Arial, Times New Roman, etc.)
- `UmyaSpreadsheet.get_font_size/3` - Get font size in points
- `UmyaSpreadsheet.get_font_bold/3` - Get bold state (true/false)
- `UmyaSpreadsheet.get_font_italic/3` - Get italic state (true/false)
- `UmyaSpreadsheet.get_font_underline/3` - Get underline style (none, single, double, accounting)
- `UmyaSpreadsheet.get_font_strikethrough/3` - Get strikethrough state (true/false)
- `UmyaSpreadsheet.get_font_family/3` - Get font family type (roman, swiss, modern, script, decorative)
- `UmyaSpreadsheet.get_font_scheme/3` - Get font scheme (major, minor, none)
- `UmyaSpreadsheet.get_font_color/3` - Get font color (hex codes or theme references)
- **Cell Alignment Inspection** - Retrieve text alignment and formatting properties
- `UmyaSpreadsheet.get_cell_horizontal_alignment/3` - Get horizontal alignment (left, center, right, justify, etc.)
- `UmyaSpreadsheet.get_cell_vertical_alignment/3` - Get vertical alignment (top, middle, bottom, etc.)
- `UmyaSpreadsheet.get_cell_wrap_text/3` - Get text wrap state (true/false)
- `UmyaSpreadsheet.get_cell_text_rotation/3` - Get text rotation angle (0-359 degrees)
- **Border Property Inspection** - Retrieve border styles and colors for all positions
- `UmyaSpreadsheet.get_border_style/4` - Get border style (thin, medium, thick, dashed, dotted, double, none)
- `UmyaSpreadsheet.get_border_color/4` - Get border color (hex codes with default black FF000000)
- Support for all border positions: top, bottom, left, right, diagonal
- **Fill and Background Inspection** - Retrieve cell background and pattern properties
- `UmyaSpreadsheet.get_cell_background_color/3` - Get cell background color (hex codes)
- `UmyaSpreadsheet.get_cell_foreground_color/3` - Get pattern foreground color
- `UmyaSpreadsheet.get_cell_pattern_type/3` - Get fill pattern type (solid, none, etc.)
- **Number Format Inspection** - Retrieve number formatting information
- `UmyaSpreadsheet.get_cell_number_format_id/3` - Get number format ID reference
- `UmyaSpreadsheet.get_cell_format_code/3` - Get format code string (e.g., "#,##0.00")
- **Cell Protection Inspection** - Retrieve cell protection properties
- `UmyaSpreadsheet.get_cell_locked/3` - Get cell locked state (true/false)
- `UmyaSpreadsheet.get_cell_hidden/3` - Get cell hidden state (true/false)
- **Table Inspection API** - Comprehensive table property getters for Excel table analysis
- Table information retrieval (structure, range, columns)
- Table style properties (name, column/row highlights, banding)
- Table column definitions (names, IDs, totals functions)
- Totals row visibility status (true/false)
- **Background Functions Enhancement** - Added missing background property getters
- `UmyaSpreadsheet.get_cell_background_color/3` - Get cell background color (hex codes)
- `UmyaSpreadsheet.get_cell_foreground_color/3` - Get cell foreground/pattern color (hex codes)
- `UmyaSpreadsheet.get_cell_pattern_type/3` - Get cell fill pattern type (solid, gray125, etc.)
- **Comprehensive Test Coverage** - 100% test coverage with proper error handling validation
- **Consistent API Design** - All getter functions follow the same pattern and return appropriate default values
### Fixed
- Fixed border color getter to return default black color (FF000000) instead of empty string when no color is set
- Fixed foreground color getter to correctly return pattern background color, addressing Excel/OpenXML terminology confusion
- Fixed test expectations for border colors - corrected to expect default black color when no explicit colors are set
- Fixed Rust compilation errors in font getter functions caused by improper `Option<&Cell>` handling
- Fixed Color API method calls in `get_font_color` function (corrected `get_argb()` and `get_theme_index()` usage)
- Resolved all cell formatting getter function compilation issues in native Rust code
## 0.6.10 - 2025-05-29
### Added
- **Enhanced Font Management Features**:
- **Font Family Control** - Set font family types for text styling
- `UmyaSpreadsheet.set_font_family/4` - Apply font family numbering (roman, swiss, modern, script, decorative)
- **Font Scheme Support** - Control theme-aware font schemes
- `UmyaSpreadsheet.set_font_scheme/4` - Apply font schemes (major, minor, none)
- **Advanced Typography** - Comprehensive font styling capabilities
- Combine font family, scheme, and name for consistent typography
- **Complete Font Styling System** - Integrated font management with existing style properties
### Fixed
- Fixed issue where font family and font scheme properties weren't correctly applied to Excel files
## 0.6.9 - 2025-05-28
### Added
- **Complete Document Properties Support**:
- **Core Document Properties** - Standard metadata fields for Excel documents
- `UmyaSpreadsheet.DocumentProperties.set_title/2`, `get_title/1` - Document title management
- `UmyaSpreadsheet.DocumentProperties.set_description/2`, `get_description/1` - Document description
- `UmyaSpreadsheet.DocumentProperties.set_subject/2`, `get_subject/1` - Document subject
- `UmyaSpreadsheet.DocumentProperties.set_keywords/2`, `get_keywords/1` - Document keywords
- `UmyaSpreadsheet.DocumentProperties.set_category/2`, `get_category/1` - Document category
- `UmyaSpreadsheet.DocumentProperties.set_creator/2`, `get_creator/1` - Document creator
- `UmyaSpreadsheet.DocumentProperties.set_last_modified_by/2`, `get_last_modified_by/1` - Last editor
- `UmyaSpreadsheet.DocumentProperties.set_company/2`, `get_company/1` - Company information
- `UmyaSpreadsheet.DocumentProperties.set_manager/2`, `get_manager/1` - Manager information
- `UmyaSpreadsheet.DocumentProperties.set_created/2`, `get_created/1` - Creation date
- `UmyaSpreadsheet.DocumentProperties.set_modified/2`, `get_modified/1` - Last modification date
- **Custom Document Properties** - User-defined key-value pairs for application-specific metadata
- `UmyaSpreadsheet.DocumentProperties.set_custom_property_string/3` - Set string properties
- `UmyaSpreadsheet.DocumentProperties.set_custom_property_number/3` - Set numeric properties
- `UmyaSpreadsheet.DocumentProperties.set_custom_property_bool/3` - Set boolean properties
- `UmyaSpreadsheet.DocumentProperties.set_custom_property_date/3` - Set date properties
- `UmyaSpreadsheet.DocumentProperties.get_custom_property/2` - Retrieve typed properties
- `UmyaSpreadsheet.DocumentProperties.remove_custom_property/2` - Remove specific properties
- `UmyaSpreadsheet.DocumentProperties.clear_custom_properties/1` - Remove all custom properties
- **Property Management Utilities** - Metadata management and retrieval
- `UmyaSpreadsheet.DocumentProperties.set_properties/2` - Set multiple properties at once
- `UmyaSpreadsheet.DocumentProperties.get_all_properties/1` - Retrieve all core properties
- `UmyaSpreadsheet.DocumentProperties.get_custom_property_names/1` - List all custom property names
- `UmyaSpreadsheet.DocumentProperties.get_custom_properties_count/1` - Count custom properties
- `UmyaSpreadsheet.DocumentProperties.has_custom_property/2` - Check if property exists
- **Comprehensive Documentation** - Complete guide with examples and best practices
- Detailed guide for core and custom document properties
- Best practices for date handling, Unicode support, and large numbers
- Error handling patterns and troubleshooting guidance
- **VML Drawing Support**:
- **VmlDrawing Module** - Full support for Vector Markup Language elements in spreadsheets
- `UmyaSpreadsheet.VmlDrawing.create_shape/3` - Create VML shapes in worksheets
- `UmyaSpreadsheet.VmlDrawing.set_shape_type/4` - Set shape type (rect, oval, line, etc.)
- `UmyaSpreadsheet.VmlDrawing.set_shape_style/4` - Set CSS style for positioning and dimensions
- `UmyaSpreadsheet.VmlDrawing.set_shape_filled/4` - Control shape fill visibility
- `UmyaSpreadsheet.VmlDrawing.set_shape_fill_color/4` - Set shape fill color
- `UmyaSpreadsheet.VmlDrawing.set_shape_stroked/4` - Control shape outline visibility
- `UmyaSpreadsheet.VmlDrawing.set_shape_stroke_color/4` - Set outline color
- `UmyaSpreadsheet.VmlDrawing.set_shape_stroke_weight/4` - Set outline thickness
- **Legacy Drawing Compatibility** - Support for legacy Office drawing objects
- **Complex Drawing Object Management** - Creation and control of sophisticated drawing elements
### Fixed
- **Document Properties Module Fixes**:
- Fixed NIF loading error in UmyaNative module for document properties
- Fixed missing module declaration for VML support in lib.rs
- Fixed type conversion issues for floating-point and negative numeric properties
- Improved date handling with timezone-aware comparisons
- Enhanced error standardization for property not found cases
- Improved handling of very large numeric values and scientific notation
- Added comprehensive property value conversion for proper type support
## 0.6.8 - 2025-05-27
### Added
- **Complete Page Breaks Implementation**:
- **Row Page Break Management** - Full control over manual row page breaks for print layout
- `UmyaSpreadsheet.PageBreaks.add_row_page_break/4` - Add manual row breaks at specific rows
- `UmyaSpreadsheet.PageBreaks.remove_row_page_break/3` - Remove specific row breaks
- `UmyaSpreadsheet.PageBreaks.get_row_page_breaks/2` - Retrieve all row breaks for a worksheet
- `UmyaSpreadsheet.PageBreaks.clear_row_page_breaks/2` - Remove all row breaks from worksheet
- `UmyaSpreadsheet.PageBreaks.has_row_page_break/3` - Check if row break exists at specific row
- **Column Page Break Management** - Full control over manual column page breaks for print layout
- `UmyaSpreadsheet.PageBreaks.add_column_page_break/4` - Add manual column breaks at specific columns
- `UmyaSpreadsheet.PageBreaks.remove_column_page_break/3` - Remove specific column breaks
- `UmyaSpreadsheet.PageBreaks.get_column_page_breaks/2` - Retrieve all column breaks for a worksheet
- `UmyaSpreadsheet.PageBreaks.clear_column_page_breaks/2` - Remove all column breaks from worksheet
- `UmyaSpreadsheet.PageBreaks.has_column_page_break/3` - Check if column break exists at specific column
- **Bulk Operations & Convenience Functions** - Efficient batch operations for page break management
- `UmyaSpreadsheet.PageBreaks.add_row_page_breaks/3` - Add multiple row breaks in single operation
- `UmyaSpreadsheet.PageBreaks.add_column_page_breaks/3` - Add multiple column breaks in single operation
- `UmyaSpreadsheet.PageBreaks.remove_row_page_breaks/3` - Remove multiple row breaks efficiently
- `UmyaSpreadsheet.PageBreaks.remove_column_page_breaks/3` - Remove multiple column breaks efficiently
- `UmyaSpreadsheet.PageBreaks.clear_all_page_breaks/2` - Clear both row and column breaks
- `UmyaSpreadsheet.PageBreaks.get_all_page_breaks/2` - Get both row and column breaks as single result
- **Comprehensive Page Breaks Documentation**:
- **Complete Page Breaks Guide** - Comprehensive documentation for print layout control
- Guide covers manual page break insertion with row and column break management
- Detailed examples for basic operations, bulk operations, and advanced usage patterns
- Best practices for print layout design and performance optimization
- Real-world examples including reports, invoices, and multi-section documents
- Complete API reference with error handling patterns and troubleshooting guide
- **Complete OLE Objects Documentation**:
- **Comprehensive OLE Objects Guide** - Complete documentation for working with embedded objects in Excel
- Guide covers embedding Word documents (.docx), PowerPoint presentations (.pptx), PDF files (.pdf), and text files (.txt)
- Detailed examples for creating OLE object collections and managing embedded objects
- Documentation for all supported ProgIDs and file format detection
- Complete API reference with error handling patterns and best practices
- Advanced operations including property management and object extraction
- **Enhanced Documentation Structure** - Added OLE Objects guide to HexDocs navigation
- Integrated OLE Objects guide into the main documentation index and mix.exs configuration
- Fixed documentation reference warnings (UmyaNative, missing file links)
- Consistent formatting and style matching existing documentation guides
- Cross-references to related guides (limitations, troubleshooting)
- **Complete Rich Text Support**:
- **Core Rich Text Functionality** - Create and manipulate formatted text within Excel cells
- `UmyaSpreadsheet.RichText.create/0` - Create new empty rich text objects
- `UmyaSpreadsheet.RichText.create_from_html/1` - Parse HTML strings into rich text with formatting
- `UmyaSpreadsheet.RichText.to_html/1` - Generate HTML output from rich text objects
- `UmyaSpreadsheet.RichText.set_cell_rich_text/4` - Apply rich text formatting to specific cells
- `UmyaSpreadsheet.RichText.get_cell_rich_text/3` - Retrieve rich text objects from cells
- **Text Element Management** - Fine-grained control over formatted text segments
- `UmyaSpreadsheet.RichText.create_text_element/2` - Create individual text elements with custom formatting
- `UmyaSpreadsheet.RichText.add_text_element/2` - Add text elements to rich text objects
- `UmyaSpreadsheet.RichText.add_formatted_text/3` - Convenient method to add formatted text directly
- `UmyaSpreadsheet.RichText.get_elements/1` - Retrieve all text elements from rich text objects
- `UmyaSpreadsheet.RichText.get_element_text/1` - Extract text content from individual elements
- `UmyaSpreadsheet.RichText.get_element_font_properties/1` - Get font properties from text elements
- **Comprehensive Font Formatting** - Support for all Excel text formatting options
- **Bold, Italic, Underline, Strikethrough** - Standard text styling options
- **Font Size and Font Name** - Custom typography control
- **Text Color** - Support for hex colors and named colors
- **Mixed Formatting** - Multiple formatting styles within a single cell
- **Idiomatic Elixir API** - Uses atom keys (`:bold`, `:italic`) with automatic conversion to Rust string keys
- **Robust Implementation**:
- **Resource Management** - Proper Rust resource handling with automatic cleanup
- `RichTextResource` and `TextElementResource` for memory-safe operations
- Thread-safe resource management with Mutex protection
- Automatic resource cleanup when resources go out of scope
- **Error Handling** - Comprehensive error management throughout the rich text system
- Graceful handling of invalid HTML input with fallback to plain text
- Validation of font properties with appropriate error messages
- Safe resource access with proper error propagation
- **Performance Optimized** - Efficient implementation for large documents
- Zero-copy string handling where possible
- Efficient HTML parsing and generation
- Optimized font property serialization/deserialization
### Improved
- **Elixir Interface** - Enhanced user experience with idiomatic Elixir patterns
- **Atom Key Support** - Use idiomatic Elixir atom keys (`:bold`, `:italic`) instead of string keys
- **Automatic Key Conversion** - Seamless conversion between Elixir atoms and Rust strings
- **Consistent API** - Rich text functions follow established UmyaSpreadsheet patterns
- **Type Specifications** - Complete type specs for all rich text functions
- **Documentation** - Comprehensive documentation for rich text functionality
- **Rich Text Guide** - Created comprehensive 600+ line guide covering all rich text functionality
- Complete API documentation with function signatures and return values
- Quick start examples and step-by-step tutorials for common use cases
- Font properties documentation with practical examples for all formatting options
- Best practices for performance, color consistency, font selection, and HTML import
- Error handling patterns and comprehensive troubleshooting guide
- Four detailed real-world examples: Formatted Headers, Status Indicators, Multi-line Instructions, HTML Import
- **Rich Text Examples** - Added complete rich text examples to README.md
- Basic rich text creation and HTML import examples
- Mixed formatting demonstrations with multiple colors and styles
- Integration examples showing rich text with other UmyaSpreadsheet features
- **Function Documentation** - Detailed docstrings with examples for all rich text functions
- **Type Documentation** - Clear parameter and return value documentation
- **Updated Documentation Structure** - Enhanced guides.md with rich text guide reference
- Added rich text to "Styling and Formatting" section in documentation index
- Complete feature description with capabilities overview
### Fixed
- **Configuration Warning** - Resolved `Application.get_env/3` deprecation warning in module compilation
- Updated to use compile-time configuration where appropriate
- Maintained compatibility with standalone scripts and Mix.install scenarios
## 0.6.7 - 2025-05-26
### Added
- **Complete Excel Hyperlinks Functionality**:
- **Core Hyperlink Management** - Comprehensive hyperlink creation and management system
- `add_hyperlink/4-6` - Create hyperlinks with web URLs, email addresses, file paths, and internal references
- `get_hyperlink/3` - Retrieve hyperlink information from specific cells with complete metadata
- `get_hyperlinks/2` - Get all hyperlinks from worksheets for bulk operations
- `update_hyperlink/4-6` - Modify existing hyperlinks with new URLs, tooltips, and properties
- `remove_hyperlink/3` - Delete individual hyperlinks while preserving cell values
- `remove_all_hyperlinks/2` - Clear all hyperlinks from worksheets efficiently
- **Advanced Hyperlink Features** - Rich functionality for complex hyperlink scenarios
- `add_bulk_hyperlinks/3` - Add multiple hyperlinks efficiently with tuple or map formats
- `has_hyperlink/3` - Check if specific cells contain hyperlinks
- `has_hyperlinks/2` - Verify if worksheets contain any hyperlinks
- `count_hyperlinks/2` - Count total hyperlinks in worksheets for management
- Support for custom tooltips and descriptions for enhanced user experience
- Integration with cell values for seamless data presentation
- **Multiple Hyperlink Types** - Complete support for all Excel hyperlink formats
- **Web URLs** - HTTP/HTTPS links to external websites and web services
- **Email Addresses** - Mailto links with optional subject and body parameters
- **File Paths** - Local and network file references (Windows, macOS, Linux)
- **Internal References** - Links to other worksheets, cell ranges, and named ranges
- **Comprehensive Hyperlinks Documentation**:
- **Excel Hyperlinks Guide** - Complete 900+ line guide covering all hyperlink functionality
- Quick start examples and step-by-step tutorials for common use cases
- Complete API documentation with function signatures and return values
- Hyperlink types documentation with practical examples for each format
- Advanced features guide including bulk operations and worksheet-level management
- Best practices for URL validation, tooltips, organization, and error recovery
- Error handling patterns with comprehensive recovery strategies
- Performance considerations for bulk operations and memory management
- Three detailed real-world examples: Employee Directory, Financial Report Navigation, Project Documentation Hub
- **Updated Main Documentation** - Enhanced README.md and documentation structure
- Added hyperlinks to main features list with detailed capabilities
- Updated documentation index in guides.md with hyperlinks guide reference
- Enhanced mix.exs documentation structure for proper HexDocs integration
- **API Documentation** - Complete function documentation with examples and error handling
- Type specifications for all hyperlink functions with return value patterns
- Comprehensive parameter documentation with validation requirements
- Error scenarios documentation with descriptive error messages
### Improved
- **Documentation Structure** - Enhanced organization for better discoverability
- Added hyperlinks guide to "Advanced Features" section in documentation groups
- Updated guides index with comprehensive hyperlinks feature description
- Enhanced cross-references between hyperlinks and related functionality
## 0.6.6 - 2025-05-26
### Added
- **Complete Excel Tables Functionality**:
- **Core Table Management** - Comprehensive table creation and management system
- `add_table/8` - Create structured tables with headers, ranges, and totals row options
- `get_tables/2` - Retrieve all tables from worksheets with complete metadata
- `remove_table/3` - Delete tables by name with proper cleanup
- `has_tables?/2` - Check if worksheets contain tables
- `count_tables/2` - Count tables in worksheets for management operations
- **Advanced Table Styling** - Professional table appearance with built-in Excel styles
- `set_table_style/8` - Apply Excel's built-in table styles (Light, Medium, Dark themes)
- Style customization options: first/last column emphasis, banded rows/columns
- Support for 60+ built-in table styles (TableStyleLight1-21, TableStyleMedium1-28, TableStyleDark1-11)
- `remove_table_style/3` - Remove styling while preserving table structure
- **Dynamic Column Management** - Add and modify table columns programmatically
- `add_table_column/6` - Add new columns with totals row functions
- `modify_table_column/7` - Update existing column properties (name, totals function, labels)
- Support for all Excel totals functions: sum, average, count, countNums, max, min, stdDev, var
- **Totals Row Control** - Flexible totals row management
- `set_table_totals_row/4` - Enable/disable totals rows with automatic calculations
- Automatic function application based on column configurations
- Dynamic updates when columns are added or modified
- **Comprehensive Documentation Suite for Tables**:
- **Excel Tables Guide** - Complete 400+ line guide covering all table functionality
- Step-by-step table creation and management examples
- Complete styling guide with all available table styles and options
- Column management patterns and best practices
- Real-world examples: Employee Management System, Sales Reports with multiple tables
- Error handling patterns and recovery strategies
- Performance considerations and optimization tips
- **Updated Main Documentation** - Enhanced README.md with table examples
- Added table functionality to feature list with detailed capabilities
- Complete table workflow example with styling and column management
- Updated documentation links to include Excel Tables guide
- **API Documentation** - Comprehensive function documentation with examples
- Type specifications for all table functions with tuple return patterns
- Complete parameter documentation with validation rules
- Error scenarios and return value documentation
- **Robust Error Handling & Validation**:
- **Consistent Return Format** - All table functions return `{:ok, value}` or `{:error, reason}` tuples
- **Comprehensive Validation** - Sheet existence, table name uniqueness, range validation
- **Descriptive Error Messages** - Clear error reasons for debugging and user feedback
- **Edge Case Handling** - Non-existent sheets, duplicate table names, invalid ranges
- **Complete Test Coverage**:
- **Unit Tests** - 15 comprehensive tests covering all table functionality
- **Integration Tests** - Complete workflow tests from creation to deletion
- **Error Case Testing** - Validation of all error scenarios and edge cases
- **Tuple Return Validation** - Ensures consistent API patterns across all functions
### Technical Implementation
- **Native Rust Integration** - High-performance table operations via NIF
- Created comprehensive table.rs module with proper error handling
- Memory-safe operations with proper Rust borrowing patterns
- Type-safe conversions between Rust and Elixir data structures
- Integration with existing umya-spreadsheet table infrastructure
- **Elixir Wrapper Module** - Clean, idiomatic Elixir API
- Complete UmyaSpreadsheet.Table module with full documentation
- Proper delegation patterns and error handling
- Type specifications for all public functions
- Integration with main UmyaSpreadsheet module
- **Module Registration** - Proper NIF function exports and library integration
- Updated lib.rs with table module inclusion and function exports
- Added table function declarations to UmyaNative module
- Main module integration with aliases and delegations
### Quality Assurance
- **Zero Compilation Warnings** - Clean codebase with no warnings or errors
- **100% Test Pass Rate** - All 15 table tests passing successfully
- **Memory Safety** - Proper resource management and cleanup
- **API Consistency** - Follows established patterns from other modules
## 0.6.5 - 2025-05-25
### Added
- **Comprehensive Documentation Suite**:
- **Enhanced Main Module Documentation** - Updated `UmyaSpreadsheet` module with comprehensive architecture overview
- Added ASCII diagram showing core architecture and specialized function modules
- Documented data flow (NIF Layer → Spreadsheet Reference → Function Modules → Error Handling → Memory Management)
- Added thread safety and performance characteristics documentation
- Included compatibility matrix for Excel versions, Elixir/OTP versions, and platforms
- Added quick start guide with code examples and error handling patterns
- **Troubleshooting Guide** - Created comprehensive `TROUBLESHOOTING.md` covering:
- Installation issues (NIF compilation, precompiled binaries, platform-specific problems)
- Runtime errors (spreadsheet reference errors, sheet not found, invalid cell references)
- Performance issues (slow file operations, memory usage growth)
- File format issues (corrupted files, encoding problems)
- Memory issues (out of memory errors, optimization strategies)
- Concurrency issues (race conditions, coordination patterns)
- Platform-specific solutions for macOS, Linux, and Windows
- Best practices for error handling, resource management, and performance optimization
- **Limitations and Compatibility Guide** - Created comprehensive `LIMITATIONS.md` covering:
- File format support matrix (.xlsx ✅, .xlsm ✅, .xls ❌, etc.)
- Excel feature support levels (basic operations, formatting, advanced features)
- Platform compatibility matrix (Linux, macOS, Windows with architecture support)
- Version compatibility (Elixir/OTP, Excel versions, LibreOffice compatibility)
- Performance limitations with memory usage guidelines and benchmarks
- Known issues with workarounds and roadmap information
- **Sheet Management Functions**:
- `rename_sheet` - Renames an existing worksheet with comprehensive validation
- Validates sheet existence and name conflicts
- Prevents renaming to empty or whitespace-only names
- Returns appropriate error messages for invalid operations
- Full test coverage with 6 test scenarios
- **Advanced Conditional Formatting - Icon Sets**:
- `add_icon_set` - Adds icon set conditional formatting rules to cell ranges
- Supports multiple icon styles: "3_traffic_lights", "5_arrows", "4_red_to_black", etc.
- Flexible threshold configuration (2-5 thresholds per icon set)
- Multiple threshold types: "min", "max", "number", "percent", "percentile", "formula"
- Comprehensive validation for threshold count and types
- Enhanced error handling for invalid inputs and nonexistent sheets
- **Advanced Conditional Formatting - Above/Below Average Rules**:
- `add_above_below_average_rule` - Adds statistical conditional formatting rules
- Rule types: "above", "below", "above_equal", "below_equal"
- Optional standard deviation parameter for advanced statistical rules
- Customizable format styles for conditional highlighting
- Support for colors, fonts, and other formatting options
- **Enhanced Test Coverage**:
- Added 17 comprehensive tests for new conditional formatting features
- Integration tests demonstrating combined usage of new features
- Error case testing for invalid inputs and edge scenarios
- Test file generation for visual verification of formatting rules
### Fixed
- **Function Call Consistency**: Updated test files to use correct API function names
- Changed `UmyaSpreadsheet.new_file()` to `UmyaSpreadsheet.new()`
- Changed `UmyaSpreadsheet.write_file()` to `UmyaSpreadsheet.write()`
- **Return Value Handling**: Fixed case clause errors in conditional formatting functions
- Properly handle `{:ok, :ok}` return patterns from native functions
- Added comprehensive pattern matching for all possible return values
- Consistent error handling across all conditional formatting functions
### Improved
- **Native Function Integration**: Enhanced NIF registration and error handling
- **Documentation**: Added comprehensive documentation with examples for all new functions
- **API Consistency**: New functions follow existing patterns and conventions
- **Error Messages**: Improved error reporting with descriptive messages for debugging
## 0.6.4 - 2025-05-24
### Fixed
- **GitHub Actions workflows**: Fixed critical issues in CI/CD pipeline
- Updated project paths from incorrect "example" to correct "umya_native"
- Upgraded to modern action versions (actions/checkout@v4, actions/upload-artifact@v4)
- Fixed cross-compilation setup with proper musl target handling
- Added RUSTLER_NIF_VERSION environment variable passthrough for consistent builds
- **Cross-compilation configuration**: Created comprehensive Cross.toml setup
- Added target-specific Docker images for reliable cross-platform builds
- Configured environment variable passthrough for NIF compilation
- Added support for all major platforms (Linux, macOS, Windows)
- **Rust build system improvements**:
- Created build.rs script with platform-specific link arguments
- Added musl target detection and handling
- Fixed umya-spreadsheet dependency from incorrect path to proper crates.io version "2.3.0"
- Enhanced error handling in compilation process
- **Formula functions**: Fixed test failures in defined name functionality
- Resolved private method access issues with DefinedName.set_name()
- Updated to use worksheet.add_defined_name() for proper name creation
- Improved error handling and validation in formula operations
- **CI environment enhancements**:
- Added UMYA_SPREADSHEET_BUILD=true environment variable
- Improved Rust toolchain setup and system dependencies
- Enhanced build reliability across different platforms
### Improved
- Enhanced build reliability and cross-platform compatibility
- Streamlined release process with proper artifact generation
- Better error reporting in CI/CD pipeline
- Improved documentation for build and release processes
## 0.6.3 - 2025-05-24
### Added
- Advanced formula functionality:
- `set_formula` - Sets a regular formula in a cell
- `set_array_formula` - Sets an array formula for a range of cells
- `create_named_range` - Creates a named range reference
- `create_defined_name` - Creates a defined name with an associated formula
- `get_defined_names` - Retrieves all defined names in the workbook
- Auto Filter functionality:
- `set_auto_filter` - Adds filter dropdown buttons to a range of cells
- `remove_auto_filter` - Removes an auto filter from a worksheet
- `has_auto_filter` - Checks if a worksheet has an auto filter
- `get_auto_filter_range` - Gets the range of an existing auto filter
- Enhanced file format options:
- `write_with_compression` - Controls the compression level (0-9) for XLSX files
- `write_with_encryption_options` - Enhanced encryption with algorithm selection and security parameters
- `to_binary_xlsx` - Converts a spreadsheet to binary for web responses or in-memory processing
- Added test coverage for formula, auto filter, and file format functionality:
- Tests for regular and array formulas
- Tests for named ranges and defined names
- Tests for creating, removing, and querying auto filters
- Tests for auto filter persistence between save and load operations
- Tests for file compression and binary conversion
## 0.6.2 - 2025-05-23
### Added
- Window settings for workbooks and sheets:
- Added `set_selection` for setting active cell and selection range in worksheets
- Added `set_active_tab` to control which tab is active when opening the workbook
- Added `set_workbook_window_position` to set Excel application window position and size
- Added new test files:
- Added tests for sheet selection functionality
- Created comprehensive tests for workbook view settings
- Updated existing tests to ensure compatibility with new window features
- Added comment management functionality:
- `add_comment` - Adds a comment to a cell with text and author
- `get_comment` - Retrieves comment text and author from a cell
- `update_comment` - Updates an existing comment with new text and optionally a new author
- `remove_comment` - Removes a comment from a cell
- `has_comments` - Checks if a worksheet contains any comments
- `get_comments_count` - Returns the number of comments in a worksheet
### Fixed
- Fixed incorrect function name in tests (changed `create_sheet` to `add_sheet`)
- Fixed Rust API usage for accessing workbook view in spreadsheet structure
## 0.6.1 - 2025-05-23
### Added
- Sheet-level features that have been implemented:
- Tab colors (`set_tab_color`)
- Sheet views (normal, page layout, page break preview) (`set_sheet_view`)
- Zoom settings (`set_zoom_scale`, `set_zoom_scale_normal`, `set_zoom_scale_page_layout`, `set_zoom_scale_page_break`)
- Freeze panes (`freeze_panes`)
- Split panes (`split_panes`)
### Fixed
- Release builds
## 0.5.6 - 2025-05-21
### Added
- Advanced cell formatting features:
- Added `set_font_italic` for italic text formatting
- Added `set_font_underline` with support for various underline styles (single, double, accounting)
- Added `set_font_strikethrough` for strikethrough text
- Enhanced borders with `set_border_style` supporting various styles (dotted, dashed, double)
- Added `set_cell_rotation` for text rotation within cells
- Added `set_cell_indent` for text indentation
- Comprehensive documentation and examples for all new formatting features
- Test suite covering all advanced formatting options
## 0.5.5 - 2025-05-20
### Added
- Concurrent operation capabilities:
- Added comprehensive test suite for concurrent spreadsheet operations
- Documented thread safety guidelines and best practices
- Verified support for multi-threaded access to independent spreadsheets
### Fixed
- Fixed compilation errors in drawing_functions.rs:
- Consolidated duplicate imports for drawing structs
- Fixed type specifications in drawing function implementations
- Improved error handling and return values
### Improved
- Enhanced documentation structure:
- Created dedicated thread safety guide for concurrent operations
- Enhanced shapes and drawing documentation with thread safety guidelines
- Added examples for concurrent operation patterns
- Added tests for concurrent shape creation and manipulation
## 0.5.3 - 2025-05-20
### Added
- Drawing and shape functionality:
- `add_shape` - Add various shapes (rectangles, ellipses, triangles, etc.) to worksheets
- `add_text_box` - Create text boxes with customizable text, background, and border
- `add_connector` - Draw connector lines between cells
- Comprehensive shape documentation:
- Added detailed guide for shapes and drawing
- Example code for diagrams and flowcharts
- Support for multiple shape types and color specifications
### Improved
- Updated README with drawing and shape examples
- Added shapes and drawing guide to documentation
- Fixed compatibility issues with umya-spreadsheet 2.3.0
- Added test script for drawing functionality
## 0.5.2 - 2025-05-20
### Added
- Pivot table functionality:
- `add_pivot_table` - Create pivot tables with customizable row, column, and data fields
- `has_pivot_tables?` - Check if a sheet contains pivot tables
- `count_pivot_tables` - Count the number of pivot tables on a sheet
- `refresh_all_pivot_tables` - Update pivot table data
- `remove_pivot_table` - Remove a specific pivot table
- Comprehensive pivot table documentation:
- Added detailed guide for pivot table usage
- Example code for common pivot table operations
- Full API documentation with typespecs
### Improved
- Updated README with pivot table examples
- Added pivot table guide to documentation navigation
- Implemented tests for all pivot table functionality
- Exposed more functionality from the underlying Rust library
## 0.5.1 - 2025-05-20
### Added
- Data validation functionality:
- `add_list_validation` - Create dropdown lists in cells
- `add_number_validation` - Apply number range constraints
- `add_date_validation` - Apply date constraints
- `add_text_length_validation` - Restrict text by character count
- `add_custom_validation` - Apply custom formula-based validation
- `remove_data_validation` - Remove validation from cells
### Fixed
- Fixed compatibility issues with camelCase and snake_case operator strings in data validation functions
- Updated tests to properly handle the `{:ok, value}` return type from `get_cell_value`
- Fixed deprecated Rustler initialization in lib.rs by removing explicit function listing
- Improved error handling in data validation functions
## 0.5.0 - 2025-05-19
### Added
- Comprehensive documentation for chart types:
- Added detailed chart types documentation to `add_chart` and `add_chart_with_options` functions
- Added a "Supported Chart Types" section to `DEVELOPMENT.md` with all 13 chart types
- Complete reference for all available chart types (`LineChart`, `PieChart`, `BarChart`, etc.)
- Conditional formatting capabilities with several rule types:
- Cell value rules (greater than, less than, equal to, between, etc.)
- Top and bottom ranking rules (top N, bottom N%, etc.)
- Data bars (visual representation of values)
- Color scales (color gradients based on values)
- Text-based rules (contains, begins with, ends with, etc.)
- Enhanced documentation structure:
- Added dedicated guide documents in the `docs` folder
- Created a guides index for better navigation
- Integrated guides into ExDocs for improved documentation experience
- Organized guides by topic:
- Charts guide
- CSV export and performance guide
- Image handling guide
- Sheet operations guide
- Styling and formatting guide
### Fixed
- Rust code improvements:
- Fixed deprecated rustler initialization format in `lib.rs`
- Fixed multiple unused variables in `chart_functions.rs` by prefixing them with underscore
- Cleaned up Rust warnings for better maintainability
### Improved
- Documentation quality and accessibility:
- References to guides from `README.md` for better discoverability
- Updated main module documentation with links to guides
- Organized documentation groups in `mix.exs` for improved navigation
- Enhanced in-code documentation for all chart-related functions
## 0.4.0 - 2025-05-18
### Added
- CSV export functionality:
- `write_csv/3` - Export specific sheets to CSV format
- Light writer functions for better memory usage:
- `write_light/2` - Write files with less memory overhead
- `write_with_password_light/3` - Password protection with memory efficiency
- New empty spreadsheet creation:
- `new_empty/0` - Create spreadsheets without default worksheets
- Image handling:
- `add_image/4`
- `download_image/4`
- `change_image/4`
- Sheet operations:
- `clone_sheet/3`
- `remove_sheet/2`
- `set_sheet_state/3`
- `set_sheet_protection/4`
- Row and column operations:
- `insert_new_row/4`
- `insert_new_column/4`
- `insert_new_column_by_index/4`
- `remove_row/4`
- `remove_column/4`
- `remove_column_by_index/4`
- `copy_row_styling/6`
- `copy_column_styling/6`
- Chart support:
- `add_chart/9` with multiple chart types
- Cell formatting:
- `get_formatted_value/3`
- `set_number_format/4`
- `set_font_name/4`
- `set_wrap_text/4`
- Sheet appearance:
- `set_show_grid_lines/3`
- `add_merge_cells/3`
- Column dimensions:
- `set_column_width/4`
- `set_column_auto_width/4`
- Workbook protection:
- `set_workbook_protection/2`
- Enhanced documentation:
- New guide for styling and formatting
- New guide for sheet operations
- New guide for chart support
- New guide for image handling
- Additional test files for new features
### Improved
- Updated README with comprehensive feature list
- Added examples showcasing new functionality
- Enhanced test coverage for all new features
## 0.3.0 - 2025-05-17
### Breaking Changes
- Updated umya-spreadsheet Rust dependency to v2.3.0 from crates.io
- Updated Rustler to v0.36.1
- Changed some API functions to handle new return types (may affect pattern matching)
### Added
- Font styling functions:
- `set_font_color/4`
- `set_font_size/4`
- `set_font_bold/4`
- Password-protected file creation with `write_with_password/3`
- Better examples in documentation
- Comprehensive test suite with proper ExUnit test files
- Added test files for styling and password protection features
- Added integration tests ported from the Rust library's test suite
### Fixed
- Compatibility with Rustler 0.36.1 by handling `{:ok, val}` tuples properly
- Color handling in `set_background_color` and `set_font_color`
- Font size handling with proper float conversion
### Improved
- Converted demo scripts into proper test files
- Added .gitignore entries for test output files
- Enhanced documentation with testing information
- Imported test files from the Rust library for comprehensive testing
## 0.2.0 - Initial Release
- Basic Excel file operations (create, read, write)
- Cell manipulation
- Basic styling with background colors
- Sheet operations