xlsxrb 0.1.13 → 0.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +104 -0
  3. data/README.md +17 -14
  4. data/lib/xlsxrb/colors.rb +118 -0
  5. data/lib/xlsxrb/elements/cell.rb +205 -16
  6. data/lib/xlsxrb/elements/column.rb +6 -4
  7. data/lib/xlsxrb/elements/coordinate_access.rb +32 -0
  8. data/lib/xlsxrb/elements/image.rb +128 -0
  9. data/lib/xlsxrb/elements/row.rb +206 -9
  10. data/lib/xlsxrb/elements/styles.rb +157 -0
  11. data/lib/xlsxrb/elements/types.rb +95 -1
  12. data/lib/xlsxrb/elements/workbook.rb +121 -4
  13. data/lib/xlsxrb/elements/worksheet.rb +519 -29
  14. data/lib/xlsxrb/elements.rb +2 -0
  15. data/lib/xlsxrb/number_formatter.rb +429 -0
  16. data/lib/xlsxrb/ooxml/cfb.rb +1 -1
  17. data/lib/xlsxrb/ooxml/reader/listeners/core_listeners.rb +7 -5
  18. data/lib/xlsxrb/ooxml/reader/listeners/drawing_listeners.rb +11 -4
  19. data/lib/xlsxrb/ooxml/reader/listeners/feature_listeners.rb +7 -1
  20. data/lib/xlsxrb/ooxml/reader.rb +14 -17
  21. data/lib/xlsxrb/ooxml/shared_strings_parser.rb +7 -1
  22. data/lib/xlsxrb/ooxml/styles_parser.rb +39 -9
  23. data/lib/xlsxrb/ooxml/utils.rb +34 -18
  24. data/lib/xlsxrb/ooxml/workbook_parser.rb +74 -16
  25. data/lib/xlsxrb/ooxml/workbook_writer.rb +82 -23
  26. data/lib/xlsxrb/ooxml/worksheet_parser.rb +319 -79
  27. data/lib/xlsxrb/ooxml/worksheet_writer.rb +263 -66
  28. data/lib/xlsxrb/ooxml/writer/features_xml.rb +5 -3
  29. data/lib/xlsxrb/ooxml/writer.rb +14 -0
  30. data/lib/xlsxrb/ooxml/xml_builder.rb +14 -2
  31. data/lib/xlsxrb/ooxml/zip_reader.rb +144 -28
  32. data/lib/xlsxrb/stream_row.rb +243 -16
  33. data/lib/xlsxrb/stream_sheet.rb +647 -16
  34. data/lib/xlsxrb/stream_writer.rb +375 -34
  35. data/lib/xlsxrb/style_builder.rb +308 -22
  36. data/lib/xlsxrb/utils.rb +211 -0
  37. data/lib/xlsxrb/version.rb +1 -1
  38. data/lib/xlsxrb/workbook_builder.rb +72 -11
  39. data/lib/xlsxrb/worksheet_builder.rb +738 -24
  40. data/lib/xlsxrb.rb +1073 -83
  41. data/sig/generated/xlsxrb/colors.rbs +40 -0
  42. data/sig/generated/xlsxrb/elements/cell.rbs +113 -8
  43. data/sig/generated/xlsxrb/elements/column.rbs +3 -2
  44. data/sig/generated/xlsxrb/elements/coordinate_access.rbs +18 -0
  45. data/sig/generated/xlsxrb/elements/image.rbs +82 -0
  46. data/sig/generated/xlsxrb/elements/row.rbs +83 -4
  47. data/sig/generated/xlsxrb/elements/styles.rbs +79 -0
  48. data/sig/generated/xlsxrb/elements/types.rbs +43 -0
  49. data/sig/generated/xlsxrb/elements/workbook.rbs +79 -2
  50. data/sig/generated/xlsxrb/elements/worksheet.rbs +282 -18
  51. data/sig/generated/xlsxrb/number_formatter.rbs +132 -0
  52. data/sig/generated/xlsxrb/ooxml/reader.rbs +6 -0
  53. data/sig/generated/xlsxrb/ooxml/shared_strings_parser.rbs +2 -0
  54. data/sig/generated/xlsxrb/ooxml/styles_parser.rbs +5 -2
  55. data/sig/generated/xlsxrb/ooxml/utils.rbs +17 -8
  56. data/sig/generated/xlsxrb/ooxml/workbook_parser.rbs +9 -3
  57. data/sig/generated/xlsxrb/ooxml/workbook_writer.rbs +1 -1
  58. data/sig/generated/xlsxrb/ooxml/worksheet_parser.rbs +28 -6
  59. data/sig/generated/xlsxrb/ooxml/worksheet_writer.rbs +13 -3
  60. data/sig/generated/xlsxrb/ooxml/writer.rbs +2 -0
  61. data/sig/generated/xlsxrb/ooxml/xml_builder.rbs +3 -1
  62. data/sig/generated/xlsxrb/ooxml/zip_reader.rbs +13 -0
  63. data/sig/generated/xlsxrb/stream_row.rbs +100 -6
  64. data/sig/generated/xlsxrb/stream_sheet.rbs +358 -14
  65. data/sig/generated/xlsxrb/stream_writer.rbs +220 -30
  66. data/sig/generated/xlsxrb/style_builder.rbs +55 -18
  67. data/sig/generated/xlsxrb/utils.rbs +151 -0
  68. data/sig/generated/xlsxrb/workbook_builder.rbs +26 -0
  69. data/sig/generated/xlsxrb/worksheet_builder.rbs +356 -18
  70. data/sig/generated/xlsxrb.rbs +223 -27
  71. metadata +11 -1
