fast_excel 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +8 -4
- data/benchmarks/1k_rows.rb +3 -3
- data/benchmarks/20k_rows.rb +2 -2
- data/benchmarks/init.rb +3 -3
- data/benchmarks/memory.rb +6 -6
- data/examples/example.rb +4 -3
- data/examples/example_chart.rb +3 -2
- data/examples/example_formula.rb +20 -0
- data/examples/example_image.rb +3 -2
- data/fast_excel.gemspec +1 -1
- data/lib/fast_excel.rb +85 -5
- data/lib/fast_excel/binding.rb +0 -39
- data/lib/fast_excel/binding/worksheet.rb +68 -28
- data/test/tmpfile_test.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac39efd3391a98291ae2c1f5ba4102850b8ad678
|
4
|
+
data.tar.gz: 7d2eb11896d20f80f20405778b009e09ac1b41ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae26296476e89298ff1d584ae59e87e81f46a118e0c7583f5328fb12845afe970e1fe040c8783388e541d3b4077948957cec5923cd124d325475629e5272c495
|
7
|
+
data.tar.gz: 921ca060bf7cb21c541dc0664767a13d5f95be2f76d7947c24e2677133c06cc21d558f925e372b4d49f4fc56977650a13c876883e3b0f3850ba2f4953ab565a5
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Ultra Fast Excel Writter for Ruby
|
2
2
|
|
3
3
|
```ruby
|
4
|
+
require 'fast_excel'
|
5
|
+
|
4
6
|
workbook = FastExcel.open("hello_world_ffi.xlsx", constant_memory: true)
|
5
7
|
workbook.default_format.set(
|
6
8
|
font_size: 0, # user's default
|
@@ -24,6 +26,8 @@ for i in 1..1000
|
|
24
26
|
worksheet.write_row(i, ["Hello", (rand * 10_000_000).round(2), Time.now])
|
25
27
|
end
|
26
28
|
|
29
|
+
worksheet.write_row(1001, ["Sum", FastExcel::Formula.new("SUM(B2:B1001)")], bold)
|
30
|
+
|
27
31
|
workbook.close
|
28
32
|
```
|
29
33
|
|
@@ -35,7 +39,7 @@ This repositiry and gem contain sources of [libxlsxwriter](https://github.com/jm
|
|
35
39
|
```
|
36
40
|
Comparison:
|
37
41
|
FastExcel: 31.7 i/s
|
38
|
-
|
42
|
+
Axlsx: 8.0 i/s - 3.98x slower
|
39
43
|
write_xlsx: 6.9 i/s - 4.62x slower
|
40
44
|
```
|
41
45
|
|
@@ -43,15 +47,15 @@ Comparison:
|
|
43
47
|
```
|
44
48
|
Comparison:
|
45
49
|
FastExcel: 1.4 i/s
|
46
|
-
|
50
|
+
Axlsx: 0.4 i/s - 3.46x slower
|
47
51
|
write_xlsx: 0.1 i/s - 17.04x slower
|
48
52
|
```
|
49
53
|
|
50
54
|
Max memory usage, generating 100k rows:
|
51
55
|
```
|
52
56
|
FastExcel - 20 MB
|
53
|
-
|
54
|
-
|
57
|
+
Axlsx - 60 MB
|
58
|
+
write_xlsx - 100 MB
|
55
59
|
```
|
56
60
|
|
57
61
|
## Install
|
data/benchmarks/1k_rows.rb
CHANGED
@@ -21,8 +21,8 @@ Benchmark.ips do |x|
|
|
21
21
|
workbook.read_string
|
22
22
|
end
|
23
23
|
|
24
|
-
x.report("
|
25
|
-
filename = "#{Dir.mktmpdir}/
|
24
|
+
x.report("Axlsx") do
|
25
|
+
filename = "#{Dir.mktmpdir}/axlsx.xlsx"
|
26
26
|
Axlsx::Package.new do |package|
|
27
27
|
package.use_autowidth = false
|
28
28
|
package.workbook.add_worksheet do |sheet|
|
@@ -38,7 +38,7 @@ Benchmark.ips do |x|
|
|
38
38
|
end
|
39
39
|
|
40
40
|
x.report("write_xlsx") do
|
41
|
-
filename = "#{Dir.mktmpdir}/write_xlsx.
|
41
|
+
filename = "#{Dir.mktmpdir}/write_xlsx.xlsx"
|
42
42
|
workbook = WriteXLSX.new(filename)
|
43
43
|
worksheet = workbook.add_worksheet
|
44
44
|
HEADERS.each_with_index do |value, i|
|
data/benchmarks/20k_rows.rb
CHANGED
data/benchmarks/init.rb
CHANGED
@@ -24,7 +24,7 @@ def write_fast_excel_20k
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def write_xlsx_20k
|
27
|
-
filename = "#{Dir.mktmpdir}/write_xlsx.
|
27
|
+
filename = "#{Dir.mktmpdir}/write_xlsx.xlsx"
|
28
28
|
workbook = WriteXLSX.new(filename)
|
29
29
|
worksheet = workbook.add_worksheet
|
30
30
|
HEADERS.each_with_index do |value, i|
|
@@ -42,8 +42,8 @@ def write_xlsx_20k
|
|
42
42
|
File.delete(filename)
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
46
|
-
filename = "#{Dir.mktmpdir}/
|
45
|
+
def write_axlsx_20k
|
46
|
+
filename = "#{Dir.mktmpdir}/axlsx.xlsx"
|
47
47
|
Axlsx::Package.new do |package|
|
48
48
|
package.use_autowidth = false
|
49
49
|
package.workbook.add_worksheet do |sheet|
|
data/benchmarks/memory.rb
CHANGED
@@ -9,11 +9,11 @@ end
|
|
9
9
|
|
10
10
|
puts "warm up..."
|
11
11
|
write_fast_excel_20k
|
12
|
-
|
12
|
+
write_axlsx_20k
|
13
13
|
write_xlsx_20k
|
14
14
|
|
15
15
|
DATA.clear
|
16
|
-
|
16
|
+
50_000.times do |n|
|
17
17
|
DATA << [n, "String string #{n}" * 5, (n * rand * 10).round, Time.at(n * 1000 + 1492922688), n * 100]
|
18
18
|
end
|
19
19
|
|
@@ -37,13 +37,13 @@ end
|
|
37
37
|
GC.start
|
38
38
|
sleep 5
|
39
39
|
|
40
|
-
measure_memory("
|
41
|
-
|
40
|
+
measure_memory("Axlsx") do
|
41
|
+
write_axlsx_20k
|
42
42
|
end
|
43
43
|
|
44
44
|
GC.start
|
45
45
|
sleep 5
|
46
46
|
|
47
|
-
measure_memory("
|
48
|
-
|
47
|
+
measure_memory("write_xlsx") do
|
48
|
+
write_xlsx_20k
|
49
49
|
end
|
data/examples/example.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative '../lib/fast_excel'
|
2
2
|
require 'pp'
|
3
3
|
|
4
|
-
workbook = FastExcel.open("
|
4
|
+
workbook = FastExcel.open("example.xlsx", constant_memory: true)
|
5
5
|
|
6
6
|
workbook.default_format.set(
|
7
7
|
font_size: 0, # user's default
|
@@ -39,4 +39,5 @@ for i in 1..1000
|
|
39
39
|
# worksheet.write_datetime(i, 2, date, nil)
|
40
40
|
end
|
41
41
|
|
42
|
-
workbook.close
|
42
|
+
workbook.close
|
43
|
+
puts "Saved to file example.xlsx"
|
data/examples/example_chart.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative '../lib/fast_excel'
|
2
2
|
|
3
|
-
workbook = FastExcel.open("
|
3
|
+
workbook = FastExcel.open("example_chart.xlsx", constant_memory: true)
|
4
4
|
worksheet = workbook.add_worksheet
|
5
5
|
|
6
6
|
for i in 0..5
|
@@ -18,3 +18,4 @@ chart.add_series("Montgomery", "Sheet1!$C$1:$C$5")
|
|
18
18
|
worksheet.insert_chart(1, 7, chart)
|
19
19
|
|
20
20
|
workbook.close
|
21
|
+
puts "Saved to file example_chart.xlsx"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../lib/fast_excel'
|
2
|
+
require 'pp'
|
3
|
+
require 'looksee'
|
4
|
+
|
5
|
+
workbook = FastExcel.open("example_formula.xlsx", constant_memory: false)
|
6
|
+
|
7
|
+
worksheet = workbook.add_worksheet
|
8
|
+
|
9
|
+
worksheet.write_row(0, ["Item", "Weight"])
|
10
|
+
worksheet.write_row(1, ["Laptop", 1.37])
|
11
|
+
worksheet.write_row(2, ["Phone", 0.138])
|
12
|
+
worksheet.write_row(3, ["Mouse", 0.099])
|
13
|
+
worksheet.write_row(4, ["Speaker", 2.5])
|
14
|
+
worksheet.write_row(5, ["Camera", 0.383])
|
15
|
+
worksheet.write_row(6, ["Total", FastExcel::Formula.new("SUM(B2:B6)")], workbook.bold_cell_format)
|
16
|
+
|
17
|
+
bold = workbook.bold_cell_format
|
18
|
+
|
19
|
+
workbook.close
|
20
|
+
puts "Saved to file example_formula.xlsx"
|
data/examples/example_image.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative '../lib/fast_excel'
|
2
2
|
|
3
|
-
workbook = FastExcel.open("
|
3
|
+
workbook = FastExcel.open("example_image.xlsx", constant_memory: false)
|
4
4
|
worksheet = workbook.add_worksheet
|
5
5
|
|
6
6
|
img_options = Libxlsxwriter::ImageOptions.new
|
@@ -10,3 +10,4 @@ img_options[:y_offset] = 0
|
|
10
10
|
worksheet.insert_image_opt(3, 3, "libxlsxwriter/examples/logo.png", img_options)
|
11
11
|
|
12
12
|
workbook.close
|
13
|
+
puts "Saved to file example_image.xlsx"
|
data/fast_excel.gemspec
CHANGED
data/lib/fast_excel.rb
CHANGED
@@ -1,13 +1,21 @@
|
|
1
1
|
require_relative './fast_excel/binding'
|
2
2
|
|
3
3
|
module FastExcel
|
4
|
+
|
5
|
+
class Formula
|
6
|
+
attr_accessor :fml
|
7
|
+
def initialize(fml)
|
8
|
+
@fml = fml
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
4
12
|
DEF_COL_WIDTH = 8.43
|
5
13
|
|
6
14
|
def self.open(filename = nil, constant_memory: false, default_format: nil)
|
7
15
|
tmp_file = false
|
8
16
|
unless filename
|
9
17
|
require 'tmpdir'
|
10
|
-
filename = "#{Dir.mktmpdir}/fast_excel.
|
18
|
+
filename = "#{Dir.mktmpdir}/fast_excel.xlsx"
|
11
19
|
tmp_file = true
|
12
20
|
end
|
13
21
|
|
@@ -86,17 +94,20 @@ module FastExcel
|
|
86
94
|
def self.print_ffi_obj(value)
|
87
95
|
puts "#{value.class}"
|
88
96
|
value.members.each do |key|
|
89
|
-
field_val = if value[key].is_a?(FFI::Pointer) && value[key].null?
|
97
|
+
field_val = if value[key].is_a?(FFI::Pointer) && value[key].null? || value[key].nil?
|
90
98
|
"nil"
|
91
99
|
elsif value[key].is_a?(FFI::StructLayout::CharArray)
|
92
100
|
value[key].to_str.inspect
|
93
101
|
elsif value[key].is_a?(String)
|
94
102
|
value[key].inspect
|
103
|
+
elsif value[key].is_a?(Symbol)
|
104
|
+
value[key].inspect
|
95
105
|
else
|
96
106
|
value[key]
|
97
107
|
end
|
98
108
|
puts "* #{key}: #{field_val}"
|
99
109
|
end
|
110
|
+
nil
|
100
111
|
end
|
101
112
|
|
102
113
|
module AttributeHelper
|
@@ -110,12 +121,17 @@ module FastExcel
|
|
110
121
|
end
|
111
122
|
end
|
112
123
|
|
113
|
-
def
|
124
|
+
def fields_hash
|
114
125
|
res = {}
|
115
126
|
members.each do |key|
|
127
|
+
#p [key, self[key]]
|
116
128
|
res[key] = respond_to?(key) ? send(key) : self[key]
|
117
129
|
end
|
118
|
-
|
130
|
+
res
|
131
|
+
end
|
132
|
+
|
133
|
+
def pretty_print(pp)
|
134
|
+
pp fields_hash
|
119
135
|
end
|
120
136
|
end
|
121
137
|
|
@@ -180,6 +196,8 @@ module FastExcel
|
|
180
196
|
write_datetime(row_number, index, FastExcel.lxw_datetime(value), format)
|
181
197
|
elsif value.is_a?(Time)
|
182
198
|
write_datetime(row_number, index, FastExcel.lxw_time(value), format)
|
199
|
+
elsif value.is_a?(Formula)
|
200
|
+
write_formula(row_number, index, value.fml, format)
|
183
201
|
else
|
184
202
|
write_string(row_number, index, value.to_s, format)
|
185
203
|
end
|
@@ -234,6 +252,60 @@ module FastExcel
|
|
234
252
|
self.font_name = value
|
235
253
|
end
|
236
254
|
end
|
255
|
+
|
256
|
+
module RowExt
|
257
|
+
include AttributeHelper
|
258
|
+
|
259
|
+
def inspect
|
260
|
+
attr_str = fields_hash.map do |key, val|
|
261
|
+
"@#{key}=#{val.inspect}"
|
262
|
+
end
|
263
|
+
"<Libxlsxwriter::Row #{attr_str.join(" ")}>"
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
module CellExt
|
268
|
+
include AttributeHelper
|
269
|
+
|
270
|
+
def value
|
271
|
+
if self[:type] == :number_cell
|
272
|
+
self[:u][:number]
|
273
|
+
elsif self[:type] == :string_cell
|
274
|
+
pointer = self[:u][:string]
|
275
|
+
p pointer
|
276
|
+
pointer.null? ? nil : pointer.to_ptr.read_string
|
277
|
+
else
|
278
|
+
self[:user_data1]
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
def user_data1
|
283
|
+
value
|
284
|
+
#self[:user_data1] && !self[:user_data1].null? ? self[:user_data1].to_ptr.read_string : nil
|
285
|
+
end
|
286
|
+
|
287
|
+
def user_data2
|
288
|
+
self[:user_data2] #&& !self[:user_data2].null? ? self[:user_data2].to_ptr.read_string : nil
|
289
|
+
end
|
290
|
+
|
291
|
+
def sst_string
|
292
|
+
self[:sst_string] #&& !self[:sst_string].null? ? self[:sst_string].to_ptr.read_string : nil
|
293
|
+
end
|
294
|
+
|
295
|
+
#def inspect
|
296
|
+
# attr_str = fields_hash.map do |key, val|
|
297
|
+
# "@#{key}=#{val.inspect}"
|
298
|
+
# end
|
299
|
+
# "<Libxlsxwriter::Row #{attr_str.join(" ")}>"
|
300
|
+
#end
|
301
|
+
|
302
|
+
def inspect
|
303
|
+
attr_str = fields_hash.map do |key, val|
|
304
|
+
"@#{key}=#{val.inspect}"
|
305
|
+
end
|
306
|
+
"<Libxlsxwriter::Row #{attr_str.join(" ")}>"
|
307
|
+
end
|
308
|
+
end
|
237
309
|
end
|
238
310
|
|
239
311
|
Libxlsxwriter::Workbook.instance_eval do
|
@@ -246,4 +318,12 @@ end
|
|
246
318
|
|
247
319
|
Libxlsxwriter::Worksheet.instance_eval do
|
248
320
|
include FastExcel::WorksheetExt
|
249
|
-
end
|
321
|
+
end
|
322
|
+
|
323
|
+
Libxlsxwriter::Row.instance_eval do
|
324
|
+
include FastExcel::RowExt
|
325
|
+
end
|
326
|
+
|
327
|
+
Libxlsxwriter::Cell.instance_eval do
|
328
|
+
include FastExcel::CellExt
|
329
|
+
end
|
data/lib/fast_excel/binding.rb
CHANGED
@@ -1066,45 +1066,6 @@ module Libxlsxwriter
|
|
1066
1066
|
:show_all, 3
|
1067
1067
|
]
|
1068
1068
|
|
1069
|
-
# <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:cell_types).</em>
|
1070
|
-
#
|
1071
|
-
# === Options:
|
1072
|
-
# :number_cell ::
|
1073
|
-
#
|
1074
|
-
# :string_cell ::
|
1075
|
-
#
|
1076
|
-
# :inline_string_cell ::
|
1077
|
-
#
|
1078
|
-
# :formula_cell ::
|
1079
|
-
#
|
1080
|
-
# :array_formula_cell ::
|
1081
|
-
#
|
1082
|
-
# :blank_cell ::
|
1083
|
-
#
|
1084
|
-
# :boolean_cell ::
|
1085
|
-
#
|
1086
|
-
# :hyperlink_url ::
|
1087
|
-
#
|
1088
|
-
# :hyperlink_internal ::
|
1089
|
-
#
|
1090
|
-
# :hyperlink_external ::
|
1091
|
-
#
|
1092
|
-
#
|
1093
|
-
# @method _enum_cell_types_
|
1094
|
-
# @return [Symbol]
|
1095
|
-
# @scope class
|
1096
|
-
enum :cell_types, [
|
1097
|
-
:number_cell, 1,
|
1098
|
-
:string_cell, 2,
|
1099
|
-
:inline_string_cell, 3,
|
1100
|
-
:formula_cell, 4,
|
1101
|
-
:array_formula_cell, 5,
|
1102
|
-
:blank_cell, 6,
|
1103
|
-
:boolean_cell, 7,
|
1104
|
-
:hyperlink_url, 8,
|
1105
|
-
:hyperlink_internal, 9,
|
1106
|
-
:hyperlink_external, 10
|
1107
|
-
]
|
1108
1069
|
|
1109
1070
|
# <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:pane_types).</em>
|
1110
1071
|
#
|
@@ -656,7 +656,7 @@ module Libxlsxwriter
|
|
656
656
|
# @param [Integer] row_num
|
657
657
|
# @return [Row]
|
658
658
|
def find_row(row_num)
|
659
|
-
Row.new
|
659
|
+
Row.new(Libxlsxwriter.worksheet_find_row(self, row_num))
|
660
660
|
end
|
661
661
|
end
|
662
662
|
|
@@ -847,7 +847,7 @@ module Libxlsxwriter
|
|
847
847
|
# :tree_pointers ::
|
848
848
|
# (RowTreePointers)
|
849
849
|
class Row < FFI::Struct
|
850
|
-
layout :row_num, :
|
850
|
+
layout :row_num, :uint32,
|
851
851
|
:height, :double,
|
852
852
|
:format, Format,
|
853
853
|
:hidden, :uchar,
|
@@ -860,6 +860,46 @@ module Libxlsxwriter
|
|
860
860
|
:tree_pointers, RowTreePointers.by_value
|
861
861
|
end
|
862
862
|
|
863
|
+
# <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:cell_types).</em>
|
864
|
+
#
|
865
|
+
# === Options:
|
866
|
+
# :number_cell ::
|
867
|
+
#
|
868
|
+
# :string_cell ::
|
869
|
+
#
|
870
|
+
# :inline_string_cell ::
|
871
|
+
#
|
872
|
+
# :formula_cell ::
|
873
|
+
#
|
874
|
+
# :array_formula_cell ::
|
875
|
+
#
|
876
|
+
# :blank_cell ::
|
877
|
+
#
|
878
|
+
# :boolean_cell ::
|
879
|
+
#
|
880
|
+
# :hyperlink_url ::
|
881
|
+
#
|
882
|
+
# :hyperlink_internal ::
|
883
|
+
#
|
884
|
+
# :hyperlink_external ::
|
885
|
+
#
|
886
|
+
#
|
887
|
+
# @method _enum_cell_types_
|
888
|
+
# @return [Symbol]
|
889
|
+
# @scope class
|
890
|
+
enum :cell_types, [
|
891
|
+
:number_cell, 1,
|
892
|
+
:string_cell, 2,
|
893
|
+
:inline_string_cell, 3,
|
894
|
+
:formula_cell, 4,
|
895
|
+
:array_formula_cell, 5,
|
896
|
+
:blank_cell, 6,
|
897
|
+
:boolean_cell, 7,
|
898
|
+
:hyperlink_url, 8,
|
899
|
+
:hyperlink_internal, 9,
|
900
|
+
:hyperlink_external, 10
|
901
|
+
]
|
902
|
+
|
863
903
|
# = Fields:
|
864
904
|
# :number ::
|
865
905
|
# (Float)
|
@@ -870,7 +910,7 @@ module Libxlsxwriter
|
|
870
910
|
class CellU < FFI::Union
|
871
911
|
layout :number, :double,
|
872
912
|
:string_id, :int,
|
873
|
-
:string, :
|
913
|
+
:string, :pointer
|
874
914
|
end
|
875
915
|
|
876
916
|
# = Fields:
|
@@ -911,15 +951,15 @@ module Libxlsxwriter
|
|
911
951
|
# :tree_pointers ::
|
912
952
|
# (CellTreePointers)
|
913
953
|
class Cell < FFI::Struct
|
914
|
-
layout :row_num, :
|
915
|
-
:col_num, :
|
954
|
+
layout :row_num, :uint32,
|
955
|
+
:col_num, :uint16,
|
916
956
|
:type, :cell_types,
|
917
|
-
:format,
|
957
|
+
:format, :pointer,
|
918
958
|
:u, CellU.by_value,
|
919
959
|
:formula_result, :double,
|
920
|
-
:user_data1, :
|
921
|
-
:user_data2, :
|
922
|
-
:sst_string, :
|
960
|
+
:user_data1, :pointer,
|
961
|
+
:user_data2, :pointer,
|
962
|
+
:sst_string, :pointer,
|
923
963
|
:tree_pointers, CellTreePointers.by_value
|
924
964
|
end
|
925
965
|
|
@@ -931,7 +971,7 @@ module Libxlsxwriter
|
|
931
971
|
# @param [Format] format
|
932
972
|
# @return [Symbol from _enum_error_]
|
933
973
|
# @scope class
|
934
|
-
attach_function :worksheet_write_number, :worksheet_write_number, [Worksheet, :
|
974
|
+
attach_function :worksheet_write_number, :worksheet_write_number, [Worksheet, :uint32, :ushort, :double, Format], :error
|
935
975
|
|
936
976
|
# @method worksheet_write_string(worksheet, row, col, string, format)
|
937
977
|
# @param [Worksheet] worksheet
|
@@ -941,7 +981,7 @@ module Libxlsxwriter
|
|
941
981
|
# @param [Format] format
|
942
982
|
# @return [Symbol from _enum_error_]
|
943
983
|
# @scope class
|
944
|
-
attach_function :worksheet_write_string, :worksheet_write_string, [Worksheet, :
|
984
|
+
attach_function :worksheet_write_string, :worksheet_write_string, [Worksheet, :uint32, :ushort, :string, Format], :error
|
945
985
|
|
946
986
|
# @method worksheet_write_formula(worksheet, row, col, formula, format)
|
947
987
|
# @param [Worksheet] worksheet
|
@@ -951,7 +991,7 @@ module Libxlsxwriter
|
|
951
991
|
# @param [Format] format
|
952
992
|
# @return [Symbol from _enum_error_]
|
953
993
|
# @scope class
|
954
|
-
attach_function :worksheet_write_formula, :worksheet_write_formula, [Worksheet, :
|
994
|
+
attach_function :worksheet_write_formula, :worksheet_write_formula, [Worksheet, :uint32, :ushort, :string, Format], :error
|
955
995
|
|
956
996
|
# @method worksheet_write_array_formula(worksheet, first_row, first_col, last_row, last_col, formula, format)
|
957
997
|
# @param [Worksheet] worksheet
|
@@ -963,7 +1003,7 @@ module Libxlsxwriter
|
|
963
1003
|
# @param [Format] format
|
964
1004
|
# @return [Symbol from _enum_error_]
|
965
1005
|
# @scope class
|
966
|
-
attach_function :worksheet_write_array_formula, :worksheet_write_array_formula, [Worksheet, :
|
1006
|
+
attach_function :worksheet_write_array_formula, :worksheet_write_array_formula, [Worksheet, :uint32, :ushort, :uint, :ushort, :string, Format], :error
|
967
1007
|
|
968
1008
|
# @method worksheet_write_array_formula_num(worksheet, first_row, first_col, last_row, last_col, formula, format, result)
|
969
1009
|
# @param [Worksheet] worksheet
|
@@ -976,7 +1016,7 @@ module Libxlsxwriter
|
|
976
1016
|
# @param [Float] result
|
977
1017
|
# @return [Symbol from _enum_error_]
|
978
1018
|
# @scope class
|
979
|
-
attach_function :worksheet_write_array_formula_num, :worksheet_write_array_formula_num, [Worksheet, :
|
1019
|
+
attach_function :worksheet_write_array_formula_num, :worksheet_write_array_formula_num, [Worksheet, :uint32, :ushort, :uint, :ushort, :string, Format, :double], :error
|
980
1020
|
|
981
1021
|
# @method worksheet_write_datetime(worksheet, row, col, datetime, format)
|
982
1022
|
# @param [Worksheet] worksheet
|
@@ -986,7 +1026,7 @@ module Libxlsxwriter
|
|
986
1026
|
# @param [Format] format
|
987
1027
|
# @return [Symbol from _enum_error_]
|
988
1028
|
# @scope class
|
989
|
-
attach_function :worksheet_write_datetime, :worksheet_write_datetime, [Worksheet, :
|
1029
|
+
attach_function :worksheet_write_datetime, :worksheet_write_datetime, [Worksheet, :uint32, :ushort, Datetime, Format], :error
|
990
1030
|
|
991
1031
|
# @method worksheet_write_url_opt(worksheet, row_num, col_num, url, format, string, tooltip)
|
992
1032
|
# @param [Worksheet] worksheet
|
@@ -998,7 +1038,7 @@ module Libxlsxwriter
|
|
998
1038
|
# @param [String] tooltip
|
999
1039
|
# @return [Symbol from _enum_error_]
|
1000
1040
|
# @scope class
|
1001
|
-
attach_function :worksheet_write_url_opt, :worksheet_write_url_opt, [Worksheet, :
|
1041
|
+
attach_function :worksheet_write_url_opt, :worksheet_write_url_opt, [Worksheet, :uint32, :ushort, :string, Format, :string, :string], :error
|
1002
1042
|
|
1003
1043
|
# @method worksheet_write_url(worksheet, row, col, url, format)
|
1004
1044
|
# @param [Worksheet] worksheet
|
@@ -1008,7 +1048,7 @@ module Libxlsxwriter
|
|
1008
1048
|
# @param [Format] format
|
1009
1049
|
# @return [Symbol from _enum_error_]
|
1010
1050
|
# @scope class
|
1011
|
-
attach_function :worksheet_write_url, :worksheet_write_url, [Worksheet, :
|
1051
|
+
attach_function :worksheet_write_url, :worksheet_write_url, [Worksheet, :uint32, :ushort, :string, Format], :error
|
1012
1052
|
|
1013
1053
|
# @method worksheet_write_boolean(worksheet, row, col, value, format)
|
1014
1054
|
# @param [Worksheet] worksheet
|
@@ -1018,7 +1058,7 @@ module Libxlsxwriter
|
|
1018
1058
|
# @param [Format] format
|
1019
1059
|
# @return [Symbol from _enum_error_]
|
1020
1060
|
# @scope class
|
1021
|
-
attach_function :worksheet_write_boolean, :worksheet_write_boolean, [Worksheet, :
|
1061
|
+
attach_function :worksheet_write_boolean, :worksheet_write_boolean, [Worksheet, :uint32, :ushort, :int, Format], :error
|
1022
1062
|
|
1023
1063
|
# @method worksheet_write_blank(worksheet, row, col, format)
|
1024
1064
|
# @param [Worksheet] worksheet
|
@@ -1027,7 +1067,7 @@ module Libxlsxwriter
|
|
1027
1067
|
# @param [Format] format
|
1028
1068
|
# @return [Symbol from _enum_error_]
|
1029
1069
|
# @scope class
|
1030
|
-
attach_function :worksheet_write_blank, :worksheet_write_blank, [Worksheet, :
|
1070
|
+
attach_function :worksheet_write_blank, :worksheet_write_blank, [Worksheet, :uint32, :ushort, Format], :error
|
1031
1071
|
|
1032
1072
|
# @method worksheet_write_formula_num(worksheet, row, col, formula, format, result)
|
1033
1073
|
# @param [Worksheet] worksheet
|
@@ -1038,7 +1078,7 @@ module Libxlsxwriter
|
|
1038
1078
|
# @param [Float] result
|
1039
1079
|
# @return [Symbol from _enum_error_]
|
1040
1080
|
# @scope class
|
1041
|
-
attach_function :worksheet_write_formula_num, :worksheet_write_formula_num, [Worksheet, :
|
1081
|
+
attach_function :worksheet_write_formula_num, :worksheet_write_formula_num, [Worksheet, :uint32, :ushort, :string, Format, :double], :error
|
1042
1082
|
|
1043
1083
|
# @method worksheet_set_row(worksheet, row, height, format)
|
1044
1084
|
# @param [Worksheet] worksheet
|
@@ -1047,7 +1087,7 @@ module Libxlsxwriter
|
|
1047
1087
|
# @param [Format] format
|
1048
1088
|
# @return [Symbol from _enum_error_]
|
1049
1089
|
# @scope class
|
1050
|
-
attach_function :worksheet_set_row, :worksheet_set_row, [Worksheet, :
|
1090
|
+
attach_function :worksheet_set_row, :worksheet_set_row, [Worksheet, :uint32, :double, Format], :error
|
1051
1091
|
|
1052
1092
|
# @method worksheet_set_row_opt(worksheet, row, height, format, options)
|
1053
1093
|
# @param [Worksheet] worksheet
|
@@ -1057,7 +1097,7 @@ module Libxlsxwriter
|
|
1057
1097
|
# @param [RowColOptions] options
|
1058
1098
|
# @return [Symbol from _enum_error_]
|
1059
1099
|
# @scope class
|
1060
|
-
attach_function :worksheet_set_row_opt, :worksheet_set_row_opt, [Worksheet, :
|
1100
|
+
attach_function :worksheet_set_row_opt, :worksheet_set_row_opt, [Worksheet, :uint32, :double, Format, RowColOptions], :error
|
1061
1101
|
|
1062
1102
|
# @method worksheet_set_column(worksheet, first_col, last_col, width, format)
|
1063
1103
|
# @param [Worksheet] worksheet
|
@@ -1087,7 +1127,7 @@ module Libxlsxwriter
|
|
1087
1127
|
# @param [String] filename
|
1088
1128
|
# @return [Symbol from _enum_error_]
|
1089
1129
|
# @scope class
|
1090
|
-
attach_function :worksheet_insert_image, :worksheet_insert_image, [Worksheet, :
|
1130
|
+
attach_function :worksheet_insert_image, :worksheet_insert_image, [Worksheet, :uint32, :ushort, :string], :error
|
1091
1131
|
|
1092
1132
|
# @method worksheet_insert_image_opt(worksheet, row, col, filename, options)
|
1093
1133
|
# @param [Worksheet] worksheet
|
@@ -1097,7 +1137,7 @@ module Libxlsxwriter
|
|
1097
1137
|
# @param [ImageOptions] options
|
1098
1138
|
# @return [Symbol from _enum_error_]
|
1099
1139
|
# @scope class
|
1100
|
-
attach_function :worksheet_insert_image_opt, :worksheet_insert_image_opt, [Worksheet, :
|
1140
|
+
attach_function :worksheet_insert_image_opt, :worksheet_insert_image_opt, [Worksheet, :uint32, :ushort, :string, ImageOptions], :error
|
1101
1141
|
|
1102
1142
|
# @method worksheet_insert_chart(worksheet, row, col, chart)
|
1103
1143
|
# @param [Worksheet] worksheet
|
@@ -1106,7 +1146,7 @@ module Libxlsxwriter
|
|
1106
1146
|
# @param [Chart] chart
|
1107
1147
|
# @return [Symbol from _enum_error_]
|
1108
1148
|
# @scope class
|
1109
|
-
attach_function :worksheet_insert_chart, :worksheet_insert_chart, [Worksheet, :
|
1149
|
+
attach_function :worksheet_insert_chart, :worksheet_insert_chart, [Worksheet, :uint32, :ushort, Chart], :error
|
1110
1150
|
|
1111
1151
|
# @method worksheet_insert_chart_opt(worksheet, row, col, chart, user_options)
|
1112
1152
|
# @param [Worksheet] worksheet
|
@@ -1116,7 +1156,7 @@ module Libxlsxwriter
|
|
1116
1156
|
# @param [ImageOptions] user_options
|
1117
1157
|
# @return [Symbol from _enum_error_]
|
1118
1158
|
# @scope class
|
1119
|
-
attach_function :worksheet_insert_chart_opt, :worksheet_insert_chart_opt, [Worksheet, :
|
1159
|
+
attach_function :worksheet_insert_chart_opt, :worksheet_insert_chart_opt, [Worksheet, :uint32, :ushort, Chart, ImageOptions], :error
|
1120
1160
|
|
1121
1161
|
# @method worksheet_merge_range(worksheet, first_row, first_col, last_row, last_col, string, format)
|
1122
1162
|
# @param [Worksheet] worksheet
|
@@ -1128,7 +1168,7 @@ module Libxlsxwriter
|
|
1128
1168
|
# @param [Format] format
|
1129
1169
|
# @return [Symbol from _enum_error_]
|
1130
1170
|
# @scope class
|
1131
|
-
attach_function :worksheet_merge_range, :worksheet_merge_range, [Worksheet, :
|
1171
|
+
attach_function :worksheet_merge_range, :worksheet_merge_range, [Worksheet, :uint32, :ushort, :uint32, :ushort, :string, Format], :error
|
1132
1172
|
|
1133
1173
|
# @method worksheet_autofilter(worksheet, first_row, first_col, last_row, last_col)
|
1134
1174
|
# @param [Worksheet] worksheet
|
@@ -1458,7 +1498,7 @@ module Libxlsxwriter
|
|
1458
1498
|
# @param [Integer] row_num
|
1459
1499
|
# @return [Row]
|
1460
1500
|
# @scope class
|
1461
|
-
attach_function :worksheet_find_row, :lxw_worksheet_find_row, [Worksheet, :
|
1501
|
+
attach_function :worksheet_find_row, :lxw_worksheet_find_row, [Worksheet, :uint32], Row
|
1462
1502
|
|
1463
1503
|
# @method worksheet_find_cell(row, col_num)
|
1464
1504
|
# @param [Row] row
|
data/test/tmpfile_test.rb
CHANGED
@@ -6,7 +6,7 @@ describe "FastExcel" do
|
|
6
6
|
workbook = FastExcel.open(constant_memory: true)
|
7
7
|
|
8
8
|
assert(workbook.tmp_file)
|
9
|
-
assert_match(/fast_excel.
|
9
|
+
assert_match(/fast_excel.xlsx$/, workbook.filename)
|
10
10
|
|
11
11
|
result = workbook.read_string
|
12
12
|
assert(result.size > 1000)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fast_excel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Evstigneev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -39,6 +39,7 @@ extensions:
|
|
39
39
|
extra_rdoc_files: []
|
40
40
|
files:
|
41
41
|
- ".gitignore"
|
42
|
+
- CHANGELOG.md
|
42
43
|
- Gemfile
|
43
44
|
- Gemfile.lock
|
44
45
|
- Makefile
|
@@ -50,6 +51,7 @@ files:
|
|
50
51
|
- benchmarks/memory.rb
|
51
52
|
- examples/example.rb
|
52
53
|
- examples/example_chart.rb
|
54
|
+
- examples/example_formula.rb
|
53
55
|
- examples/example_image.rb
|
54
56
|
- extconf.rb
|
55
57
|
- fast_excel.gemspec
|