xlsx2latex 0.1.0.rc1

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 (33) hide show
  1. checksums.yaml +7 -0
  2. data/bin/readme.txt +51 -0
  3. data/bin/xlsx2latex.rb +127 -0
  4. data/examples/example_xlsx2latex.rb +64 -0
  5. data/lib/xlsx2latex.rb +15 -0
  6. data/lib/xlsx2latex/excel.rb +147 -0
  7. data/readme.rdoc +97 -0
  8. data/unittest/expected/generated_test_default_sheet.tex +9 -0
  9. data/unittest/expected/generated_test_sheet_data.tex +9 -0
  10. data/unittest/expected/generated_test_sheet_data_boolean.tex +9 -0
  11. data/unittest/expected/generated_test_sheet_data_date_format.tex +9 -0
  12. data/unittest/expected/generated_test_sheet_data_floatformat.tex +9 -0
  13. data/unittest/expected/generated_test_sheet_data_time_format.tex +9 -0
  14. data/unittest/expected/generated_test_sheet_format.tex +7 -0
  15. data/unittest/expected/generated_test_sheet_merged_areas.tex +17 -0
  16. data/unittest/expected/test_bin_boolean.tex +9 -0
  17. data/unittest/expected/test_bin_date.tex +9 -0
  18. data/unittest/expected/test_bin_default.tex +9 -0
  19. data/unittest/expected/test_bin_float.tex +9 -0
  20. data/unittest/expected/test_bin_select_sheet.tex +9 -0
  21. data/unittest/expected/test_bin_with_target.tex +8 -0
  22. data/unittest/expected/test_default_sheet.tex +10 -0
  23. data/unittest/expected/test_sheet1.tex +10 -0
  24. data/unittest/expected/test_sheet1_floatformat.tex +10 -0
  25. data/unittest/expected/test_sheet2.tex +14 -0
  26. data/unittest/test_bin.rb +75 -0
  27. data/unittest/test_generated_xlsx.rb +69 -0
  28. data/unittest/test_testdata_excel2latex.rb +51 -0
  29. data/unittest/testdata/generated.xlsx +0 -0
  30. data/unittest/testdata/make_testdata.rb +130 -0
  31. data/unittest/testdata/simple.xlsx +0 -0
  32. data/unittest/testdata/testdata_excel2latex.xlsx +0 -0
  33. metadata +159 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ea49d31ba3f4b764257870012ee60ff738e2d078