@@ -29,6 +29,8 @@ module Xlsxrb
29
29
  class ParseError < Error
30
30
  end
31
31
 
32
+ OMITTED_TARGET: untyped
33
+
32
34
  # Raised when cell, row, or workbook parameters fail specification validation.
33
35
  class ValidationError < Error
34
36
  end
@@ -51,19 +53,25 @@ module Xlsxrb
51
53
 
52
54
  # Helper to construct {Elements::RichText} objects with formatted text runs.
53
55
  #
54
- # @example Create multi-run rich text
56
+ # @example Create multi-run rich text with hashes
55
57
  # rt = Xlsxrb.rich_text({ text: "Total: ", font: { bold: true } }, { text: "$100" })
56
58
  #
59
+ # @example Create rich text with text/font pairs
60
+ # rt = Xlsxrb.rich_text("Normal text, ", ["bold text, ", { bold: true }], ["red text", { color: "FF0000" }])
61
+ #
62
+ # @example Create rich text with format objects implementing to_font_hash
63
+ # rt = Xlsxrb.rich_text("Normal text, ", bold_format, "bold text")
64
+ #
57
65
  # @example Create simple styled text
58
66
  # rt = Xlsxrb.rich_text(text: "Important Notice", bold: true, color: "FF0000")
59
67
  #
60
- # @param runs [Array<Hash, String>] Optional array of rich text run hashes or string.
68
+ # @param runs [Array<Hash, String, Array, Elements::RichTextRun, Object>] Optional array of rich text run items.
61
69
  # @param text [String, nil] Plain text string (convenience parameter).
62
70
  # @param font_props [Hash] Inline font styling options (e.g. bold: true, color: "FF0000").
63
71
  # @return [Elements::RichText] The compiled rich text element.
64
72
  # @api public
65
- # : (*(Hash[Symbol, untyped] | String) runs, ?text: String?, **untyped font_props) -> Elements::RichText
66
- def self.rich_text: (*Hash[Symbol, untyped] | String runs, ?text: String?, **untyped font_props) -> Elements::RichText
73
+ # : (*(Hash[Symbol, untyped] | Elements::RichTextRun | String | Array[untyped] | untyped) runs, ?text: String?, **untyped font_props) -> Elements::RichText
74
+ def self.rich_text: (*Hash[Symbol, untyped] | Elements::RichTextRun | String | Array[untyped] | untyped runs, ?text: String?, **untyped font_props) -> Elements::RichText
67
75
 
68
76
  # Creates an {Elements::Formula} object for use in cell values.
69
77
  #
@@ -75,10 +83,160 @@ module Xlsxrb
75
83
  #
76
84
  # @param expression [String] The formula expression without leading '=' (e.g. "SUM(A1:A10)").
77
85
  # @param cached_value [Object, nil] Optional precomputed value for readers that do not evaluate formulas.
86
+ # @param type [Symbol, String, nil] Formula type (:shared, :array, etc.).
87
+ # @param ref [String, nil] Target cell or range reference (e.g. "A1:C1").
88
+ # @return [Elements::Formula]
89
+ # @api public
90
+ # : (String expression, ?cached_value: (String | Numeric | bool | nil), ?type: (Symbol | String)?, ?ref: String?) -> Elements::Formula
91
+ def self.formula: (String expression, ?cached_value: String | Numeric | bool | nil, ?type: (Symbol | String)?, ?ref: String?) -> Elements::Formula
92
+
93
+ # Creates an array or dynamic array {Elements::Formula} object.
94
+ #
95
+ # @example Create a multi-cell array formula
96
+ # formula = Xlsxrb.array_formula("SUM(B1:B10*C1:C10)", "A1:C1", cached_value: 0)
97
+ #
98
+ # @example Create a dynamic array formula
99
+ # formula = Xlsxrb.array_formula("SORT(UNIQUE(A1:A10))", "D1")
100
+ #
101
+ # @param expression [String] The formula expression without leading '='.
102
+ # @param ref [String, nil] Target cell or range reference (e.g. "A1:C1" or "D1").
103
+ # @param cached_value [Object, nil] Optional precomputed value.
78
104
  # @return [Elements::Formula]
