Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save clemensp/1633833 to your computer and use it in GitHub Desktop.
Save clemensp/1633833 to your computer and use it in GitHub Desktop.
Patch for the empty row fix
From 121eb6b415f65713b9dedf7004fd6dabeca4e5b9 Mon Sep 17 00:00:00 2001
From: Clemens Park <clemens.park@gmail.com>
Date: Wed, 23 Nov 2011 12:40:04 -0500
Subject: [PATCH] adds the fix to allow the writing of empty rows
---
.gitignore | 2 +
lib/spreadsheet/excel/writer/worksheet.rb | 12 ++++--
test/excel/writer/worksheet.rb | 55 ++++++++++++++++++++++------
3 files changed, 53 insertions(+), 16 deletions(-)
create mode 100644 .gitignore
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9f9eea6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+tags
+*.swp
diff --git a/lib/spreadsheet/excel/writer/worksheet.rb b/lib/spreadsheet/excel/writer/worksheet.rb
index 638d842..cf39989 100644
--- a/lib/spreadsheet/excel/writer/worksheet.rb
+++ b/lib/spreadsheet/excel/writer/worksheet.rb
@@ -755,14 +755,18 @@ and minimal code that generates this warning. Thanks!
else
height * TWIPS
end
- # TODO: Row spacing
- data = [
+
+ attrs = [
row.idx,
row.first_used,
row.first_unused,
height,
- opts,
- ].pack binfmt(:row)
+ opts]
+
+ return if attrs.any?(&:nil?)
+
+ # TODO: Row spacing
+ data = attrs.pack binfmt(:row)
write_op opcode(:row), data
end
def write_rowblock block
diff --git a/test/excel/writer/worksheet.rb b/test/excel/writer/worksheet.rb
index 3cf6dfe..5e5d701 100644
--- a/test/excel/writer/worksheet.rb
+++ b/test/excel/writer/worksheet.rb
@@ -7,18 +7,49 @@ require 'spreadsheet/excel/writer/worksheet'
module Spreadsheet
module Excel
module Writer
-class TestWorksheet < Test::Unit::TestCase
- def test_need_number
- sheet = Worksheet.new nil, nil
- assert_equal false, sheet.need_number?(10)
- assert_equal false, sheet.need_number?(114.55)
- assert_equal false, sheet.need_number?(0.1)
- assert_equal false, sheet.need_number?(0.01)
- assert_equal false, sheet.need_number?(0 / 0.0) # NaN
- assert_equal true, sheet.need_number?(0.001)
- assert_equal true, sheet.need_number?(10000000.0)
- end
-end
+ class TestWorksheet < Test::Unit::TestCase
+ def test_need_number
+ sheet = Worksheet.new nil, nil
+ assert_equal false, sheet.need_number?(10)
+ assert_equal false, sheet.need_number?(114.55)
+ assert_equal false, sheet.need_number?(0.1)
+ assert_equal false, sheet.need_number?(0.01)
+ assert_equal false, sheet.need_number?(0 / 0.0) # NaN
+ assert_equal true, sheet.need_number?(0.001)
+ assert_equal true, sheet.need_number?(10000000.0)
+ end
+
+ class RowMock
+ attr_accessor :idx, :first_used, :first_unused, :height, :outline_level
+
+ def initialize
+ @idx, @first_used, @first_unused, @height, @outline_level = 0,0,0,0,1
+ end
+
+ def method_missing name, *args
+ nil
+ end
+ end
+
+ def test_write_row_should_not_write_if_the_row_has_no_used_columns
+ sheet = Worksheet.new nil, nil
+ row = RowMock.new
+ row.first_used = nil
+
+ sheet.write_row row
+
+ assert_equal '', sheet.data
+ end
+
+ def test_write_row_should_write_if_any_column_is_used
+ sheet = Worksheet.new nil, nil
+ row = RowMock.new
+
+ sheet.write_row row
+
+ assert_equal false, sheet.data.empty?
+ end
+ end
end
end
end
--
1.7.5.4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment