fast_excel 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +2 -0
  3. data/.gitignore +3 -0
  4. data/.travis.yml +18 -6
  5. data/CHANGELOG.md +14 -1
  6. data/Dockerfile.test +16 -0
  7. data/Gemfile +1 -1
  8. data/Gemfile.lock +21 -21
  9. data/Makefile +13 -2
  10. data/README.md +148 -38
  11. data/Rakefile +2 -0
  12. data/examples/example.rb +3 -3
  13. data/examples/example_filters.rb +36 -0
  14. data/examples/example_formula.rb +1 -3
  15. data/examples/example_hyperlink.rb +20 -0
  16. data/fast_excel.gemspec +1 -1
  17. data/lib/fast_excel.rb +36 -12
  18. data/lib/fast_excel/binding.rb +31 -21
  19. data/lib/fast_excel/binding/chart.rb +20 -1
  20. data/lib/fast_excel/binding/workbook.rb +10 -2
  21. data/lib/fast_excel/binding/worksheet.rb +44 -27
  22. data/libxlsxwriter/.gitignore +1 -0
  23. data/libxlsxwriter/.indent.pro +5 -0
  24. data/libxlsxwriter/CMakeLists.txt +1 -11
  25. data/libxlsxwriter/CONTRIBUTING.md +1 -1
  26. data/libxlsxwriter/Changes.txt +84 -0
  27. data/libxlsxwriter/LICENSE.txt +1 -1
  28. data/libxlsxwriter/Makefile +7 -5
  29. data/libxlsxwriter/Readme.md +1 -1
  30. data/libxlsxwriter/cocoapods/libxlsxwriter-umbrella.h +1 -0
  31. data/libxlsxwriter/include/xlsxwriter.h +2 -2
  32. data/libxlsxwriter/include/xlsxwriter/app.h +2 -2
  33. data/libxlsxwriter/include/xlsxwriter/chart.h +56 -6
  34. data/libxlsxwriter/include/xlsxwriter/chartsheet.h +544 -0
  35. data/libxlsxwriter/include/xlsxwriter/common.h +27 -6
  36. data/libxlsxwriter/include/xlsxwriter/content_types.h +5 -2
  37. data/libxlsxwriter/include/xlsxwriter/core.h +2 -2
  38. data/libxlsxwriter/include/xlsxwriter/custom.h +2 -2
  39. data/libxlsxwriter/include/xlsxwriter/drawing.h +3 -2
  40. data/libxlsxwriter/include/xlsxwriter/format.h +3 -3
  41. data/libxlsxwriter/include/xlsxwriter/hash_table.h +1 -1
  42. data/libxlsxwriter/include/xlsxwriter/packager.h +13 -8
  43. data/libxlsxwriter/include/xlsxwriter/relationships.h +2 -2
  44. data/libxlsxwriter/include/xlsxwriter/shared_strings.h +5 -3
  45. data/libxlsxwriter/include/xlsxwriter/styles.h +9 -4
  46. data/libxlsxwriter/include/xlsxwriter/theme.h +2 -2
  47. data/libxlsxwriter/include/xlsxwriter/utility.h +26 -2
  48. data/libxlsxwriter/include/xlsxwriter/workbook.h +232 -55
  49. data/libxlsxwriter/include/xlsxwriter/worksheet.h +264 -53
  50. data/libxlsxwriter/include/xlsxwriter/xmlwriter.h +3 -1
  51. data/libxlsxwriter/libxlsxwriter.podspec +1 -1
  52. data/libxlsxwriter/src/Makefile +3 -3
  53. data/libxlsxwriter/src/app.c +2 -2
  54. data/libxlsxwriter/src/chart.c +41 -5
  55. data/libxlsxwriter/src/chartsheet.c +508 -0
  56. data/libxlsxwriter/src/content_types.c +12 -4
  57. data/libxlsxwriter/src/core.c +2 -2
  58. data/libxlsxwriter/src/custom.c +2 -2
  59. data/libxlsxwriter/src/drawing.c +114 -17
  60. data/libxlsxwriter/src/format.c +3 -3
  61. data/libxlsxwriter/src/hash_table.c +1 -1
  62. data/libxlsxwriter/src/packager.c +369 -65
  63. data/libxlsxwriter/src/relationships.c +2 -2
  64. data/libxlsxwriter/src/shared_strings.c +18 -4
  65. data/libxlsxwriter/src/styles.c +56 -9
  66. data/libxlsxwriter/src/theme.c +2 -2
  67. data/libxlsxwriter/src/utility.c +53 -6
  68. data/libxlsxwriter/src/workbook.c +372 -56
  69. data/libxlsxwriter/src/worksheet.c +425 -76
  70. data/libxlsxwriter/src/xmlwriter.c +17 -8
  71. data/libxlsxwriter/third_party/minizip/ioapi.c +10 -0
  72. data/libxlsxwriter/third_party/minizip/zip.c +2 -0
  73. data/libxlsxwriter/third_party/tmpfileplus/tmpfileplus.c +2 -2
  74. data/libxlsxwriter/version.txt +1 -1
  75. data/test/tmpfile_test.rb +1 -0
  76. data/test/validations_test.rb +26 -6
  77. data/test/worksheet_test.rb +43 -0
  78. metadata +9 -6
  79. data/libxlsxwriter/.drone.yml +0 -27
  80. data/libxlsxwriter/appveyor.yml +0 -65
  81. data/libxlsxwriter/cmake/FindZLIB.cmake +0 -123
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 26cc6868779b440f2c848e60a68bce2272760255e1c4d4e887edae312d16eb76
4
- data.tar.gz: 43e3d4288b2c2bb06685308a4c97b267a563d72c32c4902793dd6d3030cde890
3
+ metadata.gz: af06f03372f15efb18eaf09669f7822ee81b67a5d4c6be7a55c3b8eb2609fd82
4
+ data.tar.gz: af892b143b010078e56380d38c76216ff19cb524f3e73c5206d18131546f216c
5
5
  SHA512:
