ASP.NET使用CarlosAg.ExcelXmlWriter生成xls文件格式与扩展名不匹配如何解决
问题根源
CarlosAg.ExcelXmlWriter生成的文件本质是Office 2003标准的Spreadsheet XML格式,并非二进制的.xls格式文件,强制保存为.xls后缀时,MS Excel会触发文件格式与扩展名一致性校验,高版本Excel、移动端Excel的安全校验规则更严格,就会出现警告、损坏提示甚至无法打开的情况,WPS对格式兼容性校验更宽松所以可以正常打开。
适配现有库的修复方案
如果继续使用CarlosAg.ExcelXmlWriter,只需要做两处修改即可消除警告:
- 修改保存文件的扩展名为
.xml,这是该格式的官方标准后缀 - 如果是Web应用提供文件下载,需要配置正确的HTTP响应头:
Response.ContentType = "application/vnd.ms-excel" Response.AddHeader("Content-Disposition", "attachment;filename=test.xml")
你提供的测试代码修改后如下:
Dim book As Workbook = New Workbook() Dim sheet As Worksheet = book.Worksheets.Add("Sample") Dim row As WorksheetRow = sheet.Table.Rows.Add() row.Cells.Add("Hello World") book.Save("D:\Folder\test.xml")
修改后所有版本MS Excel、移动端Excel都可以无警告正常打开文件,原文件内容、格式完全不受影响。
更高兼容性的替代方案
如果你需要生成标准的.xls/.xlsx格式文件,支持加载模板填充数据,可以使用支持.NET 2.0环境的NPOI库,它生成的是符合微软官方规范的二进制Excel文件,全端无兼容问题。
简单的NPOI生成xls示例代码如下:
' 引用NPOI.HSSF.UserModel、NPOI.SS.UserModel命名空间 Dim workbook As IWorkbook = New HSSFWorkbook() Dim sheet As ISheet = workbook.CreateSheet("Sample") Dim row As IRow = sheet.CreateRow(0) row.CreateCell(0).SetCellValue("Hello World") Using fs As FileStream = New FileStream("D:\Folder\test.xls", FileMode.Create, FileAccess.Write) workbook.Write(fs) End Using
内容的提问来源于stack exchange,提问作者jeremy5
相关产品推荐
相关产品推荐