79
105
  # @api public
80
- # : (String expression, ?cached_value: (String | Numeric | bool | nil)) -> Elements::Formula
81
- def self.formula: (String expression, ?cached_value: String | Numeric | bool | nil) -> Elements::Formula
106
+ # : (String expression, ?String? ref, ?cached_value: (String | Numeric | bool | nil)) -> Elements::Formula
107
+ def self.array_formula: (String expression, ?String? ref, ?cached_value: String | Numeric | bool | nil) -> Elements::Formula
108
+
109
+ # Creates an {Elements::Hyperlink} object for use in cell hyperlinks.
110
+ #
111
+ # @example Create an external hyperlink with a ScreenTip tooltip
112
+ # link = Xlsxrb.hyperlink("https://example.com", tooltip: "Visit Example")
113
+ #
114
+ # @example Create an internal worksheet link
115
+ # link = Xlsxrb.hyperlink(location: "Sheet2!A1", tooltip: "Go to Sheet 2")
116
+ #
117
+ # @param url [String, nil] External hyperlink URL.
118
+ # @param display [String, nil] Optional display label.
119
+ # @param tooltip [String, nil] Optional hover ScreenTip text.
120
+ # @param location [String, nil] Optional internal sheet coordinate.
121
+ # @return [Elements::Hyperlink]
122
+ # @api public
123
+ # : (?String? url, ?display: String?, ?tooltip: String?, ?location: String?) -> Elements::Hyperlink
124
+ def self.hyperlink: (?String? url, ?display: String?, ?tooltip: String?, ?location: String?) -> Elements::Hyperlink
125
+
126
+ # Formats a cell value according to an Excel format code string.
127
+ #
128
+ # @param value [Object, nil] Value to format.
129
+ # @param format_code [String, nil] Excel format code string.
130
+ # @param date1904 [Boolean] Whether the 1904 date system is active.
131
+ # @return [String] Formatted string representation.
132
+ # @api public
133
+ # : (untyped value, ?String? format_code, ?date1904: bool) -> String
134
+ def self.format: (untyped value, ?String? format_code, ?date1904: bool) -> String
135
+
136
+ # Converts a Date or Time to an Excel numeric serial number (1900 or 1904 system).
137
+ #
138
+ # @example
139
+ # Xlsxrb.date_to_serial(Date.new(2026, 1, 1)) #=> 46023
140
+ #
141
+ # @param date_or_time [Date, Time] Date or Time instance.
142
+ # @param date1904 [Boolean] Whether to use the 1904 date system.
143
+ # @return [Integer, Float] Serial number.
144
+ # @api public
145
+ # : (Date | Time date_or_time, ?date1904: bool) -> (Integer | Float)
146
+ def self.date_to_serial: (Date | Time date_or_time, ?date1904: bool) -> (Integer | Float)
147
+
148
+ # Converts an Excel serial number to a Date.
149
+ #
150
+ # @example
151
+ # Xlsxrb.serial_to_date(46023) #=> #<Date: 2026-01-01>
152
+ #
153
+ # @param serial [Numeric] Excel serial number.
154
+ # @param date1904 [Boolean] Whether to use the 1904 date system.
155
+ # @return [Date]
156
+ # @api public
157
+ # : (Numeric serial, ?date1904: bool) -> Date
158
+ def self.serial_to_date: (Numeric serial, ?date1904: bool) -> Date
159
+
160
+ # Converts a Time or Date to a fractional Excel serial number.
161
+ #
162
+ # @example
163
+ # Xlsxrb.datetime_to_serial(Time.utc(2026, 1, 1, 12, 0, 0)) #=> 46023.5
164
+ #
165
+ # @param time [Time, Date] Time or Date instance.
166
+ # @param date1904 [Boolean] Whether to use the 1904 date system.
167
+ # @return [Float] Fractional serial number.
168
+ # @api public
169
+ # : (Time | Date time, ?date1904: bool) -> Float
170
+ def self.datetime_to_serial: (Time | Date time, ?date1904: bool) -> Float
171
+
172
+ # Converts an Excel serial number to a Time (UTC).
173
+ #
174
+ # @example
175
+ # Xlsxrb.serial_to_time(46023.5) #=> 2026-01-01 12:00:00 UTC
176
+ #
177
+ # @param serial [Numeric] Excel serial number.
178
+ # @param date1904 [Boolean] Whether to use the 1904 date system.
179
+ # @return [Time]
180
+ # @api public
181
+ # : (Numeric serial, ?date1904: bool) -> Time
182
+ def self.serial_to_time: (Numeric serial, ?date1904: bool) -> Time
183
+
184
+ alias self.serial_to_datetime self.serial_to_time
185
+
186
+ # Converts a cell range reference string (e.g. "A1:C10", "A1") to 0-based [[top_row, left_col], [bottom_row, right_col]].
187
+ #
188
+ # @example
189
+ # Xlsxrb.parse_range("A1:C10") #=> [[0, 0], [9, 2]]
190
+ #
191
+ # @param range_ref [String, nil]
192
+ # @return [Array([Integer, Integer], [Integer, Integer]), nil]
193
+ # @api public
194
+ # : (String? range_ref) -> [[Integer, Integer], [Integer, Integer]]?
195
+ def self.parse_range: (String? range_ref) -> [ [ Integer, Integer ], [ Integer, Integer ] ]?
196
+
197
+ # Converts 0-based bounding coordinates to an A1-style range reference string.
198
+ #
199
+ # @example
200
+ # Xlsxrb.range_to_ref(0, 0, 9, 2) #=> "A1:C10"
201
+ #
202
+ # @param top_row [Integer]
203
+ # @param left_col [Integer]
204
+ # @param bottom_row [Integer]
205
+ # @param right_col [Integer]
206
+ # @return [String]
207
+ # @api public
208
+ # : (Integer top_row, Integer left_col, Integer bottom_row, Integer right_col) -> String
209
+ def self.range_to_ref: (Integer top_row, Integer left_col, Integer bottom_row, Integer right_col) -> String
210
+
211
+ # Resolves an ECMA-376 indexed color palette index (0..63) to an RRGGBB hex string (or AARRGGBB if alpha: true).
212
+ #
213
+ # @example
214
+ # Xlsxrb.palette_color(12) #=> "0000FF"
215
+ # Xlsxrb.palette_color(12, alpha: true) #=> "FF0000FF"
216
+ #
217
+ # @param index [Object, nil] Palette index (0..63).
218
+ # @param alpha [Boolean] Whether to prefix "FF" alpha channel.
219
+ # @return [String, nil]
220
+ # @api public
221
+ # : (untyped index, ?alpha: bool) -> String?
222
+ def self.palette_color: (untyped index, ?alpha: bool) -> String?
223
+
224
+ # Converts any supported color representation (palette index 0..63, CSS name, #RGB, #RRGGBB, #AARRGGBB, integer RGB)
225
+ # to a normalized hex string.
226
+ #
227
+ # @example
228
+ # Xlsxrb.to_hex_color(12) #=> "0000FF"
229
+ # Xlsxrb.to_hex_color(:navy) #=> "000080"
230
+ # Xlsxrb.to_hex_color("#FF0000") #=> "FF0000"
231
+ #
232
+ # @param color [Integer, String, Symbol, nil]
233
+ # @param alpha [Boolean] Whether to include the alpha channel (default false -> "RRGGBB").
234
+ # @return [String, nil]
235
+ # @api public
236
+ # : (Integer | String | Symbol | nil color, ?alpha: bool) -> String?
237
+ def self.to_hex_color: (Integer | String | Symbol | nil color, ?alpha: bool) -> String?
238
+
239
+ alias self.color_to_hex self.to_hex_color
82
240
 