4
+ data.tar.gz: 8beaf03f180091d67940296105c9c9a48e2974f8
5
+ SHA512:
6
+ metadata.gz: f8b47ebfe48c09ab6e84418d629d2a084e14950fb2762e75dc799b49fbca3a6ff18a2c0f464fb0fdfa6a9365bafb393f7561a492cafd7d582e7a186f0b2b4521
7
+ data.tar.gz: 0f579ab3d52d1602783baccb87364edfdbe4d33400c639061605eb940a8724e4b757082130d0932b2495630fa55bc567d393f5d4135559338c86c3088201a712
@@ -0,0 +1,51 @@
1
+ xlsx2LaTeX
2
+ ===========
3
+ Convert Excel-sheets into LaTeX-tables.
4
+
5
+ You can take the LaTeX-table and continue with your work.
6
+
7
+ Some features:
8
+ * Formats for numbers, booleans, dates and times can be defined.
9
+ * Selection of datasheet is possible.
10
+
11
+ Usage: xlsx2latex.exe excelfile [OPTIONS]
12
+
13
+ Options
14
+ -t, --target TARGET target filename (default STDOUT)
15
+ -s, --sheet SHEET Source sheet in Excel
16
+ -f, --float FLOAT Format for floats
17
+ -d, --date DATE Format for dates
18
+ --time TIME Format for times
19
+ --true TRUE Format for true
20
+ --false FALSE Format for false
21
+ -h, --help help
22
+
23
+ ==Examples:
24
+ Write default data sheet as excel to stdout:
25
+ xlsx2latex my_excel.xlsx
26
+
27
+ Write sheet with name "DATA2" as excel to stdout:
28
+ xlsx2latex my_excel.xlsx -s DATA2
29
+
30
+ No decimals for all floats (numbers):
31
+ xlsx2latex my_excel.xlsx -f %.0f
32
+
33
+ Change data format (e.g. to "1. January 2015"):
34
+ xlsx2latex my_excel.xlsx -d "%d. %B %Y"
35
+
36
+ Change format for boolean values:
37
+ xlsx2latex my_excel.xlsx --true yes --false no
38
+
39
+ Not supported:
40
+ * xls-files [1]
41
+ * deep control on text formats [2]
42
+ * select areas or specific columns for export [3]
43
+ * column specific formats [3]
44
+ * Detect number format of Excel and use it for the output [4]
45
+
46
+ remarks:
47
+ [1] maybe possible in future - not tested yet.
48
+ [2] Not planned in future
49
+ [3] Not planned yet, but on the todo list.
50
+ [4] Not realized, but wanted
51
+
@@ -0,0 +1,127 @@
1
+ #encoding: utf-8
2
+ #!/usr/bin/env
3
+ =begin rdoc
4
+ Gem XLSX2LaTeX: Convert excel-files to LaTeX-tabulars.
5
+ =end
6
+
7
+ require_relative '../lib/xlsx2latex'
8
+
9
+ require 'optparse'
10
+
11
+ options = {}
12
+
13
+ opt_parser = OptionParser.new do |opt|
14
+ opt.banner = "Usage: %s excelfile [OPTIONS]" % __FILE__
15
+ opt.separator ""
16
+ opt.separator "Options"
17
+
18
+ opt.on("-t","--target TARGET","target filename (default STDOUT)") do |target|
19
+ options[:target] = target
20
+ end
21
+
22
+ opt.on("-s","--sheet SHEET","Source sheet in Excel") do |sheet|
23
+ options[:sheet] = sheet
24
+ end
25
+
26
+ opt.on("-f","--float FLOAT","Format for floats") do |float|
27
+ options[:float] = float
28
+ end
29
+
30
+ opt.on("-d","--date DATE","Format for dates") do |date|
31
+ options[:date] = date
32
+ end
33
+
34
+ opt.on("--time TIME","Format for times") do |time|
35
+ options[:time] = time
36
+ end
37
+
38
+ opt.on("--true TRUE","Format for true") do |vtrue|
39
+ options[:true] = vtrue
40
+ end
41
+ opt.on("--false FALSE", "Format for false") do |vfalse|
42
+ options[:false] = vfalse
43
+ end
44
+
45
+ =begin
46
+ Generate missing options
47
+
48
+ no_format no_bold no_italics...
49
+ bool: text, surd...
50
+ all_sheets
51
+
52
+ =end
53
+ %w{}.each{|missing|
54
+ puts <<code % [missing[0], missing, missing.upcase, missing, missing, missing, missing]
55
+ opt.on("-%s","--%s %s","%s") do |%s|
56
+ options[:%s] = %s
57
+ end
58
+ code
59
+ }
60
+
61
+ opt.on("-h","--help","help") do
62
+ puts opt_parser
63
+ puts <<examples
64
+
65
+ ==Examples:
66
+ Write default data sheet as excel to stdout:
67
+ xlsx2latex my_excel.xlsx
68
+
69
+ Write sheet with name "DATA2" as excel to stdout:
70
+ xlsx2latex my_excel.xlsx -s DATA2
71
+
72
+ No decimals for all floats (numbers):
73
+ xlsx2latex my_excel.xlsx -f %.0f
74
+
75
+ Change data format (e.g. to "1. January 2015"):
76
+ xlsx2latex my_excel.xlsx -d "%d. %B %Y"
77
+
78
+ Change format for boolean values:
79
+ xlsx2latex my_excel.xlsx --true yes --false no
80
+
81
+ examples
82
+ exit
83
+ end
84
+ end
85
+
86
+ #Quick test
87
+ if $0 == __FILE__ and File.basename($0) == $0
88
+ ARGV << '../unittest/testdata/simple.xlsx' #source
89
+ #~ ARGV << '-t' << 'test.tex'
90
+ #~ ARGV << '-s' << 'DATA2'
91
+ #~ ARGV << '-f' << '%09.3f'
92
+ #~ ARGV << '--true' << 'yes'
93
+ #~ ARGV << '--false' << 'no'
94
+ #~ ARGV << '-d' << '%Y'
95
+ ARGV << '-h'
96
+ end
97
+
98
+ opt_parser.parse!
99
+ if ! ARGV[0]
100
+ puts "No Excel file given. Try %s -h for more information" % __FILE__
101
+ exit 1
102
+ end
103
+ if ! File.exist?(ARGV[0])
104
+ puts "Excel file %s not found" % ARGV[0]
105
+ exit 2
106
+ end
107
+
108
+ $excel = XLSX2LaTeX::Excel.new(ARGV[0])
109
+ texcode = $excel.to_latex(
110
+ sheetname: options[:sheet] || $excel.xlsx.default_sheet,
111
+ float_format: options[:float] || '%0.2f',
112
+ date_format: options[:date] || '%Y-%m-%d',
113
+ time_format: options[:time] || '%Y-%m-%d %H:%M',
114
+ bool_true: options[:true] || 'X',
115
+ bool_false: options[:false] || '-',
116
+ )
117
+
118
+ if options[:target]
119
+ File.open(options[:target], 'w:utf-8'){|f|
120
+ f << texcode
121
+ $excel.log.info("Created %s" % options[:target])
122
+ }
123
+ else
124
+ puts texcode
125
+ end
126
+
127
+ __END__
@@ -0,0 +1,64 @@
1
+ #encoding: utf-8
2
+ =begin rdoc
3
+ Example for usage of gem xlsx2latex
4
+ =end
5
+ $:.unshift('../lib')
6
+ require 'xlsx2latex'
7
+
8
+ require 'docgenerator'
9
+ require 'rake4latex'
10
+
11
+ =begin rdoc
12
+
13
+ Insipration:
14
+ http://softwarerecs.stackexchange.com/questions/2428/program-to-convert-excel-2013-spreadsheets-to-latex-tables
15
+
16
+ https://github.com/roo-rb/roo
17
+
18
+ Similar:
19
+ http://www.ctan.org/pkg/excel2latex
20
+ Excel-Makros to build LaTeX-table.
21
+
22
+ excel2latex_Testdaten.xlsx
23
+ 3 sheets
24
+ * 1: Numbers
25
+ * 2: Header line
26
+ * 3: multicol + multirow
27
+ =end
28
+
29
+ file 'test.tex' => __FILE__
30
+ file 'test.tex' => '../lib/xlsx2latex/excel.rb'
31
+ file 'test.tex' => "../unittest/testdata/testdata_excel2latex.xlsx" do |tsk|
32
+ doc = Docgenerator::Document.new(:template => :article_utf8)
33
+ excel = XLSX2LaTeX::Excel.new("../unittest/testdata/testdata_excel2latex.xlsx", float_format: '%0.0f')
34
+ puts excel.info
35
+ doc.body << element(:section,{},'Sheet 1').Cr
36
+ doc.body << excel.to_latex(sheetname: 'Sheet1')
37
+ doc.body << element(:section,{},'Sheet2').Cr
38
+ doc.body << excel.to_latex(sheetname: 'Sheet2')
39
+ doc.save(tsk.name)
40
+ end
41
+
42
+ file 'test2.tex' => __FILE__
43
+ file 'test2.tex' => '../lib/xlsx2latex/excel.rb'
44
+ file 'test2.tex' => "../unittest/testdata/generated.xlsx" do |tsk|
45
+
46
+ doc = Docgenerator::Document.new(:template => :article_utf8)
47
+ doc.add_option('landscape')
48
+ excel = XLSX2LaTeX::Excel.new("../unittest/testdata/generated.xlsx", float_format: '%0.0f')
49
+ #~ excel.log.level = Log4r::DEBUG
50
+ doc.body << element(:section,{},'Data overview').Cr
51
+ doc.body << excel.to_latex(sheetname: 'DATA')
52
+ doc.body << element(:section,{},'usage of formats').Cr
53
+ doc.body << excel.to_latex(sheetname: 'Formats')
54
+ doc.body << element(:section,{},'Merged Areas').Cr
55
+ doc.body << excel.to_latex(sheetname: 'Merged Areas')
56
+ doc.save(tsk.name)
57
+ end
58
+
59
+
60
+ #~ task :default => 'test.pdf'
61
+ task :default => 'test2.pdf'
62
+ task :default => :clean
63
+ Rake.application[:default].invoke if __FILE__== $0
64
+
@@ -0,0 +1,15 @@
1
+ #encoding: utf-8
2
+ =begin rdoc
3
+ Gem XLSX2LaTeX: Convert excel-files to LaTeX-tabulars.
4
+
5
+
6
+ =end
7
+
8
+
9
+ module XLSX2LaTeX
10
+ VERSION = '0.1.0.rc1'
11
+ end #Xlsx2latex
12
+
13
+ require 'roo'
14
+ require 'log4r'
15
+ require_relative 'xlsx2latex/excel'
@@ -0,0 +1,147 @@
1
+ #encoding: utf-8
2
+ =begin rdoc
3
+ =end
4
+ module XLSX2LaTeX
5
+ =begin rdoc
6
+ Read an Excel-file (xlsx).
7
+
8
+ For conversion rules see #to_latex.
9
+
10
+ Limits:
11
+ * No support of multirow
12
+
13
+ Not realized yet:
14
+ * no lines, border
15
+ =end
16
+ class Excel
17
+ =begin rdoc
18
+ You can set the default values for the conversion rules in #to_latex.
19
+
20
+ call-seq:
21
+ Excel.new(filename, [options])
22
+
23
+ The supported options (with defaults):
24
+ * float_format: '%0.2f'
25
+ * date_format: '%Y-%m-%d',
26
+ * time_format: '%Y-%m-%d %H:%M',
27
+ * Boolean:
28
+ * bool_true: 'X',
29
+ * bool_false: '-',
30
+
31
+ =end
32
+ def initialize(filename,
33
+ float_format: '%0.2f',
34
+ date_format: '%Y-%m-%d',
35
+ time_format: '%Y-%m-%d %H:%M',
36
+ bool_true: 'X', bool_false: '-',
37
+ log_outputter: Log4r::StdoutOutputter.new('stdout')
38
+ )
39
+
40
+ @log = Log4r::Logger.new(File.basename(filename))
41
+ @log.outputters << log_outputter if log_outputter
42
+ @log.level = Log4r::INFO
43
+
44
+ @xlsx = Roo::Excelx.new(filename)
45
+ @float_format = float_format
46
+ @date_format = date_format
47
+ @time_format = time_format
48
+ @bool_true = bool_true
49
+ @bool_false = bool_false
50
+
51
+ end
52
+ #Logger.
53
+ attr_reader :log
54
+ #The internal Roo::Excelx-instance.
55
+ attr_reader :xlsx
56
+ =begin rdoc
57
+ Call #xlsx.info
58
+ =end
59
+ def info; @xlsx.info; end
60
+ =begin rdoc
61
+
62
+ call-seq:
63
+ #to_latex(options)
64
+
65
+ Options are:
66
+ * sheetname ( #xlsx#default_sheet )
67
+ * The default from ::new for the conversions can be redefined for each tabular.
68
+ =end
69
+ def to_latex(sheetname: @xlsx.default_sheet,
70
+ float_format: @float_format,
71
+ date_format: @date_format,
72
+ time_format: @time_format,
73
+ bool_true: @bool_true, bool_false: @bool_false,
74
+ xxx: nil
75
+ )
76
+ @xlsx.sheet(sheetname) #set default sheetname
77
+ sheet = @xlsx.sheet_for(sheetname)
78
+ @log.info("Convert Sheet %s to LaTeX" % sheetname)
79
+
80
+ tex = []
81
+ max_columns = 1
82
+ sheet.each_row do |line|
83
+ lineval = []
84
+ max_columns = @xlsx.last_column if @xlsx.last_column > max_columns
85
+ line.each{| cell |
86
+ @log.debug("%s(%i,%i): %s <%s> %s" % [sheetname,cell.coordinate.column,cell.coordinate.row, cell.type.inspect, cell.value.inspect, cell.inspect]) if @log.debug?
87
+
88
+ case cell.type
89
+ when nil #Overwritten parts in multicol/multirow
90
+ @log.warn("%s(%i,%i) contains Nil - Ok for multicolumn. Multirow is not supported" % [sheetname,cell.coordinate.column,cell.coordinate.row])
91
+ case lineval.last
92
+ when /multicolumn\{(\d+)\}/
93
+ lineval.last.sub!(/multicolumn\{(\d+)\}/, 'multicolumn{%i}' % [$1.to_i + 1])
94
+ else #First combined cell
95
+ lineval << ('\multicolumn{2}{c}{%s}' % lineval.pop)
96
+ end
97
+ next
98
+ when :float
99
+ value = float_format % cell.value
100
+ when :string
101
+ value = cell.value
102
+ when :formula
103
+ @log.info("%s(%i,%i): Found formula %s. Take result %s" % [sheetname,cell.coordinate.column,cell.coordinate.row, cell.formula, cell.value])
104
+ value = cell.value
105
+ when :boolean
106
+ value = case cell.value
107
+ when 'TRUE'; bool_true
108
+ when 'FALSE'; bool_false
109
+ else
110
+ @log.warn("Don't know how to handle boolean %s" % cell.value)
111
+ cell.value
112
+ end
113
+ when :date
114
+ value = cell.value.strftime(date_format)
115
+ when :datetime
116
+ value = cell.value.strftime(time_format)
117
+ else
118
+ #~ * :date * :percentage * :time * :datetime.
119
+ @log.error("%s(%i,%i) Undefined celltype %s -%s" % [sheetname,cell.coordinate.column,cell.coordinate.row,cell.type.inspect, cell.inspect])
120
+ #~ value = cell.excelx_value
121
+ value = cell.value
122
+ end
123
+ if value.respond_to?(:gsub)
124
+ value.gsub!('<', '\textless{}')
125
+ value.gsub!('>', '\textgreater{}')
126
+ value.gsub!('$', '\$')
127
+ value.gsub!('&', '\&')
128
+ value.gsub!('%', '\%')
129
+ end
130
+
131
+ if font = @xlsx.font(cell.coordinate.row,cell.coordinate.column)
132
+ value = '\textbf{%s}' % value if font.bold?
133
+ value = '\emph{%s}' % value if font.italic?
134
+ value = '\underline{%s}' % value if font.underline?
135
+ end
136
+ lineval << value
137
+ }
138
+ tex << lineval.join(' & ')
139
+ end
140
+ [
141
+ "\\begin{tabular}{%s}" % ('c|'* max_columns),
142
+ tex.join("\\\\\n"),
143
+ '\end{tabular}'
144
+ ].join("\n")
145
+ end
146
+ end
147
+ end #XLSX2LaTeX
@@ -0,0 +1,97 @@
1
+ =XLSX2LaTeX
2
+ Convert excel-files (xlsx) to LaTeX-tabulars.
3
+
4
+ Details see XLSX2LaTeX::Excel
5
+
6
+
7
+ ==Why?
8
+ This gem is inpired by a question at
9
+ stackexchange[http://softwarerecs.stackexchange.com/questions/2428/program-to-convert-excel-2013-spreadsheets-to-latex-tables].
10
+ My first impression was:
11
+ It should be easy to write such a converter with ruby.
12
+
13
+ This gem is a quick try to solve the problem.
14
+ It uses roo[https://github.com/roo-rb/roo] to parse an excel and convert
15
+ the result to LaTeX.
16
+
17
+ ==How to use
18
+ There is a command line version for this gem.
19
+
20
+ For a help, please use
21
+ bin/xlsx2latex.rb -h
22
+
23
+ output[bin/readme_txt.html]
24
+
25
+
26
+ ==Philosophy
27
+ This gem allows a fast way to convert an Excel-Sheet to a LaTeX-tabular.
28
+
29
+ It is not expected, that you get a ready-to-use-result.
30
+
31
+ * The column format is 'c' for each column
32
+ * Text formats are respected if the are defined fo the whole cell.
33
+ * No gridlines are analyzed. Please set your \hlines yourself.
34
+
35
+ ==Limitation
36
+ There are some limitations:
37
+
38
+ * Only tabular-like sheets are converted (e.g. no graphics)
39
+ * \multicolumn: The detection of multicolumns is a kind of guessing.
40
+ * \multirow: Not supported
41
+
42
+ ===Format
43
+
44
+ * Bold, italic... are only detected if the whole cell is formated.
45
+ * Gridlines are not analyzed.
46
+
47
+
48
+
49
+ =Similar tools
50
+ ==excel2latex
51
+ * http://www.ctan.org/pkg/excel2latex
52
+
53
+ Excel-Makros to build LaTeX-table.
54
+ Works until Excel version 2010
55
+
56
+ ==maketable
57
+ * http://www.ctan.org/tex-archive/support/maketable
58
+
59
+ MAKETABLE works with copy and paste. You mark your table in the
60
+ respective Windows program, hit copy, change to MAKETABLE and
61
+ click the Paste-Button. This pastes your data into a data grid.
62
+ When you click the TEX-Output-Button, the information in the data
63
+ grid is converted to the respective tabular structure, which is
64
+ displayed in a new window. Click the Mark all-Button and the
65
+ Copy-Button to copy the tabular structure to the clipboard, change
66
+ to your TeX-editor and paste it in.
67
+
68
+ ==xl2latex
69
+ * http://www.ctan.org/tex-archive/support/xl2latex
70
+
71
+ Works only with Excel97 (and hopefully above, you never know what Microsoft does)
72
+
73
+ Import xl2latex.bas in Visual Basic and save as xl2latex.xls (or any other filename).
74
+
75
+ To do so: open a new file or a file with all your macros
76
+ Extras->Macro->Visual Basic-Editor
77
+ then in Visual Basic: File->File import
78
+ close Visual Basic
79
+ save the file (File->Save As or File->Save, what you want)
80
+ close the file
81
+ now you should have a new button "LaTeX export" in your "LaTeX" toolbar
82
+
83
+
84
+ ==Online tools
85
+ ===http://www.tablesgenerator.com/
86
+ With http://www.tablesgenerator.com/ you can create empty templates for LaTeX tables.
87
+
88
+ ===http://ericwood.org/excel2latex/
89
+
90
+ Drag any .xlsx file onto the page to extract data and convert it into a LaTeX table.
91
+
92
+ * Javascript
93
+ * No conversion of special characters
94
+ * Only default sheet
95
+
96
+ =====...
97
+
@@ -0,0 +1,9 @@
1
+ \begin{tabular}{c|c|c|c|c|c|c|c|}
2
+ \textbf{String} & \textbf{Integer} & \textbf{Formula} & \textbf{Float} & \textbf{String with float value} & \textbf{Boolean (String \textgreater{} 0.5)} & \textbf{Date} & \textbf{Time}\\
3
+ first & 9.00 & 18.0 & 0.81 & 0.8135804472781414 & X & 2015-01-01 & 2015-01-01 12:00\\
4
+ second & 6.00 & 12.0 & 0.05 & 0.05436321430643143 & - & 2015-01-02 & 2015-01-02 13:00\\
5
+ third & 8.00 & 16.0 & 0.93 & 0.9266428241878765 & X & 2015-01-03 & 2015-01-03 14:00\\
6
+ fourth & 23.00 & 46.0 & 0.31 & 0.305918915735916 & - & 2015-01-04 & 2015-01-04 15:00\\
7
+ fifth & 18.00 & 36.0 & 0.72 & 0.7199250989537036 & X & 2015-01-05 & 2015-01-05 16:00\\
8
+ sixth & 24.00 & 48.0 & 0.25 & 0.24989901388011448 & - & 2015-01-06 & 2015-01-06 17:00
9
+ \end{tabular}
@@ -0,0 +1,9 @@
1
+ \begin{tabular}{c|c|c|c|c|c|c|c|}
2
+ \textbf{String} & \textbf{Integer} & \textbf{Formula} & \textbf{Float} & \textbf{String with float value} & \textbf{Boolean (String \textgreater{} 0.5)} & \textbf{Date} & \textbf{Time}\\
3
+ first & 9.00 & 18.0 & 0.81 & 0.8135804472781414 & X & 2015-01-01 & 2015-01-01 12:00\\
4
+ second & 6.00 & 12.0 & 0.05 & 0.05436321430643143 & - & 2015-01-02 & 2015-01-02 13:00\\
5
+ third & 8.00 & 16.0 & 0.93 & 0.9266428241878765 & X & 2015-01-03 & 2015-01-03 14:00\\
6
+ fourth & 23.00 & 46.0 & 0.31 & 0.305918915735916 & - & 2015-01-04 & 2015-01-04 15:00\\
7
+ fifth & 18.00 & 36.0 & 0.72 & 0.7199250989537036 & X & 2015-01-05 & 2015-01-05 16:00\\
8
+ sixth & 24.00 & 48.0 & 0.25 & 0.24989901388011448 & - & 2015-01-06 & 2015-01-06 17:00
9
+ \end{tabular}
@@ -0,0 +1,9 @@
1
+ \begin{tabular}{c|c|c|c|c|c|c|c|}
2
+ \textbf{String} & \textbf{Integer} & \textbf{Formula} & \textbf{Float} & \textbf{String with float value} & \textbf{Boolean (String \textgreater{} 0.5)} & \textbf{Date} & \textbf{Time}\\
3
+ first & 9.00 & 18.0 & 0.81 & 0.8135804472781414 & yes & 2015-01-01 & 2015-01-01 12:00\\
4
+ second & 6.00 & 12.0 & 0.05 & 0.05436321430643143 & no & 2015-01-02 & 2015-01-02 13:00\\
5
+ third & 8.00 & 16.0 & 0.93 & 0.9266428241878765 & yes & 2015-01-03 & 2015-01-03 14:00\\
6
+ fourth & 23.00 & 46.0 & 0.31 & 0.305918915735916 & no & 2015-01-04 & 2015-01-04 15:00\\
7
+ fifth & 18.00 & 36.0 & 0.72 & 0.7199250989537036 & yes & 2015-01-05 & 2015-01-05 16:00\\
8
+ sixth & 24.00 & 48.0 & 0.25 & 0.24989901388011448 & no & 2015-01-06 & 2015-01-06 17:00
9
+ \end{tabular}
@@ -0,0 +1,9 @@
1
+ \begin{tabular}{c|c|c|c|c|c|c|c|}
2
+ \textbf{String} & \textbf{Integer} & \textbf{Formula} & \textbf{Float} & \textbf{String with float value} & \textbf{Boolean (String \textgreater{} 0.5)} & \textbf{Date} & \textbf{Time}\\
3
+ first & 9.00 & 18.0 & 0.81 & 0.8135804472781414 & X & 01. January 2015 & 2015-01-01 12:00\\
4
+ second & 6.00 & 12.0 & 0.05 & 0.05436321430643143 & - & 02. January 2015 & 2015-01-02 13:00\\
5
+ third & 8.00 & 16.0 & 0.93 & 0.9266428241878765 & X & 03. January 2015 & 2015-01-03 14:00\\
6
+ fourth & 23.00 & 46.0 & 0.31 & 0.305918915735916 & - & 04. January 2015 & 2015-01-04 15:00\\
7
+ fifth & 18.00 & 36.0 & 0.72 & 0.7199250989537036 & X & 05. January 2015 & 2015-01-05 16:00\\
8
+ sixth & 24.00 & 48.0 & 0.25 & 0.24989901388011448 & - & 06. January 2015 & 2015-01-06 17:00
9
+ \end{tabular}
@@ -0,0 +1,9 @@
1
+ \begin{tabular}{c|c|c|c|c|c|c|c|}
2
+ \textbf{String} & \textbf{Integer} & \textbf{Formula} & \textbf{Float} & \textbf{String with float value} & \textbf{Boolean (String \textgreater{} 0.5)} & \textbf{Date} & \textbf{Time}\\
3
+ first & 9 & 18.0 & 1 & 0.8135804472781414 & X & 2015-01-01 & 2015-01-01 12:00\\
4
+ second & 6 & 12.0 & 0 & 0.05436321430643143 & - & 2015-01-02 & 2015-01-02 13:00\\
5
+ third & 8 & 16.0 & 1 & 0.9266428241878765 & X & 2015-01-03 & 2015-01-03 14:00\\
6
+ fourth & 23 & 46.0 & 0 & 0.305918915735916 & - & 2015-01-04 & 2015-01-04 15:00\\
7
+ fifth & 18 & 36.0 & 1 & 0.7199250989537036 & X & 2015-01-05 & 2015-01-05 16:00\\
8
+ sixth & 24 & 48.0 & 0 & 0.24989901388011448 & - & 2015-01-06 & 2015-01-06 17:00
9
+ \end{tabular}
@@ -0,0 +1,9 @@
1
+ \begin{tabular}{c|c|c|c|c|c|c|c|}
2
+ \textbf{String} & \textbf{Integer} & \textbf{Formula} & \textbf{Float} & \textbf{String with float value} & \textbf{Boolean (String \textgreater{} 0.5)} & \textbf{Date} & \textbf{Time}\\
3
+ first & 9.00 & 18.0 & 0.81 & 0.8135804472781414 & X & 2015-01-01 & 01. January 2015 12:00\\
4
+ second & 6.00 & 12.0 & 0.05 & 0.05436321430643143 & - & 2015-01-02 & 02. January 2015 13:00\\
5
+ third & 8.00 & 16.0 & 0.93 & 0.9266428241878765 & X & 2015-01-03 & 03. January 2015 14:00\\
6
+ fourth & 23.00 & 46.0 & 0.31 & 0.305918915735916 & - & 2015-01-04 & 04. January 2015 15:00\\
7
+ fifth & 18.00 & 36.0 & 0.72 & 0.7199250989537036 & X & 2015-01-05 & 05. January 2015 16:00\\
8
+ sixth & 24.00 & 48.0 & 0.25 & 0.24989901388011448 & - & 2015-01-06 & 06. January 2015 17:00
9
+ \end{tabular}
@@ -0,0 +1,7 @@
1
+ \begin{tabular}{c|}
2
+ Normal\\
3
+ \textbf{Bold}\\
4
+ \emph{Italic}\\
5
+ Strike\\
6
+ \emph{\textbf{Bold+Italic}}
7
+ \end{tabular}
@@ -0,0 +1,17 @@
1
+ \begin{tabular}{c|c|c|c|c|c|c|c|c|c|c|}
2
+ A1 & B1 & C1 & D1 & E1 & F1 & G1 & H1 & I1 & J1 & K1\\
3
+ A2 & \multicolumn{6}{c}{B2} & H2 & I2 & J2 & K2\\
4
+ A3 & B3 & C3 & D3 & E3 & F3 & G3 & H3 & I3 & J3 & K3\\
5
+ A4 & B4 & C4 & D4 & E4 & F4 & G4 & H4 & I4 & J4 & K4\\
6
+ A5 & \multicolumn{2}{c}{B5} & D5 & E5 & F5 & G5 & H5 & I5 & J5 & K5\\
7
+ A6 & \multicolumn{2}{c}{B6} & D6 & E6 & F6 & G6 & H6 & I6 & J6 & K6\\
8
+ A7 & \multicolumn{2}{c}{B7} & D7 & E7 & F7 & G7 & H7 & I7 & J7 & K7\\
9
+ A8 & \multicolumn{2}{c}{B8} & D8 & E8 & F8 & \multicolumn{3}{c}{G8} & J8 & K8\\
10
+ A9 & \multicolumn{2}{c}{B9} & D9 & E9 & \multicolumn{4}{c}{F9} & J9 & K9\\
11
+ A10 & \multicolumn{2}{c}{B10} & D10 & E10 & \multicolumn{4}{c}{F10} & J10 & K10\\
12
+ A11 & B11 & C11 & D11 & E11 & \multicolumn{4}{c}{F11} & J11 & K11\\
13
+ A12 & B12 & C12 & D12 & E12 & \multicolumn{4}{c}{F12} & J12 & K12\\
14
+ A13 & B13 & C13 & D13 & E13 & \multicolumn{4}{c}{F13} & J13 & K13\\
15
+ A14 & B14 & C14 & D14 & E14 & F14 & G14 & H14 & I14 & J14 & K14\\
16
+ A15 & B15 & C15 & D15 & E15 & F15 & G15 & H15 & I15 & J15 & K15
17
+ \end{tabular}
@@ -0,0 +1,9 @@
1
+ INFO simple.xlsx: Convert Sheet DATA to LaTeX
2
+ \begin{tabular}{c|c|c|c|c|}
3
+ first & 9.00 & yes & 0.81 & 2015-01-01\\
4
+ second & 6.00 & no & 0.05 & 2015-01-01\\
5
+ third & 8.00 & no & 0.93 & 2015-01-01\\
6
+ fourth & 23.00 & yes & 0.31 & 2015-01-01\\
7
+ fifth & 18.00 & no & 0.72 & 2015-01-01\\
8
+ sixth & 24.00 & no & 0.25 & 2015-01-01
9
+ \end{tabular}
@@ -0,0 +1,9 @@
1
+ INFO simple.xlsx: Convert Sheet DATA to LaTeX
2
+ \begin{tabular}{c|c|c|c|c|}
3
+ first & 9.00 & X & 0.81 & 01. January 2015\\
4
+ second & 6.00 & - & 0.05 & 01. January 2015\\
5
+ third & 8.00 & - & 0.93 & 01. January 2015\\
6
+ fourth & 23.00 & X & 0.31 & 01. January 2015\\
7
+ fifth & 18.00 & - & 0.72 & 01. January 2015\\
8
+ sixth & 24.00 & - & 0.25 & 01. January 2015
9
+ \end{tabular}
@@ -0,0 +1,9 @@
1
+ INFO simple.xlsx: Convert Sheet DATA to LaTeX
2
+ \begin{tabular}{c|c|c|c|c|}
3
+ first & 9.00 & X & 0.81 & 2015-01-01\\
4
+ second & 6.00 & - & 0.05 & 2015-01-01\\
5
+ third & 8.00 & - & 0.93 & 2015-01-01\\
6
+ fourth & 23.00 & X & 0.31 & 2015-01-01\\
7
+ fifth & 18.00 & - & 0.72 & 2015-01-01\\
8
+ sixth & 24.00 & - & 0.25 & 2015-01-01
9
+ \end{tabular}
@@ -0,0 +1,9 @@
1
+ INFO simple.xlsx: Convert Sheet DATA to LaTeX
2
+ \begin{tabular}{c|c|c|c|c|}
3
+ first & 09.000 & X & 00.814 & 2015-01-01\\
4
+ second & 06.000 & - & 00.054 & 2015-01-01\\
5
+ third & 08.000 & - & 00.927 & 2015-01-01\\
6
+ fourth & 23.000 & X & 00.306 & 2015-01-01\\
7
+ fifth & 18.000 & - & 00.720 & 2015-01-01\\
8
+ sixth & 24.000 & - & 00.250 & 2015-01-01
9
+ \end{tabular}
@@ -0,0 +1,9 @@
1
+ INFO simple.xlsx: Convert Sheet DATA2 to LaTeX
2
+ \begin{tabular}{c|c|c|}
3
+ sixth & 11.00 & 0.03\\
4
+ fifth & 10.00 & 0.72\\
5
+ fourth & 20.00 & 0.98\\
6
+ third & 16.00 & 0.17\\
7
+ second & 19.00 & 0.04\\
8
+ first & 1.00 & 1.00
9
+ \end{tabular}
@@ -0,0 +1,8 @@
1
+ \begin{tabular}{c|c|c|c|c|}
2
+ first & 9.00 & X & 0.81 & 2015-01-01\\
3
+ second & 6.00 & - & 0.05 & 2015-01-01\\
4
+ third & 8.00 & - & 0.93 & 2015-01-01\\
5
+ fourth & 23.00 & X & 0.31 & 2015-01-01\\
6
+ fifth & 18.00 & - & 0.72 & 2015-01-01\\
7
+ sixth & 24.00 & - & 0.25 & 2015-01-01
8
+ \end{tabular}
@@ -0,0 +1,10 @@
1
+ \begin{tabular}{c|c|c|c|c|c|c|}
2
+ \textbf{1.00} & \textbf{2.00} & \textbf{3.00} & \textbf{4.00} & \textbf{5.00} & \textbf{6.00} & \textbf{7.00}\\
3
+ 2.00 & 3.00 & 4.00 & 5.00 & 6.00 & 7.00 & 8.00\\
4
+ 3.00 & 4.00 & 5.00 & 6.00 & 7.00 & 8.00 & 9.00\\
5
+ 4.00 & 5.00 & 6.00 & 7.00 & 8.00 & 9.00 & 10.00\\
6
+ 5.00 & 6.00 & 7.00 & 8.00 & 9.00 & 10.00 & 11.00\\
7
+ 6.00 & 7.00 & 8.00 & 9.00 & 10.00 & 11.00 & 12.00\\
8
+ 7.00 & 8.00 & 9.00 & 10.00 & 11.00 & 12.00 & 13.00\\
9
+ 8.00 & 9.00 & 10.00 & 11.00 & 12.00 & 13.00 & 14.00
10
+ \end{tabular}
@@ -0,0 +1,10 @@
1
+ \begin{tabular}{c|c|c|c|c|c|c|}
2
+ \textbf{1.00} & \textbf{2.00} & \textbf{3.00} & \textbf{4.00} & \textbf{5.00} & \textbf{6.00} & \textbf{7.00}\\
3
+ 2.00 & 3.00 & 4.00 & 5.00 & 6.00 & 7.00 & 8.00\\
4
+ 3.00 & 4.00 & 5.00 & 6.00 & 7.00 & 8.00 & 9.00\\
5
+ 4.00 & 5.00 & 6.00 & 7.00 & 8.00 & 9.00 & 10.00\\
6
+ 5.00 & 6.00 & 7.00 & 8.00 & 9.00 & 10.00 & 11.00\\
7
+ 6.00 & 7.00 & 8.00 & 9.00 & 10.00 & 11.00 & 12.00\\
8
+ 7.00 & 8.00 & 9.00 & 10.00 & 11.00 & 12.00 & 13.00\\
9
+ 8.00 & 9.00 & 10.00 & 11.00 & 12.00 & 13.00 & 14.00
10
+ \end{tabular}
@@ -0,0 +1,10 @@
1
+ \begin{tabular}{c|c|c|c|c|c|c|}
2
+ \textbf{1} & \textbf{2} & \textbf{3} & \textbf{4} & \textbf{5} & \textbf{6} & \textbf{7}\\
3
+ 2 & 3 & 4 & 5 & 6 & 7 & 8\\
4
+ 3 & 4 & 5 & 6 & 7 & 8 & 9\\
5
+ 4 & 5 & 6 & 7 & 8 & 9 & 10\\
6
+ 5 & 6 & 7 & 8 & 9 & 10 & 11\\
7
+ 6 & 7 & 8 & 9 & 10 & 11 & 12\\
8
+ 7 & 8 & 9 & 10 & 11 & 12 & 13\\
9
+ 8 & 9 & 10 & 11 & 12 & 13 & 14
10
+ \end{tabular}
@@ -0,0 +1,14 @@
1
+ \begin{tabular}{c|c|c|c|c|c|c|}
2
+ 1.00 & 2.00 & 3.00 & 4.00 & 5.00 & 6.00 & 7.00\\
3
+ 2.00 & \multicolumn{5}{c}{\textbf{5 columns combined}} & 8.00\\
4
+ 3.00 & 4.00 & 5.00 & 6.00 & 7.00 & 8.00 & 9.00\\
5
+ 4.00 & \multicolumn{3}{c}{\textbf{3 columns and 2 rows}} & 8.00 & 9.00 & 10.00\\
6
+ \multicolumn{4}{c}{5.00} & 9.00 & 10.00 & 11.00\\
7
+ 6.00 & 7.00 & 8.00 & 9.00 & 10.00 & 11.00 & 12.00\\
8
+ 7.00 & 8.00 & 9.00 & 10.00 & 11.00 & 12.00 & 13.00\\
9
+ 8.00 & 9.00 & 10.00 & 11.00 & 12.00 & 13.00 & 14.00\\
10
+ Formula: & 1.00 & 2.00 & 3.0\\
11
+ 10.00 & 11.00 & 12.00 & 13.00 & 14.00 & 15.00 & 16.00\\
12
+ 11.00 & 12.00 & 13.00 & 14.00 & 15.00 & 16.00 & 17.00\\
13
+ 12.00 & 13.00 & 14.00 & 15.00 & 16.00 & 17.00 & 18.00
14
+ \end{tabular}
@@ -0,0 +1,75 @@
1
+ #encoding: utf-8
2
+ =begin rdoc
3
+ Tests for xlsx2latex-binary.
4
+ =end
5
+ gem 'minitest'
6
+ require 'minitest/autorun'
7
+ require 'minitest/filecontent'
8
+
9
+ $:.unshift('../lib')
10
+ require 'xlsx2latex'
11
+
12
+ class Test_bin < MiniTest::Test
13
+ def setup
14
+ #~ @cmd = 'ruby ../bin/xlsx2latex.rb'
15
+ @cmd = '../bin/xlsx2latex.exe'
16
+ @src = 'testdata/simple.xlsx'
17
+ @cmd_src = [@cmd, @src].join(' ')
18
+ end
19
+ def test_bin_no_parameter
20
+ `#{@cmd}`
21
+ assert_equal(1,$?.exitstatus)
22
+ end
23
+ def test_bin_unkown_source
24
+ `#{@cmd} notexisting.xlsx`
25
+ assert_equal(2,$?.exitstatus)
26
+ end
27
+ #Result is posted on screen
28
+ #The output contains also the Log-Messages.
29
+ def test_bin_default
30
+ output = `#{@cmd_src}`
31
+ assert_equal(0,$?.exitstatus)
32
+ assert_equal_filecontent('expected/%s.tex' % __method__, output)
33
+ end
34
+
35
+ #Save result immediate into file
36
+ def test_bin_with_target
37
+ filename = 'temporary_testfile_please_delete_%s_%s.tex' % [__method__.hash, __method__]
38
+ refute(File.exist?(filename), 'Testfile %s already exists' % filename)
39
+ output = `#{@cmd_src} -t #{filename}`
40
+ assert_equal(0,$?.exitstatus)
41
+ assert(File.exist?(filename), "Target file is not created")
42
+ assert_equal(<<LOG % filename, output)
43
+ INFO simple.xlsx: Convert Sheet DATA to LaTeX
44
+ INFO simple.xlsx: Created %s
45
+ LOG
46
+ assert_equal_filecontent('expected/%s.tex' % __method__, File.read(filename))
47
+ File.delete(filename)
48
+ end
49
+
50
+ def test_bin_select_sheet
51
+ output = `#{@cmd_src} -s DATA2`
52
+ assert_equal(0,$?.exitstatus)
53
+ assert_equal_filecontent('expected/%s.tex' % __method__, output)
54
+ end
55
+
56
+ def test_bin_float
57
+ output = `#{@cmd_src} -f %06.3f`
58
+ assert_equal(0,$?.exitstatus)
59
+ assert_equal_filecontent('expected/%s.tex' % __method__, output)
60
+ end
61
+
62
+ def test_bin_date
63
+ output = `#{@cmd_src} -d "%d. %B %Y"`
64
+ assert_equal(0,$?.exitstatus)
65
+ assert_equal_filecontent('expected/%s.tex' % __method__, output)
66
+ end
67
+
68
+ def test_bin_boolean
69
+ output = `#{@cmd_src} --true yes --false no`
70
+ assert_equal(0,$?.exitstatus)
71
+ assert_equal_filecontent('expected/%s.tex' % __method__, output)
72
+ end
73
+ end
74
+ __END__
75
+
@@ -0,0 +1,69 @@
1
+ #encoding: utf-8
2
+ =begin rdoc
3
+ Tests for xlsx2latex
4
+ =end
5
+ gem 'minitest'
6
+ require 'minitest/autorun'
7
+ require 'minitest/filecontent'
8
+
9
+ $:.unshift('../lib')
10
+ require 'xlsx2latex'
11
+
12
+ class Test_generated_xlsx < MiniTest::Test
13
+ def setup
14
+ @excel = XLSX2LaTeX::Excel.new("./testdata/generated.xlsx",
15
+ log_outputter: nil
16
+ )
17
+ end
18
+ def test_info
19
+ #~ puts @excel.info
20
+ assert_equal(<<INFO.strip, @excel.info)
21
+ File: generated.xlsx
22
+ Number of sheets: 3
23
+ Sheets: DATA, Merged Areas, Formats
24
+ Sheet 1:
25
+ First row: 1
26
+ Last row: 7
27
+ First column: A
28
+ Last column: H
29
+ Sheet 2:
30
+ First row: 1
31
+ Last row: 15
32
+ First column: A
33
+ Last column: K
34
+ Sheet 3:
35
+ First row: 1
36
+ Last row: 5
37
+ First column: A
38
+ Last column: A
39
+ INFO
40
+ end
41
+ def test_default_sheet
42
+ assert_equal_filecontent('expected/generated_%s.tex' % __method__, @excel.to_latex())
43
+ end
44
+ def test_sheet_data
45
+ assert_equal_filecontent('expected/generated_%s.tex' % __method__, @excel.to_latex(sheetname: 'DATA'))
46
+ end
47
+ def test_sheet_data_floatformat
48
+ assert_equal_filecontent('expected/generated_%s.tex' % __method__, @excel.to_latex(sheetname: 'DATA', float_format: '%0.0f',))
49
+ end
50
+ def test_sheet_data_date_format
51
+ assert_equal_filecontent('expected/generated_%s.tex' % __method__, @excel.to_latex(sheetname: 'DATA', date_format: '%d. %B %Y',))
52
+ end
53
+ def test_sheet_data_time_format
54
+ assert_equal_filecontent('expected/generated_%s.tex' % __method__, @excel.to_latex(sheetname: 'DATA', time_format: '%d. %B %Y %H:%M',))
55
+ end
56
+ def test_sheet_data_boolean
57
+ assert_equal_filecontent('expected/generated_%s.tex' % __method__, @excel.to_latex(sheetname: 'DATA', bool_true: 'yes', bool_false: 'no'))
58
+ end
59
+ def test_sheet_merged_areas
60
+ assert_equal_filecontent('expected/generated_%s.tex' % __method__, @excel.to_latex(sheetname: 'Merged Areas'))
61
+ end
62
+ def test_sheet_format
63
+ assert_equal_filecontent('expected/generated_%s.tex' % __method__, @excel.to_latex(sheetname: 'Formats'))
64
+ end
65
+ end
66
+ __END__
67
+ doc.body <<
68
+ doc.body << excel.to_latex('Sheet2')
69
+
@@ -0,0 +1,51 @@
1
+ #encoding: utf-8
2
+ =begin rdoc
3
+ Tests for xlsx2latex
4
+ =end
5
+ gem 'minitest'
6
+ require 'minitest/autorun'
7
+ require 'minitest/filecontent'
8
+
9
+ $:.unshift('../lib')
10
+ require 'xlsx2latex'
11
+
12
+ class Test_xlsx2latex < MiniTest::Test
13
+ def setup
14
+ @excel = XLSX2LaTeX::Excel.new("./testdata/testdata_excel2latex.xlsx",
15
+ log_outputter: nil
16
+ )
17
+ end
18
+ def test_info
19
+ assert_equal(<<INFO.strip, @excel.info)
20
+ File: testdata_excel2latex.xlsx
21
+ Number of sheets: 2
22
+ Sheets: Sheet1, Sheet2
23
+ Sheet 1:
24
+ First row: 1
25
+ Last row: 8
26
+ First column: A
27
+ Last column: G
28
+ Sheet 2:
29
+ First row: 1
30
+ Last row: 12
31
+ First column: A
32
+ Last column: G
33
+ INFO
34
+ end
35
+ def test_default_sheet
36
+ assert_equal_filecontent('expected/%s.tex' % __method__, @excel.to_latex(sheetname: 'Sheet1'))
37
+ end
38
+ def test_sheet1
39
+ assert_equal_filecontent('expected/%s.tex' % __method__, @excel.to_latex(sheetname: 'Sheet1'))
40
+ end
41
+ def test_sheet1_floatformat
42
+ assert_equal_filecontent('expected/%s.tex' % __method__, @excel.to_latex(sheetname: 'Sheet1', float_format: '%0.0f',))
43
+ end
44
+ def test_sheet2
45
+ assert_equal_filecontent('expected/%s.tex' % __method__, @excel.to_latex(sheetname: 'Sheet2'))
46
+ end
47
+ end
48
+ __END__
49
+ doc.body <<
50
+ doc.body << excel.to_latex('Sheet2')
51
+
@@ -0,0 +1,130 @@
1
+ #encoding: utf-8
2
+ =begin rdoc
3
+ Make test example.
4
+ =end
5
+ WARNING = <<-txt
6
+ Warning!
7
+
8
+ This file creator stores the data in a different way then excel.
9
+
10
+ The formula are not evaluated (they will get no value), so you have to
11
+ open and save the file once with Excel.
12
+
13
+ txt
14
+
15
+ require 'rake'
16
+ require 'axlsx'
17
+ MyRand = Random.new(15) #Make randm number, but repeatable
18
+ VALUES = %w(first second third fourth fifth sixth)
19
+
20
+ file 'generated.xlsx' => [:warning, __FILE__] do |tsk|
21
+ Axlsx::Package.new do |p|
22
+ wb = p.workbook
23
+ wb.styles{|s|
24
+ bold = s.add_style(:b => true)
25
+ italic = s.add_style(:i => true)
26
+ strike = s.add_style(:strike => true)
27
+ bold_italic = s.add_style(:b => true, :i => true)
28
+ time = s.add_style(:format_code => "YYYY-MM-DD hh:mm")
29
+ wb.add_worksheet(:name => "DATA") do |sheet|
30
+ sheet.add_row(
31
+ ['String', 'Integer', 'Formula', 'Float', 'String with float value', 'Boolean (String > 0.5)', 'Date', 'Time'],
32
+ :style => bold,
33
+ )
34
+ VALUES.each_with_index { |label,i|
35
+ sheet.add_row(
36
+ [ #Values
37
+ label,
38
+ MyRand.rand(24)+1,
39
+ "=B%i * 2" % [i+2], #Formula
40
+ x = MyRand.rand,
41
+ x,
42
+ x > 0.5,
43
+ Date.new(2015,1,1) + i,
44
+ Time.new(2015,1,1,12) + i*60*60*24 + i*60*60,
45
+ ],
46
+ :types => [:string, :integer, nil, :float, :string, :boolean, :date, :time],
47
+ :style => [nil, nil, nil,nil,nil,nil, nil,time],
48
+ )
49
+ }
50
+ #Only for printed sheets
51
+ #~ wb.add_defined_name("'repeated header'!$1:$1", :local_sheet_id => sheet.index, :name => '_xlnm.Print_Titles')
52
+ end
53
+ wb.add_worksheet(:name => "Merged Areas") do |sheet|
54
+ 1.upto(15){|i|
55
+ sheet.add_row( 'A'.upto('K').map{|char| '%s%i' % [char,i]})
56
+ }
57
+ #The data behind stay available.
58
+ #so roo don't return nil for merged data.
59
+ #-> The invisible columns must be set to nil.
60
+ sheet.merge_cells("B2:G2") #merged column -> \multicol
61
+ sheet["C2:G2"].each{|cell| cell.value = nil } #Delete content of merged cells
62
+
63
+ sheet.merge_cells("C4:C10") #merged row -> not supported
64
+ sheet["C5:C10"].each{|cell| cell.value = nil } #Delete content of merged cells
65
+
66
+ sheet.merge_cells("G8:I13")#Block -> not supported/\multicol
67
+ sheet["H8:I13"].each{|cell| cell.value = nil } #Delete content of merged cells
68
+ sheet["G9:G13"].each{|cell| cell.value = nil } #Delete content of merged cells
69
+ end
70
+ wb.add_worksheet(:name => "Formats") do |sheet|
71
+ sheet.add_row(['Normal']) #Bold
72
+ sheet.add_row(['Bold'],:style => bold) #Bold ##this bold is not set correct
73
+ sheet.add_row(['Italic'],:style => italic)
74
+ sheet.add_row(['Strike'],:style => strike)
75
+ sheet.add_row(['Bold+Italic'],:style => bold_italic)
76
+
77
+ #This variants store boldin a different way:
78
+ #~ sheet.add_row(['Bold'],:b => true) #Bold ##this bold is not set correct
79
+ #~ sheet.add_row(['Italic'],:i => true)
80
+ #~ sheet.add_row(['Strike'],:strike => true)
81
+ #~ sheet.add_row(['Bold+Italic'],:b => true,:i => true)
82
+ end
83
+ } #styles
84
+ #~ wb.add_worksheet(:name => "References") do |sheet|
85
+ #~ sheet.add_row ['Text', 'Reference', 'lookup-formula']
86
+ #~ VALUES.each_with_index{ |label,i|
87
+ #~ #Correct example: =SVERWEIS(A1;DATA.A1:DATA.B3;2)
88
+ #~ #There is a header line -> Offsets by 1
89
+ #~ vlookup = '=VLOOKUP(A%i,DATA!A2:B%i,2)' % [i+2,VALUES.size+1]
90
+ #~ sheet.add_row [label, vlookup, "'%s" % vlookup]
91
+ #~ }
92
+ #~ end
93
+ puts "(Re)create %s" % tsk.name
94
+ p.serialize(tsk.name)
95
+ end
96
+ end
97
+
98
+ task :warning do
99
+ puts WARNING
100
+ end
101
+
102
+ file 'simple.xlsx' => [__FILE__] do |tsk|
103
+ Axlsx::Package.new do |p|
104
+ wb = p.workbook
105
+ wb.add_worksheet(:name => "DATA") do |sheet|
106
+ VALUES.each_with_index { |label,i|
107
+ sheet.add_row([label, x = MyRand.rand(24)+1, x.odd?, MyRand.rand, Date.new(2015,1,1)],
108
+ :types => [:string, :integer, :boolean, :float, :date]
109
+ )
110
+ }
111
+ end
112
+ wb.add_worksheet(:name => "DATA2") do |sheet|
113
+ VALUES.reverse.each_with_index { |label,i|
114
+ sheet.add_row([label, MyRand.rand(24)+1, MyRand.rand],
115
+ :types => [:string, :integer, :float]
116
+ )
117
+ }
118
+ end
119
+ puts "(Re)create %s" % tsk.name
120
+ p.serialize(tsk.name)
121
+ end
122
+ end
123
+
124
+ #~ task :default => :warning
125
+ #~ task :default=> 'generated.xlsx'
126
+ task :default=> 'simple.xlsx'
127
+
128
+ Rake.application[:default].invoke if $0 == __FILE__
129
+
130
+ __END__
metadata ADDED
@@ -0,0 +1,159 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: xlsx2latex
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0.rc1
5
+ platform: ruby
6
+ authors:
7
+ - Knut Lickert
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: roo
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: log4r
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-filecontent
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: axlsx
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2'
69
+ description: ''
70
+ email: knut@lickert.net
71
+ executables:
72
+ - xlsx2latex.rb
73
+ extensions: []
74
+ extra_rdoc_files:
75
+ - readme.rdoc
76
+ - bin/readme.txt
77
+ files:
78
+ - bin/readme.txt
79
+ - bin/xlsx2latex.rb
80
+ - examples/example_xlsx2latex.rb
81
+ - lib/xlsx2latex.rb
82
+ - lib/xlsx2latex/excel.rb
83
+ - readme.rdoc
84
+ - unittest/expected/generated_test_default_sheet.tex
85
+ - unittest/expected/generated_test_sheet_data.tex
86
+ - unittest/expected/generated_test_sheet_data_boolean.tex
87
+ - unittest/expected/generated_test_sheet_data_date_format.tex
88
+ - unittest/expected/generated_test_sheet_data_floatformat.tex
89
+ - unittest/expected/generated_test_sheet_data_time_format.tex
90
+ - unittest/expected/generated_test_sheet_format.tex
91
+ - unittest/expected/generated_test_sheet_merged_areas.tex
92
+ - unittest/expected/test_bin_boolean.tex
93
+ - unittest/expected/test_bin_date.tex
94
+ - unittest/expected/test_bin_default.tex
95
+ - unittest/expected/test_bin_float.tex
96
+ - unittest/expected/test_bin_select_sheet.tex
97
+ - unittest/expected/test_bin_with_target.tex
98
+ - unittest/expected/test_default_sheet.tex
99
+ - unittest/expected/test_sheet1.tex
100
+ - unittest/expected/test_sheet1_floatformat.tex
101
+ - unittest/expected/test_sheet2.tex
102
+ - unittest/test_bin.rb
103
+ - unittest/test_generated_xlsx.rb
104
+ - unittest/test_testdata_excel2latex.rb
105
+ - unittest/testdata/generated.xlsx
106
+ - unittest/testdata/make_testdata.rb
107
+ - unittest/testdata/simple.xlsx
108
+ - unittest/testdata/testdata_excel2latex.xlsx
109
+ homepage:
110
+ licenses: []
111
+ metadata: {}
112
+ post_install_message:
113
+ rdoc_options:
114
+ - "--main"
115
+ - readme.rdoc
116
+ require_paths:
117
+ - lib
118
+ required_ruby_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">"
126
+ - !ruby/object:Gem::Version
127
+ version: 1.3.1
128
+ requirements: []
129
+ rubyforge_project:
130
+ rubygems_version: 2.4.5
131
+ signing_key:
132
+ specification_version: 4
133
+ summary: ''
134
+ test_files:
135
+ - unittest/test_testdata_excel2latex.rb
136
+ - unittest/test_generated_xlsx.rb
137
+ - unittest/test_bin.rb
138
+ - unittest/testdata/make_testdata.rb
139
+ - unittest/testdata/generated.xlsx
140
+ - unittest/testdata/simple.xlsx
141
+ - unittest/testdata/testdata_excel2latex.xlsx
142
+ - unittest/expected/generated_test_default_sheet.tex
143
+ - unittest/expected/generated_test_sheet_data.tex
144
+ - unittest/expected/generated_test_sheet_data_boolean.tex
145
+ - unittest/expected/generated_test_sheet_data_date_format.tex
146
+ - unittest/expected/generated_test_sheet_data_floatformat.tex
147
+ - unittest/expected/generated_test_sheet_data_time_format.tex
148
+ - unittest/expected/generated_test_sheet_format.tex
149
+ - unittest/expected/generated_test_sheet_merged_areas.tex
150
+ - unittest/expected/test_bin_boolean.tex
151
+ - unittest/expected/test_bin_date.tex
152
+ - unittest/expected/test_bin_default.tex
153
+ - unittest/expected/test_bin_float.tex
154
+ - unittest/expected/test_bin_select_sheet.tex
155
+ - unittest/expected/test_bin_with_target.tex
156
+ - unittest/expected/test_default_sheet.tex
157
+ - unittest/expected/test_sheet1.tex
158
+ - unittest/expected/test_sheet1_floatformat.tex
159
+ - unittest/expected/test_sheet2.tex