在使用OpenXMLSDKv2.0创建Excel电子表格时,我们的Excel输出最初成功地运行了几个月。最近Excel(所有版本)开始抱怨“Excel在'zot.xlsx'中发现不可读的内容。是否要恢复此工作簿的内容?我们在Web应用程序中创建文件,使用MemoryStream
作为存储,然后在MIME类型为"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
的HTTP响应中作为byte[]
发送。错误文件的解压缩内容与无错误文件的解压缩内容相同。
4条答案
按热度按时间2ledvvac1#
我们花了太多的时间来追踪这个问题,一路上收集了一些红鲱鱼,但最终,解决了这个坏文件在一个方面是不同的。文件长度不同。在返回
MemoryStream
并将byte[]
写入HTTP响应之前,请确保使用简单的stream.Capacity = (int)stream.Length;
截断MemoryStream
,使其容量和长度相同。Excel现在似乎将文件中的额外内容检测为“不可读内容”的安全风险,并抛出恼人的错误,而在过去它会接受风险。
shyt4zoc2#
逐个检查以下内容,以从excel中删除“内容不可读错误”。
1.确保以正确的方式将正确的数据写入正确的单元格。对所有单元格都这样做。可能会发生在一个单元格中错误写入数据导致此问题。单元格索引使用正确。
2.尝试使用Cell.DataType = new EnumValue(CellValues.String)而不是共享字符串。这可能有助于删 debugging 误。
3.如果任何单元格包含#VALUE/#REF/#NAME?或#DIV错误,删除这些错误。
4.从服务器下载文件时出现此问题。在Web应用程序中创建Excel电子表格,使用MemoryStream并下载相同的内容。
使用以下代码:HttpContext.Current.Response.Clear()
如果使用ASPOSE技术,请使用
Me.Response.Clear()
hgtggwj03#
使用Open XML SDK 2.5 Productivity Tool for Microsoft Office打开.xlsx文件并验证文档,这将给予任何导致内容不可读的验证错误
d7v8vwbk4#
一些微妙的事情发生在我身上。我实际上调用了
Flush()
上的FileStream
,没有它,我最终会得到一个损坏的文件,必须由Excel修复。它也通过调用Dispose()
来工作,因为这在内部调用flush。