83
241
  # Reads an XLSX file (streaming and lazy-loaded by default) from a file path, IO stream, or binary String.
84
242
  #
@@ -86,18 +244,24 @@ module Xlsxrb
86
244
  # yields each {StreamSheet} sequentially. Call {#load} on the returned Workbook or Sheet
87
245
  # to convert to an in-memory representation for coordinate random access (`sheet["A1"]`).
88
246
  #
89
- # @overload read(source, password: nil, &block)
247
+ # @overload read(source, password: nil, trim_empty_rows: false, pad_empty_rows: false, pad_empty_cells: false, &block)
90
248
  # Yields each {StreamSheet} sequentially in streaming mode.
91
249
  # @param source [String, IO, StringIO] File path, binary content string, or readable IO stream.
92
250
  # @param password [String, nil] Optional password to decrypt password-protected XLSX files.
251
+ # @param trim_empty_rows [Boolean] Whether to omit trailing empty rows during sheet iteration.
252
+ # @param pad_empty_rows [Boolean] Whether to yield empty rows for skipped row numbers.
253
+ # @param pad_empty_cells [Boolean] Whether to pad missing cells within rows.
93
254
  # @yield [sheet]
94
255
  # @yieldparam sheet [StreamSheet] The streaming worksheet object.
95
256
  # @return [void]
96
257
  #
97
- # @overload read(source, password: nil)
258
+ # @overload read(source, password: nil, trim_empty_rows: false, pad_empty_rows: false, pad_empty_cells: false)
98
259
  # Returns a lazy {Elements::Workbook} object.
99
260
  # @param source [String, IO, StringIO] File path, binary content string, or readable IO stream.
100
261
  # @param password [String, nil] Optional password to decrypt password-protected XLSX files.
