Skip to content

Commit 7b8c2f6

Browse files
committed
Handle cells with empty <v/> element as empty string
1 parent f1dfd3d commit 7b8c2f6

3 files changed

Lines changed: 54 additions & 0 deletions

File tree

lib/xlsx_reader/parsers/worksheet_parser.ex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ defmodule XlsxReader.Parsers.WorksheetParser do
105105
{:ok, expect_value(state)}
106106
end
107107

108+
def handle_event(:end_element, "v", %{value: :expect_chars} = state) do
109+
# Value element was empty, i.e. the sentinel value wasn't overridden by the :characters handler
110+
{:ok, store_value(state, "")}
111+
end
112+
108113
def handle_event(:start_element, {"f", attributes}, state) do
109114
type = Utils.get_attribute(attributes, "t")
110115
ref = Utils.get_attribute(attributes, "ref")

test/compatibility_test.exs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,4 +151,53 @@ defmodule CompatibilityTest do
151151
]
152152
} = XlsxReader.sheet(package, "Sheet 1")
153153
end
154+
155+
test "cells with empty <v/> element" do
156+
# The worksheet has some formula cells with empty <v/> elements
157+
# Example:
158+
# <c r="O5259" s="7" t="str">
159+
# <f>IF(ISNUMBER(N5259),_xll.BDP($C5259, "OPT_UNDL_TICKER"),"")</f>
160+
# <v/>
161+
# </c>
162+
{:ok, package} = XlsxReader.open(TestFixtures.path("empty_v_elements.xlsx"))
163+
{:ok, rows} = XlsxReader.sheet(package, "Simplify Portfolio Tracker")
164+
165+
assert [_, _, sample_row | _] = rows
166+
167+
assert [
168+
"AGGH",
169+
"ISHARES CORE US AGGREGATE BOND ETF",
170+
"AGG",
171+
"2897404",
172+
"US4642872265",
173+
"464287226",
174+
3_005_147.0,
175+
99.4,
176+
298_711_611.8,
177+
92.83633300000001,
178+
321_761_537.77,
179+
15_525_001.0,
180+
"20.725379520000001",
181+
"#ERROR",
182+
"",
183+
" ",
184+
"#ERROR",
185+
" ",
186+
"#ERROR",
187+
"464287226",
188+
"Fund",
189+
"",
190+
"",
191+
"",
192+
"",
193+
"",
194+
"",
195+
"",
196+
"",
197+
"",
198+
"",
199+
"",
200+
"2.5300000000000001E-3"
201+
] = sample_row
202+
end
154203
end
827 KB
Binary file not shown.

0 commit comments

Comments
 (0)