6
- metadata.gz: 49fa98254e1c6b147e0edd4262ddd87d5b75410b42b38843ae887bbb98ce9aae6bf6607bdebeec840bca73c98ebc5be1f451ed227d51a147fb6a1c6bd8bd0f67
7
- data.tar.gz: 724f6b6e146816061c270899d798faa6ddcbe29e8ce9aba958bc23cb14c3ecdd0e0ce7de686b92b997957c73164a7f83c52f3283499a193eab96670bc9fdecec
6
+ metadata.gz: 979827252546904e71283dcf5996636fad7d04963ea1d07f6adf916484ac94a39e9b5a6f7d479529cb42971f53dc2dbadf0c08d1d57caf3eac7a91747308b6f2
7
+ data.tar.gz: 6a64e0cfa1894134759a2a1784c78c2641ff6aec2b81c48e9afb81fcc335d24ff7a0022f3ef252bb2ba0824fc8afe5220159829bee5bc32556687ed170009bbd
@@ -0,0 +1,2 @@
1
+ libxlsxwriter
2
+ .git
data/.gitignore CHANGED
@@ -8,6 +8,9 @@ gen_ffi.rb
8
8
  a.out
9
9
  .DS_Store
10
10
  *.gem
11
+ *.cmake
12
+ libxlsxwriter/CmakeFiles
13
+ libxlsxwriter/CmakeCache.txt
11
14
  libxlsxwriter/dev
12
15
  libxlsxwriter/docs
13
16
  libxlsxwriter/examples
@@ -12,21 +12,33 @@ matrix:
12
12
  - os: osx
13
13
  rvm: 2.3.8
14
14
  - os: linux
15
- rvm: 2.4.5
15
+ rvm: 2.4.6
16
16
  - os: osx
17
- rvm: 2.4.5
17
+ rvm: 2.4.6
18
18
  - os: linux
19
- rvm: 2.5.3
19
+ rvm: 2.5.5
20
20
  - os: osx
21
- rvm: 2.5.3
21
+ rvm: 2.5.5
22
22
  - os: linux
23
- rvm: 2.6.0
23
+ rvm: 2.6.3
24
+ env: BUILD_DOCKER=true
25
+ services:
26
+ - docker
24
27
  - os: osx
25
- rvm: 2.6.0
28
+ rvm: 2.6.3
29
+ osx_image: xcode10.2
30
+ before_script:
31
+ - ls -lah /Applications
32
+ - sudo xcode-select -s /Applications/Xcode-10.2.1.app/Contents/Developer
33
+ - clang --version
26
34
  fast_finish: true
27
35
 
36
+ before_install:
37
+ - gem install bundler -v 2.0.2
38
+
28
39
  script:
29
40
  - bundle install
30
41
  - make
31
42
  - bundle exec rake test
32
43
  - bundle exec rake examples