262
+ # @param trim_empty_rows [Boolean] Whether to omit trailing empty rows during sheet iteration.
263
+ # @param pad_empty_rows [Boolean] Whether to yield empty rows for skipped row numbers.
264
+ # @param pad_empty_cells [Boolean] Whether to pad missing cells within rows.
101
265
  # @return [Elements::Workbook]
102
266
  #
103
267
  # @example Streaming read across sheets and rows (O(1) constant memory)
@@ -118,22 +282,25 @@ module Xlsxrb
118
282
  # @raise [InvalidPasswordError] If the supplied password is incorrect.
119
283
  # @raise [ParseError] If the spreadsheet XML structure is invalid.
120
284
  # @api public
121
- # : (untyped source, ?password: String?) { (StreamSheet) -> void } -> void
122
- # : (untyped source, ?password: String?) -> Elements::Workbook
123
- def self.read: (untyped source, ?password: String?) { (StreamSheet) -> void } -> void
124
- | (untyped source, ?password: String?) -> Elements::Workbook
285
+ # : (untyped source, ?password: String?, ?trim_empty_rows: bool, ?pad_empty_rows: bool, ?pad_empty_cells: bool) { (StreamSheet) -> void } -> void
286
+ # : (untyped source, ?password: String?, ?trim_empty_rows: bool, ?pad_empty_rows: bool, ?pad_empty_cells: bool) -> Elements::Workbook
287
+ def self.read: (untyped source, ?password: String?, ?trim_empty_rows: bool, ?pad_empty_rows: bool, ?pad_empty_cells: bool) { (StreamSheet) -> void } -> void
288
+ | (untyped source, ?password: String?, ?trim_empty_rows: bool, ?pad_empty_rows: bool, ?pad_empty_cells: bool) -> Elements::Workbook
289
+
290
+ alias self.stream self.read
125
291
 
126
292
  # Writes an XLSX file or IO stream (streaming or in-memory), or returns a binary string.
127
293
  #
128
- # @overload write(target, password: nil, encryption_mode: :standard, strict_excel_mode: true, &block)
294
+ # @overload write(?target, password: nil, encryption_mode: :standard, strict_excel_mode: true, &block)
129
295
  # Streaming write: yields a {StreamWriter} context for high-speed, zero-allocation XLSX generation.
130
- # @param target [String, IO, StringIO] Destination file path or writable IO object.
296
+ # If target is omitted, returns the generated XLSX as an in-memory binary String.
297
+ # @param target [String, IO, StringIO, nil] Optional destination file path or writable IO object.
131
298
  # @param password [String, nil] Optional password to encrypt the generated XLSX file.
132
299
  # @param encryption_mode [Symbol] Encryption algorithm (:standard or :agile).
133
300
  # @param strict_excel_mode [Boolean] Whether to enforce Microsoft Excel specification limits.
134
301
  # @yield [stream_writer]
135
302
  # @yieldparam stream_writer [Xlsxrb::StreamWriter]
136
- # @return [void]
303
+ # @return [String, void] Binary data if target is omitted, or void if written to target.
137
304
  #
138
305
  # @overload write(workbook, password: nil, encryption_mode: :standard)
139
306
  # In-memory write: exports the workbook to an in-memory binary String.
@@ -155,6 +322,11 @@ module Xlsxrb
155
322
  # writer.sheet("Sheet1") { |s| s.row(["Hello", "World"]) }
156
323
  # end
157
324
  #
325
+ # @example Streaming write to in-memory binary string (target omitted)
326
+ # binary_data = Xlsxrb.write do |writer|
327
+ # writer.sheet("Sheet1") { |s| s.row(["Hello", "World"]) }
328
+ # end
329
+ #
158
330
  # @example Password-protected streaming write
159
331
  # Xlsxrb.write("protected.xlsx", password: "SecretPassword123") do |writer|
160
332
  # writer.sheet("Confidential") { |s| s.row(["Private Data", 100]) }
@@ -166,10 +338,10 @@ module Xlsxrb
166
338
  # @api public
167
339
  # : (Elements::Workbook workbook, ?password: String?, ?encryption_mode: Symbol) -> String
168
340
  # : (untyped target, Elements::Workbook | untyped workbook, ?password: String?, ?encryption_mode: Symbol) -> void
169
- # : (untyped target_or_workbook, ?Elements::Workbook | untyped workbook_or_nil, ?password: String?, ?encryption_mode: Symbol, ?strict_excel_mode: bool) ?{ (StreamWriter) -> void } -> untyped
341
+ # : (?untyped target_or_workbook, ?Elements::Workbook | untyped workbook_or_nil, ?password: String?, ?encryption_mode: Symbol, ?strict_excel_mode: bool) ?{ (StreamWriter) -> void } -> untyped
170
342
  def self.write: (Elements::Workbook workbook, ?password: String?, ?encryption_mode: Symbol) -> String
