我正在使用从第三方软件呈现的XLS电子表格。如果我在文本编辑器中打开文件,很明显它的HTML保存为XLS文件。似乎MS曾经允许这种模式,并且最近在我发现的几篇文章中停止了Excel:
所以,现在到了实际的技术问题。如果我使用CreateReader
方法将文件(作为流)直接发送到ExcelDataReader,则会抛出此错误:
“文件签名无效。”
IExcelDataReader excelReader;
excelReader = ExcelReaderFactory.CreateReader(stream);
另一方面,如果我在Excel中打开并执行“另存为”并将XLS保存为XLSX,然后将其发送到我的代码中;它进口很好。
我的偏好是不强迫我的用户执行“另存为”步骤。让第三方改变他们的格式并不是一个现实的选择(众所周知)。
使用ExcelDataReader可以使用任何建议或技巧吗?
我的偏好是不强迫我的用户执行“另存为”步骤。让第三方改变他们的格式并不是一个现实的选择(众所周知)。
所以,我建议你使用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);
// ...
}