44
+ - if [ -n "$BUILD_DOCKER" ]; then docker build . -f Dockerfile.test --build-arg TRAVIS_COMMIT --build-arg TRAVIS_BRANCH ; fi
@@ -1,3 +1,16 @@
1
+ #### Version 0.3.0 - 23 jul 2020
2
+
3
+ * Add support for FastExcel::URL
4
+ * Add support for writing boolean values
5
+ * Add enable_filters!(end_col: X)
6
+ * Allow to open with an empty existing file
7
+ * Add missing enums to chart
8
+ * Don't change sheet name from "" to nil
9
+ * Support build with docker
10
+ * Fix crash when sheet name exceeds maximum length.
11
+ * [BREAKING CHANGE] Rename `worksheet.right_to_left` to `worksheet.set_right_to_left`:
12
+ - now it will work properly when using the `pry-rails` gem, not forcing the document start from right even when this method is not called.
13
+
1
14
  #### Version 0.2.6 - 26 jan 2019
2
15
 
3
16
  * Add column auto width (thanks to @duffyjp)
@@ -37,4 +50,4 @@
37
50
 
38
51
  #### Version 0.1.0 - 24 feb 2017
39
52
 
40
- Initial
53
+ Initial
@@ -0,0 +1,16 @@
1
+ FROM ruby
2
+
3
+ RUN gem install fast_excel
4
+
5
+ ARG TRAVIS_COMMIT
6
+ ARG TRAVIS_BRANCH
7
+
8
+ RUN echo "source 'https://rubygems.org'" > Gemfile
9
+
10
+ RUN [ -z "$TRAVIS_COMMIT" ] && \
11
+ echo "gem 'fast_excel', git: 'https://github.com/Paxa/fast_excel.git'" >> Gemfile || true
12
+ RUN [ -z "$TRAVIS_COMMIT" ] || \
13
+ echo "gem 'fast_excel', git: 'https://github.com/Paxa/fast_excel.git', branch: '$TRAVIS_BRANCH', ref: '$TRAVIS_COMMIT'" >> Gemfile
14
+
15
+ RUN cat Gemfile
16
+ RUN bundle
data/Gemfile CHANGED
@@ -5,7 +5,7 @@ gem 'ffi_gen', require: false
5
5
 
6
6
  gem 'rake'
7
7
 
8
- gem 'roo', '2.8.1', git: 'https://github.com/roo-rb/roo.git', tag: 'v2.8.1'
8
+ gem 'roo', '2.8.3', git: 'https://github.com/roo-rb/roo.git', tag: 'v2.8.3'
9
9
 
10
10
  gem 'minitest'
11
11
  gem 'minitest-reporters'
@@ -6,7 +6,7 @@ GIT
6
6
 
7
7
  GIT
8
8
  remote: https://github.com/randym/axlsx.git
9
- revision: c593a08b2a929dac7aa8dc418b55e26b4c49dc34
9
+ revision: 8e7b4b3b7259103452c191f73ce0bf64f66033fe
10
10
  specs:
11
11
  axlsx (3.0.0.pre)
12
12
  htmlentities (~> 4.3, >= 4.3.4)
@@ -16,44 +16,44 @@ GIT
16
16
 
17
17
  GIT
18
18
  remote: https://github.com/roo-rb/roo.git
19
- revision: 5bbda9849ca6deb0ad8020c4476c1ab9ddfd824b
20
- tag: v2.8.1
19
+ revision: d416f1520c50bbab160ca2ed9a49498fcc3edf50
20
+ tag: v2.8.3
21
21
  specs:
22
- roo (2.8.1)
22
+ roo (2.8.3)
23
23
  nokogiri (~> 1)
24
- rubyzip (>= 1.2.1, < 2.0.0)
24
+ rubyzip (>= 1.3.0, < 3.0.0)
25
25
 
26
26
  GEM
27
27
  remote: https://rubygems.org/
28
28
  specs:
29
29
  ansi (1.5.0)
30
- benchmark-ips (2.7.2)
31
- builder (3.2.3)
32
- ffi (1.10.0)
30
+ benchmark-ips (2.8.2)
31
+ builder (3.2.4)
32
+ ffi (1.13.1)
33
33
  ffi_gen (1.2.0)
34
34
  ffi (~> 1.0)
35
35
  htmlentities (4.3.4)
36
- mimemagic (0.3.3)
36
+ mimemagic (0.3.5)
37
37
  mini_portile2 (2.4.0)
