使用MemoryStream创buildOpen XML电子表格时,Excel和“不可读内容”

当使用Open XML SDK v2.0创buildExcel电子表格时,我们的Excel输出最初几个月成功运行。 最近Excel(所有版本)开始抱怨“Excel在'zot.xlsx'中发现了不可读的内容,你想恢复这个工作簿的内容吗?” 我们使用一个MemoryStream作为存储在Web应用程序中创build文件,然后在MIMEtypes为“application / vnd.openxmlformats-officedocument.spreadsheetml.sheet”的HTTP响应中将其作为byte []发送。 坏文件的解压内容与文件的解压内容相同,没有错误。

我们把这个事情追了太多时间,一路上捡到了几条红鲱鱼,但最后却认定这个坏档案在一个方面是不同的。 文件长度是不同的。 在返回MemoryStream并将byte []写入HTTP响应之前,请确保使用简单的'stream.Capacity = stream.Length'截断MemoryStream,使其容量和长度相同。

现在,Excel似乎将文件中的额外内容检测为“不可读内容”的安全风险,并引发令人讨厌的错误,过去它会接受风险。

注意:从原来的海报中得到的答案,他以前在他的问题中有答案

逐一检查下列内容,从Excel中删除“不可读的内容错误”。

1.确保正确的数据以正确的方式写入正确的单元格。 对于所有的单元格都可以这样做。可能会发生错误地将数据写入单元格导致此问题。单元格索引使用正确。

2.尝试使用Cell.DataType = new EnumValue(CellValues.String)而不是共享string。这可能有助于消除错误。

3.如果任何单元格包含#VALUE /#REF /#NAME? 或#DIV错误,请删除这些错误。

4.从服务器下载文件时出现此问题。 在Web应用程序中创buildExcel电子表格,使用MemoryStream并下载它。

使用下面的代码:HttpContext.Current.Response.Clear()

Response.ClearHeaders() Response.Buffer = False msReportStream = CType(controller.GetFromSession (Constants.SESSION_REPORT), MemoryStream) Response.ContentType = "application/vnd.openxmlformats- officedocument.spreadsheetml.sheet" Response.AddHeader("Connection", "Keep-Alive") Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", strReportFileName)) Response.ContentEncoding = Encoding.UTF8 Response.BinaryWrite(msPNLReportStream.ToArray()) Response.Flush() Response.Close() Response.End()--use this when the code is deployed in server only not required in local.gives error in local. msReportStream.Dispose() msReportStream.Close() 

如果您使用ASPOSE技术,请使用

Me.Response.Clear()

 Me.Response.Buffer = False Me.Response.AddHeader("Accept-Ranges", "bytes") Response.ContentType = "application/octet-stream" Response.AddHeader("Connection", "Keep-Alive") Response.ContentEncoding = Encoding.UTF8 asposeReport.ShowSavePopUp(Me.Response, controller.GetFromSession(Constants.SESSION_REPORT), strReportFileName) Me.Response.Flush() Me.Response.Close() Me.Response.End() 

使用用于Microsoft Office的Open XML SDK 2.5生产力工具打开.xlsx文件并validation文档,这将给您提供任何导致不可读内容的validation错误