阅读Excel表格范围明智

时间:2017-07-12 13:45:20

标签: c# excel npoi

我们希望根据特定范围读取Excel工作表数据并将其存储到数据库中。 我们的Excel工作表包含1807列和541行,因此我们无法使用Datatable将数据存储到其中。 另外,我们需要每个单元格检查excel表单,以便将其存储到Datatable中。

目前我们已经使用“Microsoft.Office.Interop.Excel”组件来读取Excel工作表数据。但是在使用这个组件时,从excel表中读取数据需要很长时间,我们希望能够快速完成这一过程。 我们也尝试了 NPOI ,但我们没有获得任何获取范围数据的选项。

InteropNPOI

所以,我们只想知道有没有其他组件可以做到这一点?

以下是我们尝试过的代码:

 public System.Data.DataTable getCellRangeValueAsDataTable(string filename, string startCell, string endCell)
    {
        System.Data.DataTable newTable = new System.Data.DataTable();
        Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
        string result = "";

        Workbook wb = xlApp.Workbooks.Open(filename,
                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);

        Worksheet ws = (Worksheet)wb.Worksheets[2];
        Range aRange = ws.get_Range(startCell, endCell);

        for (int cCnt = 1; cCnt <= aRange.Columns.Count; cCnt++)
        {
            newTable.Columns.Add("String" + cCnt, typeof(string));
        }

        for (int rCnt = 1; rCnt <= aRange.Rows.Count; rCnt++)
        {
            object[] objArr = new object[aRange.Columns.Count];

            for (int cCnt = 1; cCnt <= aRange.Columns.Count; cCnt++)
            {
                objArr[cCnt - 1] = (aRange.Cells[rCnt, cCnt] as Microsoft.Office.Interop.Excel.Range).Value;
            }
            newTable.Rows.Add(objArr);
        }

       return newTable;
    }

2 个答案:

答案 0 :(得分:0)

这里最好的解决方案是使用OpenXML SDK,这比Interop程序集要快得多。可能知道Interop通过COM工作并且它不能很快,因为你必须为代码中的每个操作调用(例如从单元格读取数据)。 OpenXML SDK在这里是一个很好的解决方案,因为它直接从excel文件读取数据而不需要调用Microsoft Office API,它是免费的。 您可以看到使用OpenXML SDK here读取数据的示例。

答案 1 :(得分:0)

为什么不使用EPPlus或Spreadsheet Light库:

http://epplus.codeplex.com/

http://spreadsheetlight.com/download/

这两个也可以通过NuGet

获得

SO中有大量资源可以帮助您:

How to parse excel rows back to types using EPPlus

Excel to DataTable using EPPlus - excel locked for editing