Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 电子表格类在简单excel文件上引发FileFormatException错误_C#_Openxml - Fatal编程技术网

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

C# 电子表格类在简单excel文件上引发FileFormatException错误,c#,openxml,C#,Openxml,我需要阅读50MB.XLS excel,但我收到以下错误: System.IO.FileFormatException {"File contains corrupted data."} 我选择OpenXMLReader类进行阅读,因为它似乎适合这种情况。 但它在代码的第一行崩溃了 SpreadsheetDocument.Open(filename, false) Excel文件可在此处下载: 它的简单97-2003 excel测试文件有10行 static void Main(st

我需要阅读50MB.XLS excel,但我收到以下错误:

System.IO.FileFormatException {"File contains corrupted data."}
我选择OpenXMLReader类进行阅读,因为它似乎适合这种情况。 但它在代码的第一行崩溃了

SpreadsheetDocument.Open(filename, false)
Excel文件可在此处下载: 它的简单97-2003 excel测试文件有10行

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

我缺少什么?

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


我确信读者在检测到它不是一个有效的ZIP存档文件时会立即引发一个错误

您试图打开的文件是预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);
    }
更好的解决方案可能是使用不同的库ExcelDataReader 我测试了它,并将示例print.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();
    }
我在这里找到的


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

使用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);
    }
更好的解决方案可能是使用不同的库ExcelDataReader 我测试了它,并将示例print.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();
    }
我在这里找到的


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

谢谢您的回复,但我不明白。我想读取excel文件,那么我该怎么做呢?对于.XLSX,代码是有效的,所以如果有可能,可以通过编程方式将.xls格式更改为.XLSX格式?那可能是另一种方式。谢谢你的回复,但我不明白。我想读取excel文件,那么我该怎么做呢?对于.XLSX,代码是有效的,所以如果有可能,可以通过编程方式将.xls格式更改为.XLSX格式?这可能是另一种方式。