38
- minitest (5.11.3)
39
- minitest-reporters (1.3.6)
38
+ minitest (5.14.1)
39
+ minitest-reporters (1.4.2)
40
40
  ansi
41
41
  builder
42
42
  minitest (>= 5.0)
43
43
  ruby-progressbar
44
- nokogiri (1.10.1)
44
+ nokogiri (1.10.10)
45
45
  mini_portile2 (~> 2.4.0)
46
- rake (12.3.2)
47
- ruby-progressbar (1.10.0)
48
- rubyzip (1.2.2)
49
- write_xlsx (0.85.5)
46
+ rake (13.0.1)
47
+ ruby-progressbar (1.10.1)
48
+ rubyzip (1.3.0)
49
+ write_xlsx (0.85.7)
50
50
  rubyzip (>= 1.0.0)
51
51
  zip-zip
52
- xlsxtream (2.1.0)
53
- zip_tricks (~> 4.5)
52
+ xlsxtream (2.4.0)
53
+ zip_tricks (>= 4.5, < 6)
54
54
  zip-zip (0.3)
55
55
  rubyzip (>= 1.0.0)
56
- zip_tricks (4.7.1)
56
+ zip_tricks (5.3.1)
57
57
 
58
58
  PLATFORMS
59
59
  ruby
@@ -67,9 +67,9 @@ DEPENDENCIES
67
67
  minitest-reporters
68
68
  process_memory!
69
69
  rake
70
- roo (= 2.8.1)!
70
+ roo (= 2.8.3)!
71
71
  write_xlsx
72
72
  xlsxtream
73
73
 
74
74
  BUNDLED WITH
75
- 1.17.2
75
+ 2.0.2
data/Makefile CHANGED
@@ -3,11 +3,22 @@ ifdef V
3
3
  Q=
4
4
  endif
5
5
 
6
+ # with xcode better to use cmake
7
+ UNAME_S := $(shell uname -s)
8
+ ifeq ($(UNAME_S),"Darwin")
9
+ USE_CMAKE := $(shell command -v cmake 2> /dev/null)
10
+ endif
11
+
6
12
  all :
7
- @echo "Compiling ext/text_width ..."
8
- rake compile
13
+ # @echo "Compiling ext/text_width ..."
14
+ # rake compile
9
15
  @echo "Compiling libxlsxwriter ..."
16
+ ifdef USE_CMAKE
17
+ @echo "run cmake libxlsxwriter ..."
18
+ cmake libxlsxwriter
19
+ else
10
20
  $(Q)$(MAKE) -C libxlsxwriter
21
+ endif
11
22
 
12
23
  clean :
