使用ExcelDataReader

时间:2018-09-07 21:25:36

标签: c# excel xls exceldatareader

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

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

  

“无效的文件签名。”

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

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

我的选择是不强迫我的用户执行“另存为”步骤。而且,众所周知,让第三方更改其格式不是现实的选择。

是否有任何建议或技巧可以与ExcelDataReader一起使用?

以下是我在Notepad ++中打开XLS时看到的屏幕快照(注意xls扩展名):enter image description here

1 个答案:

答案 0 :(得分:1)

  

我的选择是不强迫我的用户执行“另存为”步骤。而且,众所周知,让第三方更改其格式不是现实的选择。

因此,我建议您使用Microsoft.Office.Interop.Excel包将其保存为受支持的格式,然后再通过 ExcelDataReader 读取它,如下所示:

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);
    // ...
}