为了账号安全,请及时绑定邮箱和手机立即绑定

使用 ExcelDataReader 时奇怪的 XLS 文件失败

使用 ExcelDataReader 时奇怪的 XLS 文件失败

C#
慕少森 2022-01-09 10:30:41
我正在使用从第三方软件呈现的 XLS 电子表格。如果我在文本编辑器中打开文件,很明显它是另存为 XLS 文件的 HTML。根据我发现的几篇文章,MS 似乎曾经允许这种模式,并且最近在 Excel 中停止了:Office 论坛:XLS 文件无法在 Excel 2016 中打开,只有灰色视图UserVoice:不再打开 HTML 格式的文件(带有 XLS 扩展名) - 欢迎使用 Excel 的建议框!所以,现在到实际的技术问题。如果我使用以下CreateReader方法将文件(作为流)直接发送到 ExcelDataReader 中,则会引发此错误:“无效的文件签名。”IExcelDataReader excelReader; excelReader = ExcelReaderFactory.CreateReader(stream);另一方面,如果我在 Excel 中打开它并执行“另存为”并将 XLS 保存为 XLSX,然后将其发送到我的代码中;它进口良好。我的偏好是不强迫我的用户执行“另存为”步骤。让第三方改变他们的格式并不是一个现实的选择(众所周知)。使用 ExcelDataReader 进行这项工作的任何建议或技巧?这是我在 Notepad++ 中打开 XLS 时看到的屏幕截图(注意 xls 扩展名):
查看完整描述

1 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

我的偏好是不强迫我的用户执行“另存为”步骤。让第三方改变他们的格式并不是一个现实的选择(众所周知)。


因此,我可以建议您Microsoft.Office.Interop.Excel在ExcelDataReader读取之前使用package 将其保存为支持的格式,如下所示:


var app = new Microsoft.Office.Interop.Excel.Application();

var workbook = app.Workbooks.Open(htmlFileName);


if (File.Exists(excelFileName))

{

    File.Delete(excelFileName);

}


workbook.SaveAs(

    excelFileName,

    Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault,

    Type.Missing, Type.Missing,  

    false, false,

    Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,

    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);


workbook.Close();

app.Quit();

app = null;

workbook = null;


using (var stream = File.Open(excelFileName, FileMode.Open, FileAccess.Read))

{

    var reader = ExcelReaderFactory.CreateReader(stream);

    // ...

}


查看完整回答
反对 回复 2022-01-09
  • 1 回答
  • 0 关注
  • 495 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信