13
24
  $(Q)$(MAKE) clean -C libxlsxwriter
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  ```ruby
4
4
  require 'fast_excel'
5
5
 
6
- workbook = FastExcel.open("hello_world_ffi.xlsx", constant_memory: true)
6
+ workbook = FastExcel.open("hello_world.xlsx", constant_memory: true)
7
7
  workbook.default_format.set(
8
8
  font_size: 0, # user's default
9
9
  font_family: "Arial"
@@ -11,7 +11,7 @@ workbook.default_format.set(
11
11
 
12
12
  worksheet = workbook.add_worksheet("Example Report")
13
13
 
14
- bold = workbook.bold_cell_format
14
+ bold = workbook.bold_format
15
15
  worksheet.set_column(0, 0, FastExcel::DEF_COL_WIDTH, bold)
16
16
 
17
17
  price = workbook.number_format("#,##0.00")
@@ -35,43 +35,141 @@ See [more examples](https://github.com/Paxa/fast_excel/tree/master/examples)
35
35
 
36
36
  This repository and gem contain sources of [libxlsxwriter](https://github.com/jmcnamara/libxlsxwriter)
37
37
 
38
- ## Benchmarks
38
+ ## Install
39
39
 
40
- 1000 rows:
40
+ ```ruby
41
+ # Gemfile
42
+ gem 'fast_excel'
41
43
  ```
42
- Comparison:
43
- FastExcel: 31.7 i/s
44
- Axlsx: 8.0 i/s - 3.98x slower
45
- write_xlsx: 6.9 i/s - 4.62x slower
44
+ Or
45
+ ```
46
+ gem install fast_excel
46
47
  ```
47
48
 
48
- 20000 rows:
49
+
50
+
51
+ ### Create Document
52
+ ```ruby
53
+ workbook = FastExcel.open # creates tmp file
54
+ # ...
55
+ send_data(workbook.read_string, filename: "table.xlsx") # read tmp file and delete it
49
56
  ```
50
- Comparison:
51
- FastExcel: 1.4 i/s
52
- Axlsx: 0.4 i/s - 3.46x slower
53
- write_xlsx: 0.1 i/s - 17.04x slower
57
+
58
+ Also can use `workbook.remove_tmp_file` to delete tmp file manually
59
+
60
+
61
+ **Constant memory mode**: saves each row to disk, good for really big files but can not change previous lines that already saved
62
+ ```ruby
63
+ workbook = FastExcel.open(constant_memory: true)
54
64
  ```
55
65
 
56
- Max memory usage, generating 100k rows:
66
+ **Save to file**
67
+ ```ruby
68
+ workbook = FastExcel.open("my_dinner.xlsx")
57
69
  ```
58
- FastExcel - 20 MB
59
- Axlsx - 60 MB
60
- write_xlsx - 100 MB
70
+
71
+ ### Write Data
72
+ FastExcel will automatically detect data type and one of `write_number` or `write_datetime` or `write_formula` or `write_string` or `write_url`
73
+ ```ruby
74
+ workbook = FastExcel.open
75
+ worksheet = workbook.add_worksheet
76
+
77
+ # write specific type value value
78
+ worksheet.write_number(row = 0, col = 5, 1_234_567, format = nil)
79
+
80
+ # write value with type detection
81
+ worksheet.write_value(row = 0, col = 5, 1_234_567, format = nil)
82
+
83
+ # write row of values. format argument can be format object or array of format objects
84
+ worksheet.write_row(row = 1, ["strong", 123_456, Time.now], format = nil)
85
+
86
+ # write row to the bottom
87
+ worksheet.append_row(["strong", 123_456, Time.now], )
88
+
89
+ # shortcut for append_row()
90
+ worksheet << ["strong", 123_456, Time.now]
61
91
  ```
62
92
 
63
- ## Install
93
+ **Saving dates**: excel store dates as number of days since 1st January 1900, and FastExcel will make it for you.
64
94
 
95
+ To make saving of dates slightly faster can use `FastExcel.date_num` helper:
65
96
  ```ruby
