电子表格类在简单excel文件上引发FileFormatException错误

本文关键字:FileFormatException 错误 文件 简单 excel 电子表格 | 更新日期: 2023-09-27 18:29:37

我需要读取50MB.XLS excel,但我得到了这个错误:

System.IO.FileFormatException {"File contains corrupted data."}

我选择OpenXMLReader类进行阅读,因为它似乎适合这个场景。但它在代码的第一行就崩溃了。

SpreadsheetDocument.Open(filename, false)

Excel文件可在此处下载:http://www.filedropper.com/saxfile具有10行的简单97-2003 excel测试文件

    static void Main(string[] args)
        {
            ReadExcelFileSAX(@"C:'Users'User'Desktop'SAXFile.xls");
        }
    static void ReadExcelFileSAX(string filename)
    {
        using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(filename, false))
        {
            WorkbookPart workbookPart = myDoc.WorkbookPart;
            WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
            OpenXmlReader reader = OpenXmlReader.Create(worksheetPart);
            string text;
            while (reader.Read())
            {
                if (reader.ElementType == typeof(CellValue))
                {
                    text = reader.GetText();
                    Console.WriteLine(text);
                }
            }
        }
    }

我错过了什么?

电子表格类在简单excel文件上引发FileFormatException错误

您试图打开的文件是一个OpenXML二进制格式之前的Excel文件。

我确信读取器在检测到它不是有效的ZIP存档时会立即引发错误。

使用OpenXML之前的这段代码会有所帮助(它将xls保存为xlsx),但它的一点变通方法

    static void ConvertXlsToXlsx(string xlsFilePath, string xlsxFilePath)
    {
        Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
        excelApp.Visible = false;
        Microsoft.Office.Interop.Excel.Workbook eWorkbook = excelApp.Workbooks.Open(xlsFilePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        eWorkbook.SaveAs(xlsxFilePath, Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        eWorkbook.Close(false, Type.Missing, Type.Missing);
    }

更好的解决方案可能是使用不同的库ExcelDataReaderhttps://exceldatareader.codeplex.com/我测试并工作(示例打印.CSV到控制台)

    static void XLSFileStreamReader(string filePath)
    {
        FileStream stream = new FileStream(filePath, FileMode.Open);
        // Reading from a binary Excel file ('97-2003 format; *.xls)
        IExcelDataReader excelReader2003 = ExcelReaderFactory.CreateBinaryReader(stream);
        // DataSet - The result of each spreadsheet will be created in the result.Tables
        DataSet result = excelReader2003.AsDataSet();
        // Data Reader methods
        foreach (DataTable table in result.Tables)
        {
            for (int i = 0; i < table.Rows.Count; i++)
            {
                for (int j = 0; j < table.Columns.Count; j++)
                    Console.Write("'"" + table.Rows[i].ItemArray[j] + "'";");
                Console.WriteLine();
            }
        }
        // Free resources (IExcelDataReader is IDisposable)
        excelReader2003.Close();
    }

我在这里找到的https://gist.github.com/Munawwar/924413

PS:FileStream可能应该在USING块中。

对xls和xlsx使用ExcelDataReader。

public static DataTable XLSFileStreamReader(string filePath)
{
    try
    {
        FileStream stream = new FileStream(filePath, FileMode.Open);
        //IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
        IExcelDataReader excelReader = null;
        excelReader = ExcelReaderFactory.CreateReader(stream);
        DataSet result = excelReader.AsDataSet();
        excelReader.Close();
        return result.Tables[0];
    }
    catch (Exception e)
    {
        
        throw;
    }
}
相关文章:
  • 没有找到相关文章