write_xlsx 0.0.2 → 0.0.3
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.
- data/README.rdoc +3 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/examples/formats.rb +498 -0
- data/lib/write_xlsx/chart.rb +15 -15
- data/lib/write_xlsx/chartsheet.rb +1 -1
- data/lib/write_xlsx/format.rb +10 -3
- data/lib/write_xlsx/package/comments.rb +171 -27
- data/lib/write_xlsx/package/packager.rb +8 -17
- data/lib/write_xlsx/package/shared_strings.rb +36 -15
- data/lib/write_xlsx/package/styles.rb +2 -12
- data/lib/write_xlsx/package/vml.rb +14 -22
- data/lib/write_xlsx/utility.rb +53 -4
- data/lib/write_xlsx/workbook.rb +21 -37
- data/lib/write_xlsx/worksheet.rb +533 -765
- data/test/helper.rb +10 -3
- data/test/package/comments/test_write_text_t.rb +1 -1
- data/test/package/shared_strings/test_shared_strings01.rb +3 -3
- data/test/package/shared_strings/test_shared_strings02.rb +3 -3
- data/test/package/shared_strings/test_write_sst.rb +3 -2
- data/test/package/vml/test_write_anchor.rb +1 -1
- data/test/package/vml/test_write_auto_fill.rb +1 -1
- data/test/package/vml/test_write_column.rb +1 -1
- data/test/package/vml/test_write_div.rb +1 -1
- data/test/package/vml/test_write_fill.rb +1 -1
- data/test/package/vml/test_write_idmap.rb +1 -1
- data/test/package/vml/test_write_move_with_cells.rb +1 -1
- data/test/package/vml/test_write_path.rb +2 -2
- data/test/package/vml/test_write_row.rb +1 -1
- data/test/package/vml/test_write_shadow.rb +1 -1
- data/test/package/vml/test_write_shapelayout.rb +1 -1
- data/test/package/vml/test_write_shapetype.rb +1 -1
- data/test/package/vml/test_write_size_with_cells.rb +1 -1
- data/test/package/vml/test_write_stroke.rb +1 -1
- data/test/package/vml/test_write_textbox.rb +1 -1
- data/test/perl_output/formats.xlsx +0 -0
- data/test/perl_output/indent.xlsx +0 -0
- data/test/perl_output/merge4.xlsx +0 -0
- data/test/perl_output/merge5.xlsx +0 -0
- data/test/test_example_match.rb +482 -0
- data/test/worksheet/test_repeat_formula.rb +5 -5
- data/test/worksheet/test_write_cell.rb +10 -5
- data/test/worksheet/test_write_legacy_drawing.rb +1 -1
- data/write_xlsx.gemspec +5 -5
- metadata +15 -15
- data/test/package/comments/test_comments01.rb +0 -36
- data/test/package/vml/test_vml_01.rb +0 -42
data/lib/write_xlsx/workbook.rb
CHANGED
@@ -15,13 +15,13 @@ module Writexlsx
|
|
15
15
|
|
16
16
|
include Writexlsx::Utility
|
17
17
|
|
18
|
-
attr_accessor :str_total, :str_unique
|
19
18
|
attr_writer :firstsheet
|
20
19
|
attr_reader :palette
|
21
20
|
attr_reader :font_count, :num_format_count, :border_count, :fill_count, :custom_colors
|
22
21
|
attr_reader :worksheets, :sheetnames, :charts, :drawings, :num_comment_files, :named_ranges
|
23
|
-
attr_reader :
|
22
|
+
attr_reader :doc_properties
|
24
23
|
attr_reader :image_types, :images
|
24
|
+
attr_reader :shared_strings
|
25
25
|
|
26
26
|
#
|
27
27
|
# A new Excel workbook is created using the new() constructor which accepts either a filename
|
@@ -101,10 +101,7 @@ module Writexlsx
|
|
101
101
|
@images = []
|
102
102
|
|
103
103
|
# Structures for the shared strings data.
|
104
|
-
@
|
105
|
-
@str_unique = 0
|
106
|
-
@str_table = {}
|
107
|
-
@str_array = []
|
104
|
+
@shared_strings = Package::SharedStrings.new
|
108
105
|
|
109
106
|
add_format(default_formats.merge(:xf_index => 0))
|
110
107
|
set_color_palette
|
@@ -209,7 +206,7 @@ module Writexlsx
|
|
209
206
|
def assemble_xml_file #:nodoc:
|
210
207
|
return unless @writer
|
211
208
|
|
212
|
-
# Prepare format object for passing to Style.
|
209
|
+
# Prepare format object for passing to Style.rb.
|
213
210
|
prepare_format_properties
|
214
211
|
|
215
212
|
write_xml_declaration
|
@@ -634,14 +631,15 @@ module Writexlsx
|
|
634
631
|
# return the string index.
|
635
632
|
#
|
636
633
|
def shared_string_index(str) #:nodoc:
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
634
|
+
@shared_strings.index(str)
|
635
|
+
end
|
636
|
+
|
637
|
+
def str_unique
|
638
|
+
@shared_strings.unique_count
|
639
|
+
end
|
642
640
|
|
643
|
-
|
644
|
-
@
|
641
|
+
def shared_strings_empty?
|
642
|
+
@shared_strings.empty?
|
645
643
|
end
|
646
644
|
|
647
645
|
def xf_formats # :nodoc:
|
@@ -755,7 +753,7 @@ module Writexlsx
|
|
755
753
|
end
|
756
754
|
|
757
755
|
# Check that sheet name is <= 31. Excel limit.
|
758
|
-
raise "Sheetname #{name} must be <=
|
756
|
+
raise "Sheetname #{name} must be <= #{SHEETNAME_MAX} chars" if name.length > SHEETNAME_MAX
|
759
757
|
|
760
758
|
# Check that sheetname doesn't contain any invalid characters
|
761
759
|
if name =~ invalid_char
|
@@ -869,7 +867,7 @@ module Writexlsx
|
|
869
867
|
str = @writer.start_tag('sheets')
|
870
868
|
id_num = 1
|
871
869
|
@worksheets.each do |sheet|
|
872
|
-
str << write_sheet(sheet.name, id_num, sheet.hidden)
|
870
|
+
str << write_sheet(sheet.name, id_num, sheet.hidden?)
|
873
871
|
id_num += 1
|
874
872
|
end
|
875
873
|
str << @writer.end_tag('sheets')
|
@@ -962,9 +960,6 @@ module Writexlsx
|
|
962
960
|
# Set the active sheet.
|
963
961
|
@worksheets.each { |sheet| sheet.activate if sheet.index == @activesheet }
|
964
962
|
|
965
|
-
# Convert the SST strings data structure.
|
966
|
-
prepare_sst_string_data
|
967
|
-
|
968
963
|
# Prepare the worksheet cell comments.
|
969
964
|
prepare_comments
|
970
965
|
|
@@ -992,20 +987,7 @@ module Writexlsx
|
|
992
987
|
end
|
993
988
|
|
994
989
|
#
|
995
|
-
#
|
996
|
-
#
|
997
|
-
def prepare_sst_string_data #:nodoc:
|
998
|
-
strings = []
|
999
|
-
|
1000
|
-
@str_table.each_key { |key| strings[@str_table[key]] = key }
|
1001
|
-
|
1002
|
-
# The SST data could be very large, free some memory (maybe).
|
1003
|
-
@str_table = nil
|
1004
|
-
@str_array = strings
|
1005
|
-
end
|
1006
|
-
|
1007
|
-
#
|
1008
|
-
# Prepare all of the format properties prior to passing them to Styles.pm.
|
990
|
+
# Prepare all of the format properties prior to passing them to Styles.rb.
|
1009
991
|
#
|
1010
992
|
def prepare_format_properties #:nodoc:
|
1011
993
|
# Separate format objects into XF and DXF formats.
|
@@ -1271,11 +1253,13 @@ module Writexlsx
|
|
1271
1253
|
next unless sheet.has_comments?
|
1272
1254
|
|
1273
1255
|
comment_id += 1
|
1274
|
-
|
1256
|
+
sheet.set_external_comment_links(comment_id)
|
1257
|
+
sheet.set_vml_data_id(vml_data_id)
|
1258
|
+
sheet.vml_shape_id = vml_shape_id
|
1275
1259
|
|
1276
1260
|
# Each VML file should start with a shape id incremented by 1024.
|
1277
|
-
vml_data_id += 1 * ( ( 1024 +
|
1278
|
-
vml_shape_id += 1024 * ( ( 1024 +
|
1261
|
+
vml_data_id += 1 * ( ( 1024 + sheet.comments_count ) / 1024.0 ).to_i
|
1262
|
+
vml_shape_id += 1024 * ( ( 1024 + sheet.comments_count ) / 1024.0 ).to_i
|
1279
1263
|
end
|
1280
1264
|
|
1281
1265
|
@num_comment_files = comment_id
|
@@ -1343,7 +1327,7 @@ module Writexlsx
|
|
1343
1327
|
# Convert shared string indexes to strings.
|
1344
1328
|
data.collect! do |token|
|
1345
1329
|
if token.kind_of?(Hash)
|
1346
|
-
token = @
|
1330
|
+
token = @shared_strings.string(token[:sst_id])
|
1347
1331
|
|
1348
1332
|
# Ignore rich strings for now. Deparse later if necessary.
|
1349
1333
|
token = '' if token =~ %r!^<r>! && token =~ %r!</r>$!
|