171
343
  | (untyped target, Elements::Workbook | untyped workbook, ?password: String?, ?encryption_mode: Symbol) -> void
172
- | (untyped target_or_workbook, ?Elements::Workbook | untyped workbook_or_nil, ?password: String?, ?encryption_mode: Symbol, ?strict_excel_mode: bool) ?{ (StreamWriter) -> void } -> untyped
344
+ | (?untyped target_or_workbook, ?Elements::Workbook | untyped workbook_or_nil, ?password: String?, ?encryption_mode: Symbol, ?strict_excel_mode: bool) ?{ (StreamWriter) -> void } -> untyped
173
345
 
174
346
  # Modifies an existing XLSX file in-memory using an immutable transformation block.
175
347
  #
@@ -213,14 +385,32 @@ module Xlsxrb
213
385
  # : (?strict_excel_mode: bool) ?{ (WorkbookBuilder) -> void } -> Elements::Workbook
214
386
  def self.build: (?strict_excel_mode: bool) ?{ (WorkbookBuilder) -> void } -> Elements::Workbook
215
387
 
216
- # : (String name, String? sheet_xml, Array[String] shared_strings, untyped _styles) -> Elements::Worksheet
217
- private def self.build_worksheet: (String name, String? sheet_xml, Array[String] shared_strings, untyped _styles) -> Elements::Worksheet
388
+ # : (String name, String? sheet_xml, Array[String] shared_strings, untyped styles, ?state: Symbol, ?zip_reader: Ooxml::ZipReader?, ?entry_name: String?, ?hyperlinks: Hash[String, untyped]?, ?comments: Array[Hash[Symbol, untyped]]?, ?images: Array[Elements::Image]?, ?date1904: bool, ?dimension: String?, ?trim_empty_rows: bool, ?pad_empty_rows: bool, ?pad_empty_cells: bool, ?merged_cells: Array[String]?, ?auto_filter: String?, ?tables: Array[Hash[Symbol, untyped]]?, ?shapes: Array[Hash[Symbol, untyped]]?, ?freeze_pane: Hash[Symbol, untyped]?, ?page_setup: Hash[Symbol, untyped]?, ?page_margins: Hash[Symbol, untyped]?, ?header_footer: Hash[Symbol, untyped]?, ?print_options: Hash[Symbol, untyped]?, ?sheet_protection: Hash[Symbol, untyped]?, ?sheet_view: Hash[Symbol, untyped]?, ?sheet_properties: Hash[Symbol, untyped]?, ?sheet_format: Hash[Symbol, untyped]?, ?row_breaks: Array[untyped]?, ?col_breaks: Array[untyped]?, ?protected_ranges: Array[Hash[Symbol, untyped]]?, ?cell_watches: Array[String]?) -> Elements::Worksheet
389
+ private def self.build_worksheet: (String name, String? sheet_xml, Array[String] shared_strings, untyped styles, ?state: Symbol, ?zip_reader: Ooxml::ZipReader?, ?entry_name: String?, ?hyperlinks: Hash[String, untyped]?, ?comments: Array[Hash[Symbol, untyped]]?, ?images: Array[Elements::Image]?, ?date1904: bool, ?dimension: String?, ?trim_empty_rows: bool, ?pad_empty_rows: bool, ?pad_empty_cells: bool, ?merged_cells: Array[String]?, ?auto_filter: String?, ?tables: Array[Hash[Symbol, untyped]]?, ?shapes: Array[Hash[Symbol, untyped]]?, ?freeze_pane: Hash[Symbol, untyped]?, ?page_setup: Hash[Symbol, untyped]?, ?page_margins: Hash[Symbol, untyped]?, ?header_footer: Hash[Symbol, untyped]?, ?print_options: Hash[Symbol, untyped]?, ?sheet_protection: Hash[Symbol, untyped]?, ?sheet_view: Hash[Symbol, untyped]?, ?sheet_properties: Hash[Symbol, untyped]?, ?sheet_format: Hash[Symbol, untyped]?, ?row_breaks: Array[untyped]?, ?col_breaks: Array[untyped]?, ?protected_ranges: Array[Hash[Symbol, untyped]]?, ?cell_watches: Array[String]?) -> Elements::Worksheet
218
390
 
219
- # : (untyped raw_row) -> (Elements::Row | untyped)
220
- private def self.build_row_from_raw: (untyped raw_row) -> (Elements::Row | untyped)
391
+ # : (String? sheet_xml, ?zip_reader: Ooxml::ZipReader?, ?entry_name: String?, ?rels_xml: String?) -> Hash[String, Hash[Symbol, untyped]]
392
+ private def self.resolve_hyperlinks: (String? sheet_xml, ?zip_reader: Ooxml::ZipReader?, ?entry_name: String?, ?rels_xml: String?) -> Hash[String, Hash[Symbol, untyped]]
221
393
 
