From 07b52a07a2257a606ad9c34409954f75317a3288 Mon Sep 17 00:00:00 2001 From: Erik Benoist Date: Sat, 15 Sep 2012 10:06:43 -0500 Subject: Preserve newlines in xml output for a worksheet --- lib/axlsx/workbook/worksheet/worksheet.rb | 9 ++++++++- test/workbook/worksheet/tc_worksheet.rb | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb index ea3a0d1a..e122a588 100644 --- a/lib/axlsx/workbook/worksheet/worksheet.rb +++ b/lib/axlsx/workbook/worksheet/worksheet.rb @@ -497,7 +497,14 @@ module Axlsx item.to_xml_string(str) if item end str << '' - str.gsub(/[[:cntrl:]]/,'') + + if RUBY_VERSION == "1.8.7" + nasty_control_char_matcher = Regexp.new("[\x01\x02\x03\x04\x05\x06\x07\x08\x1F\v\xE2]") + else + nasty_control_char_matcher = Regexp.new("[\x01\x02\x03\x04\x05\x06\x07\x08\x1F\v\u2028]") + end + + str.gsub(nasty_control_char_matcher,'') end # The worksheet relationships. This is managed automatically by the worksheet diff --git a/test/workbook/worksheet/tc_worksheet.rb b/test/workbook/worksheet/tc_worksheet.rb index 8147e18e..a57fa811 100644 --- a/test/workbook/worksheet/tc_worksheet.rb +++ b/test/workbook/worksheet/tc_worksheet.rb @@ -324,6 +324,13 @@ class TestWorksheet < Test::Unit::TestCase assert_equal(0, @ws.rows.last.cells.last.value.index("\v")) assert_equal(nil,@ws.to_xml_string.index("\v")) end + + def test_to_xml_string_with_newlines + cell_with_newline = "foo\n\r\nbar" + @ws.add_row [cell_with_newline] + assert_equal("foo\n\r\nbar", @ws.rows.last.cells.last.value) + assert_not_nil(@ws.to_xml_string.index("foo\n\r\nbar")) + end # Make sure the XML for all optional elements (like pageMargins, autoFilter, ...) # is generated in correct order. def test_valid_with_optional_elements -- cgit v1.2.3