rubyXL 1.1.5 → 1.1.6

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.5
1
+ 1.1.6
@@ -33,11 +33,11 @@ class Worksheet < PrivateClass
33
33
 
34
34
  def get_table(headers=[])
35
35
  validate_workbook
36
-
36
+
37
37
  if !headers.is_a?(Array)
38
38
  headers = [headers]
39
39
  end
40
-
40
+
41
41
  row_num = find_first_row_with_content(headers)
42
42
 
43
43
  if row_num.nil?
@@ -47,20 +47,21 @@ class Worksheet < PrivateClass
47
47
  table_hash = {}
48
48
  table_hash[:table] = []
49
49
 
50
- headers.each do |header|
51
- row_strings = @sheet_data[row_num].map { |cell| cell.nil? ? '' : cell.value.to_s }
52
- header_column = row_strings.index(header)
53
- table_hash[header.to_sym] = []
50
+ header_row = @sheet_data[row_num]
51
+ header_row.each_with_index do |header_cell, index|
52
+ next if header_cell.nil? || header_cell.value.nil?
53
+ header = header_cell.value.to_s
54
+ table_hash[header] = []
54
55
 
55
56
  original_row = row_num + 1
56
57
  current_row = original_row
57
58
 
58
- cell = @sheet_data[current_row][header_column]
59
+ cell = @sheet_data[current_row][index]
59
60
 
60
61
  # makes array of hashes in table_hash[:table]
61
- # as well as hash of arrays in table_hash[header.to_sym]
62
+ # as well as hash of arrays in table_hash[header]
62
63
  while !cell.nil? && !cell.value.nil?
63
- table_hash[header.to_sym] << cell.value
64
+ table_hash[header] << cell.value
64
65
 
65
66
  table_index = current_row - original_row
66
67
 
@@ -68,17 +69,17 @@ class Worksheet < PrivateClass
68
69
  table_hash[:table][table_index] = {}
69
70
  end
70
71
 
71
- table_hash[:table][table_index][header.to_sym] = cell.value
72
+ table_hash[:table][table_index][header] = cell.value
72
73
 
73
74
  current_row += 1
74
75
  if @sheet_data[current_row].nil?
75
76
  cell = nil
76
77
  else
77
- cell = @sheet_data[current_row][header_column]
78
+ cell = @sheet_data[current_row][index]
78
79
  end
79
80
  end
80
81
  end
81
-
82
+
82
83
  return table_hash
83
84
  end
84
85
 
@@ -374,11 +375,11 @@ class Worksheet < PrivateClass
374
375
 
375
376
  def add_cell_obj(cell, overwrite=true)
376
377
  validate_workbook
377
-
378
+
378
379
  if cell.nil?
379
380
  return cell
380
381
  end
381
-
382
+
382
383
  row = cell.row
383
384
  column = cell.column
384
385
 
@@ -401,27 +402,27 @@ class Worksheet < PrivateClass
401
402
  def delete_row(row_index=0)
402
403
  validate_workbook
403
404
  validate_nonnegative(row_index)
404
-
405
+
405
406
  if row_index >= @sheet_data.size
406
407
  return nil
407
408
  end
408
-
409
+
409
410
  deleted = @sheet_data.delete_at(row_index)
410
411
  row_num = row_index+1
411
-
412
+
412
413
  row_num.upto(@sheet_data.size) do |index|
413
414
  @row_styles[(index-1).to_s] = deep_copy(@row_styles[index.to_s])
414
415
  end
415
416
  @row_styles.delete(@sheet_data.size.to_s)
416
-
417
+
417
418
  #change row styles
418
419
  # raise row_styles.inspect
419
-
420
+
420
421
  #change cell row numbers
421
422
  (row_index...(@sheet_data.size-1)).each do |index|
422
423
  @sheet_data[index].map {|c| c.row -= 1 if c}
423
424
  end
424
-
425
+
425
426
  return deleted
426
427
  end
