rubyXL 1.0.4
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/Gemfile +16 -0
- data/Gemfile.lock +34 -0
- data/LICENSE.txt +20 -0
- data/README +0 -0
- data/README.rdoc +19 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/lib/.DS_Store +0 -0
- data/lib/Hash.rb +60 -0
- data/lib/cell.rb +360 -0
- data/lib/color.rb +14 -0
- data/lib/parser.rb +413 -0
- data/lib/private_class.rb +182 -0
- data/lib/rubyXL.rb +9 -0
- data/lib/test.html +1 -0
- data/lib/tests/test.rb +110 -0
- data/lib/tests/test10.rb +16 -0
- data/lib/tests/test2.rb +118 -0
- data/lib/tests/test3.rb +76 -0
- data/lib/tests/test4.rb +92 -0
- data/lib/tests/test5.rb +90 -0
- data/lib/tests/test6.rb +50 -0
- data/lib/tests/test7.rb +48 -0
- data/lib/tests/test8.rb +12 -0
- data/lib/tests/test9.rb +60 -0
- data/lib/workbook.rb +336 -0
- data/lib/worksheet.rb +1245 -0
- data/lib/writer/app_writer.rb +62 -0
- data/lib/writer/calc_chain_writer.rb +33 -0
- data/lib/writer/content_types_writer.rb +77 -0
- data/lib/writer/core_writer.rb +51 -0
- data/lib/writer/root_rels_writer.rb +25 -0
- data/lib/writer/shared_strings_writer.rb +44 -0
- data/lib/writer/styles_writer.rb +376 -0
- data/lib/writer/theme_writer.rb +346 -0
- data/lib/writer/workbook_rels_writer.rb +59 -0
- data/lib/writer/workbook_writer.rb +77 -0
- data/lib/writer/worksheet_writer.rb +208 -0
- data/lib/zip.rb +20 -0
- data/pkg/rubyXL-1.0.4.gem +0 -0
- data/rubyXL.gemspec +106 -0
- data/spec/lib/cell_spec.rb +359 -0
- data/spec/lib/color_spec.rb +14 -0
- data/spec/lib/hash_spec.rb +28 -0
- data/spec/lib/parser_spec.rb +49 -0
- data/spec/lib/workbook_spec.rb +51 -0
- data/spec/lib/worksheet_spec.rb +1650 -0
- metadata +222 -0
data/lib/rubyXL.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
$: << File.expand_path(File.dirname(__FILE__))
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'workbook'))
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'private_class'))
|
4
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'worksheet'))
|
5
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'cell'))
|
6
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'parser'))
|
7
|
+
|
8
|
+
module RubyXL
|
9
|
+
end
|
data/lib/test.html
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<!doctype html><html><head></head><body><h1 style='text-align:center'>/Users/vbhagwat/Documents/excelTestFiles/threeSheetWorkbook/threeSheetWorkbook.xlsx</h1><h2>Sheet1</h2><table border="1"><tr><td style="color:#000000; background-color:#ffffff">1</td></tr></table><br /><br /><h2>ASD</h2><table border="1"><tr><td style="color:#000000; background-color:#ffffff">1</td><td style="color:#000000; background-color:#ffffff">2</td><td style="color:#000000; background-color:#ffffff">3</td></tr></table><br /><br /><h2>asdf</h2><table border="1"><tr><td style="color:#000000; background-color:#ffffff">1</td><td>----</td><td>----</td></tr><tr><td>----</td><td style="color:#000000; background-color:#ffffff">2</td><td>----</td></tr><tr><td>----</td><td>----</td><td style="color:#000000; background-color:#ffffff">3</td></tr></table><br /><br /></body></html>
|
data/lib/tests/test.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
require '../rubyXL'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'FileUtils'
|
4
|
+
require 'nokogiri'
|
5
|
+
|
6
|
+
|
7
|
+
module RubyXL
|
8
|
+
#writes blank_workbook to .xlsx
|
9
|
+
|
10
|
+
# file_p ath = "/Users/vbhagwat/Documents/excelTestFiles/styledWorkbook/styledWorkbook.xlsx"
|
11
|
+
# file_path = "/Users/vbhagwat/Documents/excelTestFiles/smallFormulaWorkbook2/smallFormulaWorkbook2.xlsx"
|
12
|
+
# file_path = "/Users/vbhagwat/Documents/excelTestFiles/threeSheetWorkbook/threeSheetWorkbook.xlsx"
|
13
|
+
# file_path = "/Users/vbhagwat/Documents/excelTestFiles/numWorkbook2/numWorkbook2.xlsx"
|
14
|
+
file_path = "/Users/vbhagwat/Documents/excelTestFiles/blankWorkbook/blankWorkbook.xlsx"
|
15
|
+
# file_path = '/Users/vbhagwat/Desktop/test2/Archive.xlsx'
|
16
|
+
# file_path = "/Users/vbhagwat/Desktop/5-1_5-20.xlsx"
|
17
|
+
|
18
|
+
# puts 'begin parsing ' + file_path
|
19
|
+
# wb = Parser.parse(file_path)
|
20
|
+
# puts 'completed parsing ' + file_path
|
21
|
+
|
22
|
+
# def initialize(worksheets,filepath,creator=nil,modifier=nil,created_at=nil,modified_at=nil, company=nil, application=nil,appversion=nil,
|
23
|
+
|
24
|
+
|
25
|
+
dirpath = '/Users/vbhagwat/Documents/excelTestFiles'
|
26
|
+
wb = Workbook.new(
|
27
|
+
[], #worksheets
|
28
|
+
file_path, #filepath
|
29
|
+
'Vivek Bhagwat', #creator
|
30
|
+
'Vivek Bhagwat', #modifier
|
31
|
+
'2011-05-16T15:41:00Z', #created_at
|
32
|
+
'Gilt Groupe', #company
|
33
|
+
'Microsoft Macintosh Excel', #application
|
34
|
+
'12.0000')
|
35
|
+
wb.worksheets = [Worksheet.new(wb,'Sheet1',[[nil]])]
|
36
|
+
wb2 = Workbook.new(
|
37
|
+
[], #worksheets
|
38
|
+
file_path, #filepath
|
39
|
+
'Vivek Bhagwat', #creator
|
40
|
+
'Vivek Bhagwat', #modifier
|
41
|
+
'2011-05-16T15:41:00Z', #created_at
|
42
|
+
'Gilt Groupe', #company
|
43
|
+
'Microsoft Macintosh Excel', #application
|
44
|
+
'12.0000')
|
45
|
+
wb.worksheets = [Worksheet.new('Sheet1')]
|
46
|
+
|
47
|
+
wb2[0].sheet_data = [[Cell.new(wb2[0],0,0,'6/8/2011'), Cell.new(wb2[0],0,1,'test2')]]
|
48
|
+
|
49
|
+
# wb = Parser.parse(file_path)
|
50
|
+
file_path = '/Users/vbhagwat/Desktop/test2/Output/blank.xlsx'
|
51
|
+
puts 'begin writing ' + file_path
|
52
|
+
p wb
|
53
|
+
wb.write(file_path)
|
54
|
+
puts 'completed writing ' + file_path
|
55
|
+
|
56
|
+
# file_path = "/Users/vbhagwat/Documents/excelTestFiles/twoSheetWorkbook/twoSheetWorkbook.xlsx"
|
57
|
+
file_path = "/Users/vbhagwat/Documents/excelTestFiles/styledWorkbook7/styledWorkbook7.xlsx"
|
58
|
+
|
59
|
+
wb3 = Parser.parse(file_path)
|
60
|
+
wb3.write('/Users/vbhagwat/Desktop/test2/Output/small_before.xlsx')
|
61
|
+
|
62
|
+
|
63
|
+
# file_path = "/Users/vbhagwat/Desktop/5-1_5-20.xlsx"
|
64
|
+
wb2 = Parser.parse(file_path)
|
65
|
+
file_path = '/Users/vbhagwat/Desktop/test2/Output/small.xlsx'
|
66
|
+
|
67
|
+
wb2.worksheets[0].change_row_font_name(1,'Courier') #0 indexed.
|
68
|
+
wb2.worksheets[0].change_row_font_size(1,30) #0 indexed.
|
69
|
+
cell = wb2.worksheets[0].add_cell(0,0,'A1')
|
70
|
+
wb2.worksheets[0].change_row_fill(0,'00FF00')
|
71
|
+
wb2.worksheets[0].add_cell(0,1,'B1')
|
72
|
+
|
73
|
+
wb2.worksheets[0].change_column_fill(0,'FFFF00')
|
74
|
+
wb2.worksheets[0].change_column_font_size(0,20)
|
75
|
+
wb2.worksheets[0].change_column_width(0,30)
|
76
|
+
wb2.worksheets[0].change_row_height(2,100)
|
77
|
+
|
78
|
+
|
79
|
+
p wb2.worksheets[0].row_styles
|
80
|
+
|
81
|
+
wb2.worksheets[0].insert_row(0)
|
82
|
+
|
83
|
+
wb2.worksheets[0].change_column_width(3,50)
|
84
|
+
|
85
|
+
wb2.worksheets[0].insert_column(0)
|
86
|
+
|
87
|
+
p wb2.worksheets[0].row_styles
|
88
|
+
# raise 'end'
|
89
|
+
|
90
|
+
puts 'begin writing ' + file_path
|
91
|
+
# p wb2
|
92
|
+
wb2[0].change_row_font_color(2,'ffffff')
|
93
|
+
|
94
|
+
wb2.write(file_path)
|
95
|
+
puts 'completed writing ' + file_path
|
96
|
+
|
97
|
+
# app = Writer::AppWriter.new(dirpath, wb)
|
98
|
+
# p app.hash
|
99
|
+
# two = app.hash
|
100
|
+
# puts ''
|
101
|
+
# app.write()
|
102
|
+
#
|
103
|
+
#
|
104
|
+
# str = XmlSimple.xml_out(two)
|
105
|
+
# str = str.gsub(/opt/,'Properties')
|
106
|
+
# puts '..'
|
107
|
+
# p str
|
108
|
+
|
109
|
+
|
110
|
+
end
|
data/lib/tests/test10.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rubyXL'
|
3
|
+
|
4
|
+
@workbook = RubyXL::Workbook.new
|
5
|
+
@worksheet = RubyXL::Worksheet.new(@workbook)
|
6
|
+
@workbook.worksheets[0] = @worksheet
|
7
|
+
(0..10).each do |i|
|
8
|
+
(0..10).each do |j|
|
9
|
+
@worksheet.add_cell(i, j, "#{i}:#{j}")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
@worksheet.change_column_font_color(0,'ff0000')
|
14
|
+
@worksheet.change_column_font_size(0,"30")
|
15
|
+
|
16
|
+
@workbook.write('/Users/vbhagwat/Desktop/test2/Output/test10.xlsx')
|
data/lib/tests/test2.rb
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'xmlsimple'
|
3
|
+
require 'zip/zip'
|
4
|
+
require 'FileUtils'
|
5
|
+
require 'zip/zipfilesystem'
|
6
|
+
require 'zip'
|
7
|
+
|
8
|
+
module RubyXL
|
9
|
+
#takes /Users/vbhagwat/Desktop/test1/Workbook1.xlsx
|
10
|
+
#copies, unzips, zips
|
11
|
+
|
12
|
+
# #takes path of directoy to be compressed
|
13
|
+
# #writes zip in that directory
|
14
|
+
# def compress(path)
|
15
|
+
# puts 'path'
|
16
|
+
# p path
|
17
|
+
# path.sub!(%r[/$],'')
|
18
|
+
# p path
|
19
|
+
# archive = File.join(path,File.basename(path))+'.zip'
|
20
|
+
# puts 'archive'
|
21
|
+
# p archive
|
22
|
+
# FileUtils.rm archive, :force=>true
|
23
|
+
# Zip::ZipFile.open(archive, 'w') do |zipfile|
|
24
|
+
# Dir["#{path}/**/**"].reject{|f|f==archive}.each do |file|
|
25
|
+
# puts 'here'
|
26
|
+
# p file.to_s()
|
27
|
+
# temp = file
|
28
|
+
# p temp.sub(path+'/','')
|
29
|
+
# zipfile.add(file.sub(path+'/',''),file)
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# #unzips file
|
35
|
+
# def unzip(zipPath,zipDirPath)
|
36
|
+
# Zip::ZipFile.open(zipPath) { |zip_file|
|
37
|
+
# zip_file.each { |f|
|
38
|
+
# fpath = File.join(zipDirPath, f.name)
|
39
|
+
# FileUtils.mkdir_p(File.dirname(fpath))
|
40
|
+
# zip_file.extract(f, fpath) unless File.exist?(fpath)
|
41
|
+
# }
|
42
|
+
# }
|
43
|
+
# end
|
44
|
+
|
45
|
+
z = MyZip.new
|
46
|
+
|
47
|
+
|
48
|
+
dirPath = '/Users/vbhagwat/Desktop/test2/'
|
49
|
+
filePath = dirPath + 'Workbook1.xlsx'
|
50
|
+
zipDirPath = dirPath+'Workbook1/'
|
51
|
+
zipPath = zipDirPath + 'Workbook1.zip'
|
52
|
+
|
53
|
+
FileUtils.mkdir_p(dirPath+'Workbook1')
|
54
|
+
FileUtils.cp(filePath,zipPath)
|
55
|
+
|
56
|
+
z.unzip(zipPath,zipDirPath)
|
57
|
+
#TODO test if xml_in then xml_out corrupts it
|
58
|
+
# FileUtils.rm(zipPath) #removes zip file created
|
59
|
+
|
60
|
+
#commented out because i copy this anyway
|
61
|
+
# contents = XmlSimple.xml_in(zipDirPath + '[Content_Types].xml')
|
62
|
+
# contents = XmlSimple.xml_out(contents).gsub(/<\/?opt>/,'')
|
63
|
+
# file = File.new(zipDirPath+'[Content_Types].xml', 'w+')
|
64
|
+
# file.write(contents)
|
65
|
+
# file.close
|
66
|
+
|
67
|
+
# contents = XmlSimple.xml_in(zipDirPath+'docProps/app.xml')
|
68
|
+
# contents = XmlSimple.xml_out(contents).gsub(/<\/?opt>/,'')
|
69
|
+
# file = File.new(zipDirPath+'docProps/app.xml', 'w+')
|
70
|
+
# file.write(contents)
|
71
|
+
# file.close
|
72
|
+
#
|
73
|
+
# contents = XmlSimple.xml_in(zipDirPath+'docProps/core.xml')
|
74
|
+
# contents = XmlSimple.xml_out(contents).gsub(/<\/?opt>/,'')
|
75
|
+
# file = File.new(zipDirPath+'docProps/core.xml', 'w+')
|
76
|
+
# file.write(contents)
|
77
|
+
# file.close
|
78
|
+
#
|
79
|
+
# contents = XmlSimple.xml_in(zipDirPath+'xl/_rels/workbook.xml.rels')
|
80
|
+
# contents = XmlSimple.xml_out(contents).gsub(/<\/?opt>/,'')
|
81
|
+
# file = File.new(zipDirPath+'xl/_rels/workbook.xml.rels', 'w+')
|
82
|
+
# file.write(contents)
|
83
|
+
# file.close
|
84
|
+
#
|
85
|
+
# contents = XmlSimple.xml_in(zipDirPath+'xl/styles.xml')
|
86
|
+
# contents = XmlSimple.xml_out(contents).gsub(/<\/?opt>/,'')
|
87
|
+
# file = File.new(zipDirPath+'xl/styles.xml', 'w+')
|
88
|
+
# file.write(contents)
|
89
|
+
# file.close
|
90
|
+
#
|
91
|
+
# contents = XmlSimple.xml_in(zipDirPath+'xl/workbook.xml')
|
92
|
+
# contents = XmlSimple.xml_out(contents).gsub(/<\/?opt>/,'')
|
93
|
+
# file = File.new(zipDirPath+'xl/workbook.xml', 'w+')
|
94
|
+
# file.write(contents)
|
95
|
+
# file.close
|
96
|
+
#
|
97
|
+
# #commented out because i copy this anyway
|
98
|
+
# # contents = XmlSimple.xml_in(zipDirPath+'xl/theme/theme1.xml')
|
99
|
+
# # contents = XmlSimple.xml_out(contents).gsub(/<\/?opt>/,'')
|
100
|
+
# # file = File.new(zipDirPath+'[Content_Types].xml', 'w+')
|
101
|
+
# # file.write(contents)
|
102
|
+
# # file.close
|
103
|
+
#
|
104
|
+
# contents = XmlSimple.xml_in(zipDirPath+'xl/worksheets/sheet1.xml')
|
105
|
+
# contents = XmlSimple.xml_out(contents).gsub(/<\/?opt>/,'')
|
106
|
+
# file = File.new(zipDirPath+'xl/worksheets/sheet1.xml', 'w+')
|
107
|
+
# file.write(contents)
|
108
|
+
# file.close
|
109
|
+
|
110
|
+
#TODO manually reorder the xml tags to correlate, then compress using this compression method,
|
111
|
+
#(not archive utility), then see if that xlsx file opens
|
112
|
+
|
113
|
+
z.compress('/Users/vbhagwat/Desktop/test2/Workbook1/')
|
114
|
+
|
115
|
+
|
116
|
+
# compress(dirPath)
|
117
|
+
|
118
|
+
end
|
data/lib/tests/test3.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'FileUtils'
|
3
|
+
require 'writer'
|
4
|
+
|
5
|
+
|
6
|
+
module RubyXL
|
7
|
+
|
8
|
+
def convertToIndex(cellString)
|
9
|
+
index = Array.new(2)
|
10
|
+
index[0]=-1
|
11
|
+
index[1]=-1
|
12
|
+
if(cellString =~ /^([A-Z]+)(\d+)/)
|
13
|
+
one = $1.to_s()
|
14
|
+
row = Integer($2) - 1 #-1 for 0 indexing
|
15
|
+
col = 0
|
16
|
+
i = 0
|
17
|
+
one = one.reverse #because of 26^i calculation
|
18
|
+
one.each_byte do |c|
|
19
|
+
intVal = c - 64 #converts A to 1 (0, actually)
|
20
|
+
col += intVal * 26**(i)
|
21
|
+
i=i+1
|
22
|
+
end
|
23
|
+
col -= 1 #zer0 index
|
24
|
+
index[0] = row
|
25
|
+
index[1] = col
|
26
|
+
end
|
27
|
+
index
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
#TODO FIX THIS
|
32
|
+
def convertToCell(row, col)
|
33
|
+
puts "input = (#{row}, #{col})"
|
34
|
+
#convert col to letter, convert row to row-1, join
|
35
|
+
rowString = (row + 1).to_s #+1 for 0 indexing
|
36
|
+
colString = ''
|
37
|
+
unless col == 0
|
38
|
+
colLength = 1+Integer(Math.log(col) / Math.log(26)) #opposite of 26**
|
39
|
+
else
|
40
|
+
colLength = 1
|
41
|
+
end
|
42
|
+
|
43
|
+
puts "colLength = #{colLength}"
|
44
|
+
1.upto(colLength) do |i|
|
45
|
+
puts "i = #{i}"
|
46
|
+
puts "col = #{col}"
|
47
|
+
puts "26**(colLength-i) = #{26**(colLength-i)}"
|
48
|
+
|
49
|
+
if i == colLength
|
50
|
+
col+=1
|
51
|
+
end
|
52
|
+
|
53
|
+
if col >= 26**(colLength-i)
|
54
|
+
intVal = col / 26**(colLength-i) #+1 for 0 indexing
|
55
|
+
intVal += 64 #converts 1 to A, etc.
|
56
|
+
puts "intVal = #{intVal}"
|
57
|
+
puts "col = #{col}, #{intVal.chr}"
|
58
|
+
|
59
|
+
# colString = intVal.chr + colString
|
60
|
+
colString += intVal.chr
|
61
|
+
|
62
|
+
puts "colString = #{colString}"
|
63
|
+
col -= (intVal-64)*26**(colLength-i)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
p colString
|
67
|
+
p rowString
|
68
|
+
|
69
|
+
colString+rowString
|
70
|
+
end
|
71
|
+
row = 0
|
72
|
+
col = 16168
|
73
|
+
|
74
|
+
puts "(#{row},#{col})=>#{convertToCell(row,col)}"
|
75
|
+
|
76
|
+
end
|
data/lib/tests/test4.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'zip/zip'
|
3
|
+
# require 'File'
|
4
|
+
require 'FileUtils'
|
5
|
+
|
6
|
+
module RubyXL
|
7
|
+
# class Test4
|
8
|
+
def write_content_types()
|
9
|
+
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
10
|
+
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/><Default Extension="jpeg" ContentType="image/jpeg"/><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/><Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/><Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/></Types>'
|
11
|
+
end
|
12
|
+
|
13
|
+
def write_root_rels()
|
14
|
+
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
15
|
+
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail" Target="docProps/thumbnail.jpeg"/></Relationships>'
|
16
|
+
end
|
17
|
+
|
18
|
+
def write_core_properties()
|
19
|
+
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
20
|
+
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:creator>Vivek Bhagwat</dc:creator><cp:lastModifiedBy>Vivek Bhagwat</cp:lastModifiedBy><dcterms:created xsi:type="dcterms:W3CDTF">2011-05-25T19:40:48Z</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">2011-05-25T19:40:51Z</dcterms:modified></cp:coreProperties>'
|
21
|
+
end
|
22
|
+
|
23
|
+
def write_app_properties()
|
24
|
+
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
25
|
+
<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><Application>Microsoft Macintosh Excel</Application><DocSecurity>0</DocSecurity><ScaleCrop>false</ScaleCrop><HeadingPairs><vt:vector size="2" baseType="variant"><vt:variant><vt:lpstr>Worksheets</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector size="1" baseType="lpstr"><vt:lpstr>Sheet1</vt:lpstr></vt:vector></TitlesOfParts><Company>Gilt Groupe</Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>12.0000</AppVersion></Properties>'
|
26
|
+
end
|
27
|
+
|
28
|
+
def write_workbook_rels()
|
29
|
+
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
30
|
+
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>'
|
31
|
+
end
|
32
|
+
|
33
|
+
def write_workbook()
|
34
|
+
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
35
|
+
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><fileVersion appName="xl" lastEdited="4" lowestEdited="4" rupBuild="4505"/><workbookPr date1904="1" showInkAnnotation="0" autoCompressPictures="0"/><bookViews><workbookView xWindow="-20" yWindow="-20" windowWidth="34400" windowHeight="22000" tabRatio="500"/></bookViews><sheets><sheet name="Sheet1" sheetId="1" r:id="rId1"/></sheets><calcPr calcId="130407" concurrentCalc="0"/><extLst><ext xmlns:mx="http://schemas.microsoft.com/office/mac/excel/2008/main" uri="http://schemas.microsoft.com/office/mac/excel/2008/main"><mx:ArchID Flags="2"/></ext></extLst></workbook>'
|
36
|
+
end
|
37
|
+
|
38
|
+
#only writes sheet1.xml
|
39
|
+
def write_worksheet()
|
40
|
+
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
41
|
+
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="urn:schemas-microsoft-com:mac:vml" mc:Ignorable="mv" mc:PreserveAttributes="mv:*"><dimension ref="A1"/><sheetViews><sheetView tabSelected="1" view="pageLayout" workbookViewId="0"/></sheetViews><sheetFormatPr baseColWidth="10" defaultRowHeight="13"/><sheetData/><phoneticPr fontId="1" type="noConversion"/><pageMargins left="0.75" right="0.75" top="1" bottom="1" header="0.5" footer="0.5"/><pageSetup orientation="portrait" horizontalDpi="4294967292" verticalDpi="4294967292"/><extLst><ext xmlns:mx="http://schemas.microsoft.com/office/mac/excel/2008/main" uri="http://schemas.microsoft.com/office/mac/excel/2008/main"><mx:PLV Mode="1" OnePage="0" WScale="0"/></ext></extLst></worksheet>'
|
42
|
+
end
|
43
|
+
|
44
|
+
def write_styles()
|
45
|
+
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
46
|
+
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><fonts count="2"><font><sz val="10"/><name val="Verdana"/></font><font><sz val="8"/><name val="Verdana"/></font></fonts><fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles><dxfs count="0"/><tableStyles count="0" defaultTableStyle="TableStyleMedium9"/></styleSheet>'
|
47
|
+
end
|
48
|
+
|
49
|
+
def write_theme()
|
50
|
+
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
51
|
+
<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="MS Pゴシック"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="MS Pゴシック"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>'
|
52
|
+
end
|
53
|
+
|
54
|
+
filepath = '/Users/vbhagwat/Desktop/blankWorkbook.xlsx'
|
55
|
+
dirpath = ''
|
56
|
+
if(filepath =~ /((.|\s)*)\.xlsx$/)
|
57
|
+
dirpath = $1.to_s()
|
58
|
+
end
|
59
|
+
filename = ''
|
60
|
+
if(filepath =~ /\/((.|\s)*)\/((.|\s)*)\.xlsx$/)
|
61
|
+
filename = $3.to_s()
|
62
|
+
end
|
63
|
+
# p filepath
|
64
|
+
# p dirpath
|
65
|
+
# p filename
|
66
|
+
|
67
|
+
zippath = dirpath + '/' + filename + '.zip'
|
68
|
+
File.unlink(zippath) if File.exists?(zippath)
|
69
|
+
Zip::ZipFile.open(zippath, Zip::ZipFile::CREATE) do |zipfile|
|
70
|
+
zipfile.get_output_stream('[Content_Types].xml') {|f| f.puts(write_content_types())}
|
71
|
+
|
72
|
+
zipfile.get_output_stream('_rels/.rels') {|f| f.puts(write_root_rels())}
|
73
|
+
|
74
|
+
zipfile.get_output_stream('docProps/app.xml') {|f| f.puts(write_app_properties())}
|
75
|
+
|
76
|
+
zipfile.get_output_stream('docProps/core.xml') {|f| f.puts(write_core_properties())}
|
77
|
+
|
78
|
+
zipfile.get_output_stream('xl/theme/theme1.xml') {|f| f.puts(write_theme())}
|
79
|
+
|
80
|
+
zipfile.get_output_stream('xl/_rels/workbook.xml.rels') {|f| f.puts(write_workbook_rels())}
|
81
|
+
|
82
|
+
zipfile.get_output_stream('xl/workbook.xml') {|f| f.puts(write_workbook())}
|
83
|
+
|
84
|
+
zipfile.get_output_stream('xl/styles.xml') {|f| f.puts(write_styles())}
|
85
|
+
|
86
|
+
zipfile.get_output_stream('xl/worksheets/sheet1.xml') {|f| f.puts(write_worksheet())}
|
87
|
+
|
88
|
+
zipfile.add('docProps/thumbnail.jpeg','/Users/vbhagwat/Desktop/test2/Workbook1/docProps/thumbnail.jpeg')
|
89
|
+
# zipfile.get_output_stream('docProps/thumbnail.jpeg') {|f| }
|
90
|
+
end
|
91
|
+
# end
|
92
|
+
end
|
data/lib/tests/test5.rb
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
require '../rubyXL'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'nokogiri'
|
4
|
+
# require File.expand_path(File.join(File.dirname(__FILE__),'Hash'))
|
5
|
+
# require File.expand_path(File.join(File.dirname(__FILE__),'cell'))
|
6
|
+
# require File.expand_path(File.join(File.dirname(__FILE__),'workbook'))
|
7
|
+
# require File.expand_path(File.join(File.dirname(__FILE__),'parser'))
|
8
|
+
|
9
|
+
# module RubyXL
|
10
|
+
file_path = '/Users/vbhagwat/Documents/excelTestFiles/styledWorkbook2/styledWorkbook2.xlsx'
|
11
|
+
wb = RubyXL::Parser.parse(file_path)
|
12
|
+
puts "parsed #{file_path}"
|
13
|
+
p wb.cell_xfs
|
14
|
+
cell = wb.worksheets[0].sheet_data[0][0]
|
15
|
+
cell2 = wb.worksheets[0].sheet_data[1][1]
|
16
|
+
cell3 = wb.worksheets[0].sheet_data[0][2]
|
17
|
+
|
18
|
+
cell4 = wb.worksheets[0].add_cell(4,4,'test')
|
19
|
+
cell5 = wb.worksheets[0].add_cell(4,4,'test2',nil,false)
|
20
|
+
|
21
|
+
# cells = Array.new()
|
22
|
+
#
|
23
|
+
# cells << Cell.new(0,3,'black', nil,'str') #8
|
24
|
+
# cells << Cell.new(0,4,'white',nil,'str')
|
25
|
+
# cells << Cell.new(0,5,'red',nil,'str')
|
26
|
+
# cells << Cell.new(0,6,'brightgreen',nil,'str')
|
27
|
+
# cells << Cell.new(0,7,'blue',nil,'str')
|
28
|
+
# cells << Cell.new(0,8,'yellow',nil,'str')
|
29
|
+
# cells << Cell.new(0,9,'magenta',nil,'str')
|
30
|
+
# cells << Cell.new(0,10,'cyan',nil,'str')
|
31
|
+
# cells << Cell.new(0,11,'darkred',nil,'str')
|
32
|
+
# cells << Cell.new(0,12,'green',nil,'str')
|
33
|
+
# cells << Cell.new(0,13,'darkblue',nil,'str')
|
34
|
+
# cells << Cell.new(0,14,'darkyellow',nil,'str')
|
35
|
+
# cells << Cell.new(0,15,'purple',nil,'str')
|
36
|
+
# cells << Cell.new(0,16,'teal',nil,'str')
|
37
|
+
# cells << Cell.new(0,17,'gray25',nil,'str')
|
38
|
+
# cells << Cell.new(0,18,'gray50',nil,'str') #23
|
39
|
+
# 19.upto(58) do |ind|
|
40
|
+
# cells << Cell.new(0,ind,(ind+5).to_s,nil,'str')
|
41
|
+
# end
|
42
|
+
#
|
43
|
+
# cells.each_with_index do |c,i|
|
44
|
+
# wb.worksheets[0].sheet_data[0] << c
|
45
|
+
# c.change_fill((i+8).to_s)
|
46
|
+
# end
|
47
|
+
def print_stuff(wb)
|
48
|
+
puts 'begin print_stuff'
|
49
|
+
puts ''
|
50
|
+
puts ''
|
51
|
+
puts ''
|
52
|
+
p wb.cell_xfs[:xf][0]
|
53
|
+
puts ''
|
54
|
+
puts ''
|
55
|
+
puts ''
|
56
|
+
puts 'end print_stuff'
|
57
|
+
end
|
58
|
+
|
59
|
+
print_stuff(wb)
|
60
|
+
cell.change_font_name('Verdana')
|
61
|
+
print_stuff(wb)
|
62
|
+
cell2.change_font_size(30)
|
63
|
+
print_stuff(wb)
|
64
|
+
cell.change_fill('ff0000')
|
65
|
+
print_stuff(wb)
|
66
|
+
wb.worksheets[0].change_row_font_name(1,'Courier')
|
67
|
+
print_stuff(wb)
|
68
|
+
wb.worksheets[0].change_row_fill(1,'00ff00')
|
69
|
+
print_stuff(wb)
|
70
|
+
wb.worksheets[0].change_column_font_size(0,20)
|
71
|
+
print_stuff(wb)
|
72
|
+
cell.change_font_bold(false)
|
73
|
+
print_stuff(wb)
|
74
|
+
cell2.change_font_underline(true)
|
75
|
+
print_stuff(wb)
|
76
|
+
cell3.change_fill('000000')
|
77
|
+
print_stuff(wb)
|
78
|
+
cell3.change_font_name('Verddddana')
|
79
|
+
print_stuff(wb)
|
80
|
+
# cell3.change_fill('52')
|
81
|
+
|
82
|
+
wb.write('/Users/vbhagwat/Desktop/test2/Output/cell.xlsx')
|
83
|
+
|
84
|
+
p wb.style_corrector
|
85
|
+
|
86
|
+
print_stuff(wb)
|
87
|
+
puts 'completed writing /Users/vbhagwat/Desktop/test2/Output/cell.xlsx'
|
88
|
+
#TODO
|
89
|
+
|
90
|
+
# end
|