From 0dd26e8fee1fed21d1927a996bdc10f6efc2b4de Mon Sep 17 00:00:00 2001 From: Shalom Yiblet Date: Wed, 18 Dec 2024 21:06:27 -0800 Subject: [PATCH] fix: fix xml escape in worksheet xml --- xlsx/src/export/worksheets.rs | 3 ++- xlsx/tests/calc_tests/escape_strings.xlsx | Bin 0 -> 9344 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 xlsx/tests/calc_tests/escape_strings.xlsx diff --git a/xlsx/src/export/worksheets.rs b/xlsx/src/export/worksheets.rs index b3f2cbc..7bf6fbe 100644 --- a/xlsx/src/export/worksheets.rs +++ b/xlsx/src/export/worksheets.rs @@ -192,9 +192,10 @@ pub(crate) fn get_worksheet_xml( &parsed_formulas[*f as usize], ); let style = get_cell_style_attribute(*s); + let escaped_v = escape_xml(v); row_data_str.push(format!( - "{formula}{v}" + "{formula}{escaped_v}" )); } Cell::CellFormulaError { diff --git a/xlsx/tests/calc_tests/escape_strings.xlsx b/xlsx/tests/calc_tests/escape_strings.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..edd6fb3d93d2787e92367b6cd9ab97b0b738554c GIT binary patch literal 9344 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