427
428
 
@@ -485,11 +486,11 @@ class Worksheet < PrivateClass
485
486
  def delete_column(col_index=0)
486
487
  validate_workbook
487
488
  validate_nonnegative(col_index)
488
-
489
+
489
490
  if col_index >= @sheet_data[0].size
490
491
  return nil
491
492
  end
492
-
493
+
493
494
  #delete column
494
495
  @sheet_data.map {|r| r.delete_at(col_index)}
495
496
 
@@ -501,7 +502,7 @@ class Worksheet < PrivateClass
501
502
  end
502
503
  end
503
504
  end
504
-
505
+
505
506
  #shift column styles
506
507
  #shift col styles 'left'
507
508
  @cols.each do |col|
@@ -578,19 +579,19 @@ class Worksheet < PrivateClass
578
579
  end
579
580
  end
580
581
  end
581
-
582
+
582
583
  def insert_cell(row=0,col=0,data=nil,formula=nil,shift=nil)
583
584
  validate_workbook
584
585
  validate_nonnegative(row)
585
586
  validate_nonnegative(col)
586
-
587
+
587
588
  increase_rows(row)
588
589
  increase_columns(col)
589
-
590
+
590
591
  if shift && shift != :right && shift != :down
591
592
  raise 'invalid shift option'
592
593
  end
593
-
594
+
594
595
  if shift == :right
595
596
  @sheet_data[row].insert(col,nil)
596
597
  (row...(@sheet_data[row].size)).each do |index|
@@ -604,10 +605,10 @@ class Worksheet < PrivateClass
604
605
  @sheet_data[index][col] = @sheet_data[index-1][col]
605
606
  end
606
607
  end
607
-
608
+
608
609
  return add_cell(row,col,data,formula)
609
610
  end
610
-
611
+
611
612
  # by default, only sets cell to nil
612
613
  # if :left is specified, method will shift row contents to the right of the deleted cell to the left
613
614
  # if :up is specified, method will shift column contents below the deleted cell upward
@@ -618,14 +619,14 @@ class Worksheet < PrivateClass
618
619
  if @sheet_data.size <= row || @sheet_data[row].size <= col
619
620
  return nil
620
621
  end
621
-
622
+
622
623
  cell = @sheet_data[row][col]
623
624
  @sheet_data[row][col]=nil
624
-
625
+
625
626
  if shift && shift != :left && shift != :up
626
627
  raise 'invalid shift option'
627
628
  end
628
-
629
+
629
630
  if shift == :left
630
631
  @sheet_data[row].delete_at(col)
631
632
  @sheet_data[row] << nil
@@ -645,7 +646,7 @@ class Worksheet < PrivateClass
645
646
  @sheet_data.last[col].row -= 1
646
647
  end
647
648
  end
648
-
649
+
649
650
  return cell
650
651
  end
651
652
 
@@ -1362,7 +1363,7 @@ class Worksheet < PrivateClass
1362
1363
  @workbook.fills[xf[:fillId].to_s][:count] += 1
1363
1364
  @workbook.borders[xf[:borderId].to_s][:count] += 1
1364
1365
  end
1365
-
1366
+
1366
1367
  # finds first row which contains at least all strings in cells_content
1367
1368
  def find_first_row_with_content(cells_content)
1368
1369
  validate_workbook
@@ -1376,6 +1377,6 @@ class Worksheet < PrivateClass
1376
1377
  end
1377
1378
  return nil
1378
1379
  end
1379
-
1380
+
1380
1381
  end #end class
1381
1382
  end
@@ -23,7 +23,11 @@ module Writer
23
23
  #attributes out of order here
24
24
  xml.fileVersion('appName'=>'xl', 'lastEdited'=>'4','lowestEdited'=>'4','rupBuild'=>'4505')
25
25
  #TODO following line - date 1904? check if mac only