66
- # Gemfile
67
- gem 'fast_excel'
97
+ date_format = workbook.number_format("[$-409]m/d/yy hh:mm;@")
98
+ worksheet.write_number(0, 0, FastExcel.date_num(Time.now, Time.zone.utc_offset), date_format)
68
99
  ```
69
- Or
100
+
101
+ **Formulas**: special type of value in excel
102
+ ```ruby
103
+ worksheet << [1, 2, 3, 4]
104
+ worksheet << [FastExcel::Formula.new("SUM(A1:D1)")] # A2 will be shown as 10
70
105
  ```
71
- gem install fast_excel
106
+
107
+ **URL**: Link to website or something else
108
+ ```ruby
109
+ url_format = workbook.add_format(underline: :underline_single, font_color: :blue) # format is optional
110
+ worksheet.append_row([
111
+ FastExcel::URL.new("https://github.com/Paxa/fast_excel"),
112
+ FastExcel::URL.new("postgres://localhost")
113
+ ], url_format)
114
+ # or
115
+ worksheet.write_url(0, 2, "https://github.com/Paxa/fast_excel", url_format)
116
+ ```
117
+
118
+
119
+ ### Data Formatting
120
+ ```ruby
121
+ format = worksheet.add_format(
122
+ bold: true,
123
+ italic: true,
124
+ font_outline: true,
125
+ font_shadow: true,
126
+ text_wrap: true,
127
+ font_strikeout: true,
128
+ shrink: true,
129
+ text_justlast: true,
130
+ font_size: 13, # default is 11, use 0 for user's default
131
+ font_name: "Arial", # default is Calibri, also accessible via font_family
132
+ font_color: :orange, # can use RGB hex as "#FF0000" or 0x00FF00 or color name as symbol or string
133
+ font_script: :font_subscript,
134
+ rotation: 10,
135
+ underline: :underline_single, # or :underline_double or :underline_single_accounting or :underline_double_accounting
136
+ indent: 1,
137
+ # border styles
138
+ border: :border_thin,
139
+ left: :medium,
140
+ top: :dashed,
141
+ right: :double,
142
+ bottom: :hair,
143
+ bottom_color: :alice_blue,
144
+ top_color: "#11ABCD",
145
+ # Align
146
+ align: {h: :align_center, v: :align_vertical_center},
147
+ num_format: "#,##0.00"
148
+ )
149
+ ```
150
+
151
+ **Shortcuts**:
152
+ ```ruby
153
+ workbook.bold_format # bold text
154
+ workbook.number_format("[$-409]m/d/yy h:mm AM/PM;@") # format for date
72
155
  ```
73
156
 
74
- ## Column Auto Width
157
+ ### Set Column Width
158
+
159
+ ```ruby
160
+ worksheet.set_column(start_col, end_col, width = nil, format = nil)
161
+ # or
162
+ worksheet.set_column_width(col, width = 60)
163
+ # or
164
+ worksheet.set_columns_width(start_col, end_col, width = 60)
165
+ ```
166
+
167
+ ### Set Row Height
168
+ ```ruby
169
+ worksheet.set_row(row_num = 0, height = 30, format = nil)
170
+ ```
171
+
172
+ ### Column Auto Width
75
173
 
76
174
  Column authwidth only works for string values, because numbers may have custom formatting
77
175
 
@@ -94,7 +192,7 @@ File.open('./some_file.xlsx', 'wb') {|f| f.write(content) }
94
192
  ![fast_excel_auto_width](https://user-images.githubusercontent.com/26019/51788441-ba981300-21b0-11e9-9611-54dda78effcd.png)
95
193
 
96
194
 
97
- ## API
195
+ ### API
98
196
 
99
197
  This gem is FFI binding for libxlsxwriter C library with some syntax sugar. All original functions is avaliable, for example:
100
198
 
@@ -106,17 +204,29 @@ worksheet.activate
106
204
 
107
205
  Full libxlsxwriter documentation: [http://libxlsxwriter.github.io/](http://libxlsxwriter.github.io/)
108
206
 
109
- Helper Methods:
110
-
111
- * `FastExcel.open(filename = nil, constant_memory: false, default_format: {})` - open new workbook, if `filename` is nil - it will create tmp file, `default_format` will be called with `workbook.default_format.set(...)`
112
- * `FastExcel.date_num(time, offset = nil)` - generate Excel's internal date value, number of days since 1900-Jan-01, works faster then creating `Libxlsxwriter::Datetime` struct. `offset` argument is number hours from UTC, e.g. `3.5`
113
- * `FastExcel.print_ffi_obj(object)` - print FFI object fields, just for debugging
114
- * `workbook.bold_cell_format` - shortcut for creating bold format
115
- * `workbook.number_format(num_format)` - create number or date format, for money usually: `"#,##0.00"`, for date: `"[$-409]m/d/yy h:mm AM/PM;@"`
116
- * `workbook.read_string` - close workbook, read file to string, delete file (only if tmp file)
117
- * `workbook.remove_tmp_file` - delete tmp file (only if tmp file)
118
- * `worksheet.write_row(row_num, array_of_mixed_value, formats = nil)` - write values one by one, detecting type automatically. `formats` can be array, or Format object or nil
119
- * `format.font_family` - alias for `format.font_name`
120
- * `workbook.default_format.font_size` - set it to 0 if you want to use default font size (that what user set in Excel settings)
121
- * `worksheet.write_row(num, values_array, formats = nil)` - Write row of values
122
- * `worksheet.append_row(values_array, formats = nil)` - Append row of values ot the bottom of worksheet
207
+ Generated rdoc: [rubydoc.info/github/Paxa/fast_excel](https://www.rubydoc.info/github/Paxa/fast_excel)
208
+
209
+ ## Benchmarks
210
+
211
+ 1000 rows:
212
+ ```
213
+ Comparison:
214
+ FastExcel: 31.7 i/s
215
+ Axlsx: 8.0 i/s - 3.98x slower
216
+ write_xlsx: 6.9 i/s - 4.62x slower
217
+ ```
218
+
219
+ 20000 rows:
220
+ ```
221
+ Comparison:
222
+ FastExcel: 1.4 i/s
223
+ Axlsx: 0.4 i/s - 3.46x slower
224
+ write_xlsx: 0.1 i/s - 17.04x slower
225
+ ```
226
+
227
+ Max memory usage, generating 100k rows:
228
+ ```
229
+ FastExcel - 20 MB
230
+ Axlsx - 60 MB
231
+ write_xlsx - 100 MB
232
+ ```