解析excel文件的最佳做法

本文关键字:最佳 excel 文件 解析 | 更新日期: 2023-09-27 18:05:21

我在解析excel文件时面临一个问题。我的文件有5000多行。当我解析它时,花了很长时间,我想问是否有更好的方法来这样做。

public static List<List<List<string>>> ExtractData(string filePath)
{
    List<List<List<string>>> Allwork = new List<List<List<string>>>();
    Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
    Microsoft.Office.Interop.Excel.Workbook workBook = excelApp.Workbooks.Open(filePath);

    foreach (Microsoft.Office.Interop.Excel.Worksheet sheet in workBook.Worksheets)
    {
        List<List<string>> Sheet = new List<List<string>>();
        Microsoft.Office.Interop.Excel.Range usedRange = sheet.UsedRange;
        //Iterate the rows in the used range
        foreach (Microsoft.Office.Interop.Excel.Range row in usedRange.Rows)
        {
            List<string> Rows = new List<string>();
            String[] Data = new String[row.Columns.Count];
            for (int i = 0; i < row.Columns.Count; i++)
            {
                try
                {
                    Data[i] = row.Cells[1, i + 1].Value2.ToString();
                    Rows.Add(row.Cells[1, i + 1].Value2.ToString());
                }
                catch
                {
                    Rows.Add("     ");
                }
            }
            Sheet.Add(Rows);
        }
        Allwork.Add(Sheet);
    }
    excelApp.Quit();
    return Allwork;
}

这是我的代码。

解析excel文件的最佳做法

您的问题是您一次读取一个单元格,这是非常昂贵和低效的尝试读取一系列单元格。

下面的简单例子

Excel.Range range = worksheet.get_Range("A"+i.ToString(), "J" + i.ToString());
System.Array myvalues = (System.Array)range.Cells.Value;
string[] strArray = ConvertToStringArray(myvalues);

指向基本示例的链接读取excel

中给定范围内的所有单元格值

我建议不使用互操作,但odbc连接获取excel数据。这将允许您将excel文件作为数据库,并使用sql语句读取所需的数据。

如果这是一个选项,如果你的表有一个简单的结构,我建议尝试导出文件为。csv并应用简单的字符串处理逻辑。

你也可以试试Igos的建议

一种方法是使用类似ClosedXML库的东西直接读取.xlsx文件,而不是通过Excel互操作。