222
- # : (Elements::Cell cell, Array[String] sst, Hash[String, Integer] sst_index) -> Hash[Symbol, untyped]
223
- private def self.build_raw_cell: (Elements::Cell cell, Array[String] sst, Hash[String, Integer] sst_index) -> Hash[Symbol, untyped]
394
+ # : (String base_dir, String target) -> String
395
+ private def self.resolve_relative_path: (String base_dir, String target) -> String
396
+
397
+ # : (?zip_reader: Ooxml::ZipReader?, ?entry_name: String?) -> Array[Hash[Symbol, untyped]]
398
+ private def self.resolve_comments: (?zip_reader: Ooxml::ZipReader?, ?entry_name: String?) -> Array[Hash[Symbol, untyped]]
399
+
400
+ # : (?zip_reader: Ooxml::ZipReader?, ?entry_name: String?) -> Array[Elements::Image]
401
+ private def self.resolve_images: (?zip_reader: Ooxml::ZipReader?, ?entry_name: String?) -> Array[Elements::Image]
402
+
403
+ # : (?zip_reader: Ooxml::ZipReader?, ?entry_name: String?) -> Array[Hash[Symbol, untyped]]
404
+ private def self.resolve_tables: (?zip_reader: Ooxml::ZipReader?, ?entry_name: String?) -> Array[Hash[Symbol, untyped]]
405
+
406
+ # : (?zip_reader: Ooxml::ZipReader?, ?entry_name: String?) -> Array[Hash[Symbol, untyped]]
407
+ private def self.resolve_shapes: (?zip_reader: Ooxml::ZipReader?, ?entry_name: String?) -> Array[Hash[Symbol, untyped]]
408
+
409
+ # : (untyped raw_row, ?Hash[String, Hash[Symbol, untyped]] hyperlinks, ?(Array[Hash[Symbol, untyped]] | Hash[String, Hash[Symbol, untyped]]) comments, ?Hash[untyped, untyped]? styles, ?date1904: bool) -> (Elements::Row | untyped)
410
+ private def self.build_row_from_raw: (untyped raw_row, ?Hash[String, Hash[Symbol, untyped]] hyperlinks, ?Array[Hash[Symbol, untyped]] | Hash[String, Hash[Symbol, untyped]] comments, ?Hash[untyped, untyped]? styles, ?date1904: bool) -> (Elements::Row | untyped)
411
+
412
+ # : (Elements::Cell cell, Array[String] sst, Hash[String, Integer] sst_index, ?date1904: bool) -> Hash[Symbol, untyped]
413
+ private def self.build_raw_cell: (Elements::Cell cell, Array[String] sst, Hash[String, Integer] sst_index, ?date1904: bool) -> Hash[Symbol, untyped]
224
414
 
225
415
  # : (Elements::Row row) -> Hash[Symbol, untyped]
226
416
  private def self.build_row_attrs: (Elements::Row row) -> Hash[Symbol, untyped]
@@ -240,8 +430,14 @@ module Xlsxrb
240
430
  # : (String sheet_xml, Array[Elements::Row] rows) -> String
241
431
  private def self.update_dimension: (String sheet_xml, Array[Elements::Row] rows) -> String
242
432
 
243
- # : (Array[Elements::Row] rows, Array[untyped] shared_strings, Hash[untyped, Integer] sst_index, ?use_sst: bool) -> String
244
- private def self.serialize_sheet_data_xml: (Array[Elements::Row] rows, Array[untyped] shared_strings, Hash[untyped, Integer] sst_index, ?use_sst: bool) -> String
433
+ # : (String sheet_xml, String? orig_rels_xml, Hash[String, untyped] new_hyperlinks) -> [String, String?]
434
+ private def self.update_sheet_hyperlinks: (String sheet_xml, String? orig_rels_xml, Hash[String, untyped] new_hyperlinks) -> [ String, String? ]
435
+
436
+ # : (String sheet_xml, String _rels_path, String? orig_rels_xml, Array[Hash[Symbol, untyped]] new_comments, Ooxml::ZipReader zip_reader, Integer sheet_idx, String entry_name, Hash[String, String] replaced_entries) -> [String, String?]
437
+ private def self.update_sheet_comments: (String sheet_xml, String _rels_path, String? orig_rels_xml, Array[Hash[Symbol, untyped]] new_comments, Ooxml::ZipReader zip_reader, Integer sheet_idx, String entry_name, Hash[String, String] replaced_entries) -> [ String, String? ]
438
+
439
+ # : (Array[Elements::Row] rows, Array[untyped] shared_strings, Hash[untyped, Integer] sst_index, ?use_sst: bool, ?date1904: bool) -> String
440
+ private def self.serialize_sheet_data_xml: (Array[Elements::Row] rows, Array[untyped] shared_strings, Hash[untyped, Integer] sst_index, ?use_sst: bool, ?date1904: bool) -> String
245
441
 
