0

我正在使用从第三方软件呈现的 XLS 电子表格。如果我在文本编辑器中打开文件,很明显它是另存为 XLS 文件的 HTML。根据我发现的几篇文章,MS 似乎曾经允许这种模式,并且最近在 Excel 中停止了:

所以,现在到实际的技术问题。如果我使用以下方法将文件(作为流)直接发送到 ExcelDataReader 中,CreateReader则会引发此错误:

“无效的文件签名。”

IExcelDataReader excelReader;
excelReader = ExcelReaderFactory.CreateReader(stream);

另一方面,如果我在 Excel 中打开它并执行“另存为”并将 XLS 保存为 XLSX,然后将其发送到我的代码中;它进口良好。

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

使用 ExcelDataReader 进行这项工作的任何建议或技巧?

这是我在 Notepad++ 中打开 XLS 时看到的屏幕截图(注意 xls 扩展名):在此处输入图像描述

4

1 回答 1

1

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

因此,我可以建议您在ExcelDataReaderMicrosoft.Office.Interop.Excel读取之前使用 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);
    // ...
}
于 2018-09-18T10:43:13.543 回答