26
- xml.workbookPr('date1904'=>@workbook.date1904.to_s, 'showInkAnnotation'=>'0', 'autoCompressPictures'=>'0')
26
+ if @workbook.date1904.nil? || @workbook.date1904.to_s == ''
27
+ xml.workbookPr('showInkAnnotation'=>'0', 'autoCompressPictures'=>'0')
28
+ else
29
+ xml.workbookPr('date1904'=>@workbook.date1904.to_s, 'showInkAnnotation'=>'0', 'autoCompressPictures'=>'0')
30
+ end
27
31
  xml.bookViews {
28
32
  #attributes out of order here
29
33
  xml.workbookView('xWindow'=>'-20', 'yWindow'=>'-20',
@@ -44,8 +48,8 @@ module Writer
44
48
  end
45
49
  }
46
50
  end
47
-
48
- # nokogiri builder creates CDATA tag around content,
51
+
52
+ # nokogiri builder creates CDATA tag around content,
49
53
  # using .text creates "html safe" &lt; and &gt; in place of < and >
50
54
  # xml to hash method does not seem to function well for this particular piece of xml
51
55
  xml.cdata @workbook.defined_names.to_s
@@ -68,7 +72,7 @@ module Writer
68
72
  contents = contents.gsub(/<!\[CDATA\[(.*)\]\]>/,'\1')
69
73
  contents = contents.sub(/<\?xml version=\"1.0\"\?>/,'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+"\n")
70
74
  puts '
71
-
75
+
72
76
  '
73
77
  puts contents
74
78
 
@@ -123,8 +123,11 @@ module Writer
123
123
  #TODO do xml.c for all cases, inside specific.
124
124
  # if dat.formula.nil?
125
125
  dat.style_index = @workbook.style_corrector[dat.style_index.to_s]
126
- xml.c('r'=>Cell.convert_to_cell(i,j),
127
- 's'=>dat.style_index.to_s, 't'=>dat.datatype) {
126
+ c_opts = {'r'=>Cell.convert_to_cell(i,j), 's'=>dat.style_index.to_s}
127
+ unless dat.datatype.nil? || dat.datatype == ''
128
+ c_opts['t'] = dat.datatype
129
+ end
130
+ xml.c(c_opts) {
128
131
  unless dat.formula.nil?
129
132
  if dat.formula_attributes.nil? || dat.formula_attributes.empty?
130
133
  xml.f dat.formula.to_s
@@ -191,7 +194,7 @@ module Writer
191
194
 
192
195
  unless @worksheet.legacy_drawing.nil?
193
196
  xml.legacyDrawing('r:id'=>@worksheet.legacy_drawing[:attributes][:id])
194
- end
197
+ end
195
198
 
196
199
  unless @worksheet.extLst.nil?
197
200
  xml.extLst {
data/rubyXL.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rubyXL}
8
- s.version = "1.1.5"
8
+ s.version = "1.1.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Vivek Bhagwat"]
12
- s.date = %q{2011-09-08}
12
+ s.date = %q{2011-09-13}
13
13
  s.description = %q{rubyXL is a gem which allows the parsing, creation, and manipulation of Microsoft Excel (.xlsx/.xlsm) Documents}
14
14
  s.email = %q{bhagwat.vivek@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -55,11 +55,10 @@ Gem::Specification.new do |s|
55
55
  s.homepage = %q{http://github.com/gilt/rubyXL}
56
56
  s.licenses = ["MIT"]
57
57
  s.require_paths = ["lib"]
58
- s.rubygems_version = %q{1.3.7}
58
+ s.rubygems_version = %q{1.4.2}
59
59
  s.summary = %q{rubyXL is a gem which allows the parsing, creation, and manipulation of Microsoft Excel (.xlsx/.xlsm) Documents}
60
60
 
61
61
  if s.respond_to? :specification_version then
62
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
63
62
  s.specification_version = 3
64
63
 
65
64
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyXL
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease: false
4
+ hash: 31
5
+ prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 5
10
- version: 1.1.5
9
+ - 6
10
+ version: 1.1.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Vivek Bhagwat
@@ -15,13 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-08 00:00:00 -04:00
18
+ date: 2011-09-13 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  type: :development
23
- prerelease: false
24
- name: shoulda
25
23
  version_requirements: &id001 !ruby/object:Gem::Requirement
26
24
  none: false
27
25
  requirements:
@@ -32,10 +30,10 @@ dependencies:
32
30
  - 0
33
31
  version: "0"
34
32
  requirement: *id001
33
+ prerelease: false
34
+ name: shoulda
35
35
  - !ruby/object:Gem::Dependency
36
36
  type: :development
37
- prerelease: false
38
- name: bundler
39
37
  version_requirements: &id002 !ruby/object:Gem::Requirement
40
38
  none: false
41
39
  requirements:
@@ -48,10 +46,10 @@ dependencies:
48
46
  - 0
49
47
  version: 1.0.0
50
48
  requirement: *id002
49
+ prerelease: false
50
+ name: bundler
51
51
  - !ruby/object:Gem::Dependency
52
52
  type: :development
53
- prerelease: false
54
- name: jeweler
55
53
  version_requirements: &id003 !ruby/object:Gem::Requirement
56
54
  none: false
57
55
  requirements:
@@ -64,10 +62,10 @@ dependencies:
64
62
  - 0
65
63
  version: 1.6.0
66
64
  requirement: *id003
65
+ prerelease: false
66
+ name: jeweler
67
67
  - !ruby/object:Gem::Dependency
68
68
  type: :development
69
- prerelease: false
70
- name: rcov
71
69
  version_requirements: &id004 !ruby/object:Gem::Requirement
72
70
  none: false
73
71
  requirements:
@@ -78,10 +76,10 @@ dependencies:
78
76
  - 0
79
77
  version: "0"
80
78
  requirement: *id004
79
+ prerelease: false
80
+ name: rcov
81
81
  - !ruby/object:Gem::Dependency
82
82
  type: :development
83
- prerelease: false
84
- name: nokogiri
85
83
  version_requirements: &id005 !ruby/object:Gem::Requirement
86
84
  none: false
87
85
  requirements:
@@ -94,10 +92,10 @@ dependencies:
94
92
  - 4
95
93
  version: 1.4.4
96
94
  requirement: *id005
95
+ prerelease: false
96
+ name: nokogiri
97
97
  - !ruby/object:Gem::Dependency
98
98
  type: :development
99
- prerelease: false
100
- name: rubyzip
101
99
  version_requirements: &id006 !ruby/object:Gem::Requirement
102
100
  none: false
103
101
  requirements:
@@ -110,10 +108,10 @@ dependencies:
110
108
  - 4
111
109
  version: 0.9.4
112
110
  requirement: *id006
111
+ prerelease: false
112
+ name: rubyzip
113
113
  - !ruby/object:Gem::Dependency
114
114
  type: :development
115
- prerelease: false
116
- name: rspec
117
115
  version_requirements: &id007 !ruby/object:Gem::Requirement
118
116
  none: false
119
117
  requirements:
@@ -126,6 +124,8 @@ dependencies:
126
124
  - 4
127
125
  version: 1.3.4
128
126
  requirement: *id007
127
+ prerelease: false
128
+ name: rspec
129
129
  description: rubyXL is a gem which allows the parsing, creation, and manipulation of Microsoft Excel (.xlsx/.xlsm) Documents
130
130
  email: bhagwat.vivek@gmail.com
131
131
  executables: []
@@ -200,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
200
  requirements: []
201
201
 
202
202
  rubyforge_project:
203
- rubygems_version: 1.3.7
203
+ rubygems_version: 1.4.2
204
204
  signing_key:
205
205
  specification_version: 3
206
206
  summary: rubyXL is a gem which allows the parsing, creation, and manipulation of Microsoft Excel (.xlsx/.xlsm) Documents