除非之前打开文档,否则 EPPlus 无法获取单元格值
EPPlus can't get cell value unless document was opened before
我正在尝试使用 EPPlus 解析 excel 工作表,但在从公式单元格获取值时遇到问题。我正在使用的文档是在运行时作为字节数组从 Internet 下载的,如果使用 Excel 保存和打开,则工作正常。文件格式为 .xlsm(启用宏)。
问题如下:
有些单元格包含公式,只是引用不同工作表中的单元格,例如:
='diffSheet'!A25
。我无法从这些单元格中获取值:cell.Value
为空,cell.Text
只是“-”。
我尝试在这些单元格上调用 Calculate() 方法,但它只会加载很长时间,然后 returns 每次都会出现“#VALUE”错误。
奇怪的是,如果文档之前被 Excel 打开,则同一个文档由相同的代码处理得很好。我尝试手动下载文档,在 Excel 中打开它,然后再上传回来;之后代码从相同的单元格获取值没有问题。可能值得指出的是 Excel 不会计算公式值,除非您按下“启用编辑”按钮,但据我所知,EPPlus 没有这样的东西。我尝试以编程方式保存并重新打开文档,但没有成功。
我希望有人能解释一下这里的问题,以及是否有处理文档而无需用户每次都打开它的方法。
提前致谢!
Excel 文件 可以 包含具有公式但值也可能缺失的单元格的值。在 Excel 中打开并保存文件后,Excel 计算并写入所有值。
EPPlus 可以进行一些计算,但它不使用 Excel(或要求安装它)并且在计算方面不如 Excel 本身先进。
据我所知,进行计算对于 EPPlus 开发人员来说是一项重要的工作,他们现在将使用他们的版本 5 进行商业化。
Excel (xlsx) 文件实际上是 ZIP 文件。所以如果你提取它们,你可以看到内容为 xml。例如:
读起来是这样的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac xr xr2 xr3" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2" xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" xr:uid="{3DBD100E-5F85-4729-996E-130F34C637C8}">
<sheetPr codeName="Sheet1"/>
<dimension ref="A1:A3"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection activeCell="A3" sqref="A3"/>
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>
<sheetData>
<row r="1" spans="1:1" x14ac:dyDescent="0.25">
<c r="A1">
<v>1</v>
</c>
</row>
<row r="2" spans="1:1" x14ac:dyDescent="0.25">
<c r="A2">
<v>2</v>
</c>
</row>
<row r="3" spans="1:1" x14ac:dyDescent="0.25">
<c r="A3">
<f>A1+A2</f>
<v>3</v>
</c>
</row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>
在单元格 A3 中,您可以注意到公式和值。在打开之前检查你的 excel 文件,你会看到。
(这不适用于旧的 .xls 格式。)
我正在尝试使用 EPPlus 解析 excel 工作表,但在从公式单元格获取值时遇到问题。我正在使用的文档是在运行时作为字节数组从 Internet 下载的,如果使用 Excel 保存和打开,则工作正常。文件格式为 .xlsm(启用宏)。
问题如下:
有些单元格包含公式,只是引用不同工作表中的单元格,例如:
='diffSheet'!A25
。我无法从这些单元格中获取值:cell.Value
为空,cell.Text
只是“-”。
我尝试在这些单元格上调用 Calculate() 方法,但它只会加载很长时间,然后 returns 每次都会出现“#VALUE”错误。
奇怪的是,如果文档之前被 Excel 打开,则同一个文档由相同的代码处理得很好。我尝试手动下载文档,在 Excel 中打开它,然后再上传回来;之后代码从相同的单元格获取值没有问题。可能值得指出的是 Excel 不会计算公式值,除非您按下“启用编辑”按钮,但据我所知,EPPlus 没有这样的东西。我尝试以编程方式保存并重新打开文档,但没有成功。
我希望有人能解释一下这里的问题,以及是否有处理文档而无需用户每次都打开它的方法。
提前致谢!
Excel 文件 可以 包含具有公式但值也可能缺失的单元格的值。在 Excel 中打开并保存文件后,Excel 计算并写入所有值。
EPPlus 可以进行一些计算,但它不使用 Excel(或要求安装它)并且在计算方面不如 Excel 本身先进。
据我所知,进行计算对于 EPPlus 开发人员来说是一项重要的工作,他们现在将使用他们的版本 5 进行商业化。
Excel (xlsx) 文件实际上是 ZIP 文件。所以如果你提取它们,你可以看到内容为 xml。例如:
读起来是这样的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac xr xr2 xr3" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2" xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" xr:uid="{3DBD100E-5F85-4729-996E-130F34C637C8}">
<sheetPr codeName="Sheet1"/>
<dimension ref="A1:A3"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection activeCell="A3" sqref="A3"/>
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>
<sheetData>
<row r="1" spans="1:1" x14ac:dyDescent="0.25">
<c r="A1">
<v>1</v>
</c>
</row>
<row r="2" spans="1:1" x14ac:dyDescent="0.25">
<c r="A2">
<v>2</v>
</c>
</row>
<row r="3" spans="1:1" x14ac:dyDescent="0.25">
<c r="A3">
<f>A1+A2</f>
<v>3</v>
</c>
</row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>
在单元格 A3 中,您可以注意到公式和值。在打开之前检查你的 excel 文件,你会看到。
(这不适用于旧的 .xls 格式。)