246
442
  # Builds a raw cell hash from a value for streaming writes.
247
443
  #
@@ -252,6 +448,6 @@ module Xlsxrb
252
448
  # @param sst_index [Hash{String => Integer}] Shared strings index mapping.
253
449
  # @return [Hash{Symbol => Object}] Raw cell hash.
254
450
  # @api public
255
- # : (Integer row_index, Integer col_index, untyped value, Array[String] sst, Hash[String, Integer] sst_index) -> Hash[Symbol, untyped]
256
- def self.build_raw_cell_from_value: (Integer row_index, Integer col_index, untyped value, Array[String] sst, Hash[String, Integer] sst_index) -> Hash[Symbol, untyped]
451
+ # : (Integer row_index, Integer col_index, untyped value, Array[String] sst, Hash[String, Integer] sst_index, ?date1904: bool) -> Hash[Symbol, untyped]
452
+ def self.build_raw_cell_from_value: (Integer row_index, Integer col_index, untyped value, Array[String] sst, Hash[String, Integer] sst_index, ?date1904: bool) -> Hash[Symbol, untyped]
257
453
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xlsxrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.13
4
+ version: 0.1.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - niku
@@ -53,15 +53,19 @@ files:
53
53
  - lib/ruby_lsp/xlsxrb/completion_listener.rb
54
54
  - lib/xlsxrb.rb
55
55
  - lib/xlsxrb/chart_builder.rb
56
+ - lib/xlsxrb/colors.rb
56
57
  - lib/xlsxrb/dsl_helpers.rb
57
58
  - lib/xlsxrb/elements.rb
58
59
  - lib/xlsxrb/elements/cell.rb
59
60
  - lib/xlsxrb/elements/column.rb
60
61
  - lib/xlsxrb/elements/coordinate_access.rb
62
+ - lib/xlsxrb/elements/image.rb
61
63
  - lib/xlsxrb/elements/row.rb
64
+ - lib/xlsxrb/elements/styles.rb
62
65
  - lib/xlsxrb/elements/types.rb
63
66
  - lib/xlsxrb/elements/workbook.rb
64
67
  - lib/xlsxrb/elements/worksheet.rb
68
+ - lib/xlsxrb/number_formatter.rb
65
69
  - lib/xlsxrb/ooxml.rb
66
70
  - lib/xlsxrb/ooxml/cfb.rb
67
71
  - lib/xlsxrb/ooxml/crypto.rb
@@ -93,20 +97,25 @@ files:
93
97
  - lib/xlsxrb/stream_sheet.rb
94
98
  - lib/xlsxrb/stream_writer.rb
95
99
  - lib/xlsxrb/style_builder.rb
100
+ - lib/xlsxrb/utils.rb
96
101
  - lib/xlsxrb/version.rb
97
102
  - lib/xlsxrb/workbook_builder.rb
98
103
  - lib/xlsxrb/worksheet_builder.rb
99
104
  - sig/generated/xlsxrb.rbs
100
105
  - sig/generated/xlsxrb/chart_builder.rbs
106
+ - sig/generated/xlsxrb/colors.rbs
101
107
  - sig/generated/xlsxrb/dsl_helpers.rbs
102
108
  - sig/generated/xlsxrb/elements.rbs
103
109
  - sig/generated/xlsxrb/elements/cell.rbs
104
110
  - sig/generated/xlsxrb/elements/column.rbs
105
111
  - sig/generated/xlsxrb/elements/coordinate_access.rbs
112
+ - sig/generated/xlsxrb/elements/image.rbs
106
113
  - sig/generated/xlsxrb/elements/row.rbs
114
+ - sig/generated/xlsxrb/elements/styles.rbs
107
115
  - sig/generated/xlsxrb/elements/types.rbs
108
116
  - sig/generated/xlsxrb/elements/workbook.rbs
109
117
  - sig/generated/xlsxrb/elements/worksheet.rbs
118
+ - sig/generated/xlsxrb/number_formatter.rbs
110
119
  - sig/generated/xlsxrb/ooxml.rbs
111
120
  - sig/generated/xlsxrb/ooxml/cfb.rbs
112
121
  - sig/generated/xlsxrb/ooxml/crypto.rbs
@@ -138,6 +147,7 @@ files:
138
147
  - sig/generated/xlsxrb/stream_sheet.rbs
139
148
  - sig/generated/xlsxrb/stream_writer.rbs
140
149
  - sig/generated/xlsxrb/style_builder.rbs
150
+ - sig/generated/xlsxrb/utils.rbs
141
151
  - sig/generated/xlsxrb/version.rbs
142
152
  - sig/generated/xlsxrb/workbook_builder.rbs
143
153
  - sig/generated/xlsxrb/worksheet_builder.rbs