Class: Xlsxrb::WorkbookBuilder
- Inherits:
-
Object
- Object
- Xlsxrb::WorkbookBuilder
- Defined in:
- lib/xlsxrb.rb
Overview
DSL context for Xlsxrb.build.
Instance Method Summary collapse
-
#add_custom_property(name, value, type: :string) ⇒ Object
Add a custom document property.
-
#add_defined_name(name, value, sheet: nil, hidden: false) ⇒ Object
Add a defined name.
-
#add_sheet(name = nil, &block) ⇒ Object
Add a new sheet.
- #build ⇒ Object
-
#initialize ⇒ WorkbookBuilder
constructor
A new instance of WorkbookBuilder.
-
#set_app_property(name, value) ⇒ Object
Set an app document property.
-
#set_core_property(name, value) ⇒ Object
Set a core document property.
-
#set_print_area(range, sheet: nil) ⇒ Object
Set the print area for a sheet.
-
#set_print_titles(rows: nil, cols: nil, sheet: nil) ⇒ Object
Set print titles for a sheet.
-
#set_workbook_protection(**opts) ⇒ Object
Set workbook protection.
Constructor Details
#initialize ⇒ WorkbookBuilder
Returns a new instance of WorkbookBuilder.
253 254 255 256 257 258 259 260 261 |
# File 'lib/xlsxrb.rb', line 253 def initialize @sheets = [] @sheet_builders = [] # Keep track of sheet builders for style processing @defined_names = [] @core_properties = {} @app_properties = {} @custom_properties = [] @workbook_protection = nil end |
Instance Method Details
#add_custom_property(name, value, type: :string) ⇒ Object
Add a custom document property.
316 317 318 |
# File 'lib/xlsxrb.rb', line 316 def add_custom_property(name, value, type: :string) @custom_properties << { name: name, value: value, type: type } end |
#add_defined_name(name, value, sheet: nil, hidden: false) ⇒ Object
Add a defined name.
275 276 277 278 279 |
# File 'lib/xlsxrb.rb', line 275 def add_defined_name(name, value, sheet: nil, hidden: false) entry = { name: name, value: value, hidden: hidden } entry[:local_sheet_name] = sheet if sheet @defined_names << entry end |
#add_sheet(name = nil, &block) ⇒ Object
Add a new sheet.
264 265 266 267 268 269 270 |
# File 'lib/xlsxrb.rb', line 264 def add_sheet(name = nil, &block) name ||= "Sheet#{@sheets.size + 1}" sheet_builder = WorksheetBuilder.new(name) block.call(sheet_builder) if block_given? @sheet_builders << sheet_builder @sheets << sheet_builder.build end |
#build ⇒ Object
320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 |
# File 'lib/xlsxrb.rb', line 320 def build # Process styles from all sheets and collect style definitions processed_sheets, styles_definition = process_styles(@sheets) # Store workbook-level metadata in unmapped_data = {} [:defined_names] = resolve_defined_names(@defined_names, processed_sheets) unless @defined_names.empty? [:core_properties] = @core_properties unless @core_properties.empty? [:app_properties] = @app_properties unless @app_properties.empty? [:custom_properties] = @custom_properties unless @custom_properties.empty? [:workbook_protection] = @workbook_protection if @workbook_protection Elements::Workbook.new( sheets: processed_sheets, styles: styles_definition, unmapped_data: .empty? ? {} : { facade: } ) end |
#set_app_property(name, value) ⇒ Object
Set an app document property.
311 312 313 |
# File 'lib/xlsxrb.rb', line 311 def set_app_property(name, value) @app_properties[name] = value end |
#set_core_property(name, value) ⇒ Object
Set a core document property.
306 307 308 |
# File 'lib/xlsxrb.rb', line 306 def set_core_property(name, value) @core_properties[name] = value end |
#set_print_area(range, sheet: nil) ⇒ Object
Set the print area for a sheet.
282 283 284 285 286 287 |
# File 'lib/xlsxrb.rb', line 282 def set_print_area(range, sheet: nil) sheet_name = sheet || @sheets.last&.name || "Sheet1" value = "'#{sheet_name}'!#{absolute_range(range)}" @defined_names.reject! { |dn| dn[:name] == "_xlnm.Print_Area" && dn[:local_sheet_name] == sheet_name } add_defined_name("_xlnm.Print_Area", value, sheet: sheet_name) end |
#set_print_titles(rows: nil, cols: nil, sheet: nil) ⇒ Object
Set print titles for a sheet.
290 291 292 293 294 295 296 297 298 |
# File 'lib/xlsxrb.rb', line 290 def set_print_titles(rows: nil, cols: nil, sheet: nil) sheet_name = sheet || @sheets.last&.name || "Sheet1" parts = [] parts << "'#{sheet_name}'!$#{cols.sub(":", ":$")}" if cols parts << "'#{sheet_name}'!$#{rows.sub(":", ":$")}" if rows value = parts.join(",") @defined_names.reject! { |dn| dn[:name] == "_xlnm.Print_Titles" && dn[:local_sheet_name] == sheet_name } add_defined_name("_xlnm.Print_Titles", value, sheet: sheet_name) end |
#set_workbook_protection(**opts) ⇒ Object
Set workbook protection.
301 302 303 |
# File 'lib/xlsxrb.rb', line 301 def set_workbook_protection(**opts) @workbook_protection = opts end |