C# NPOI读取大文件Excel到DataTable
时间: 2023-07-30 19:09:44 浏览: 85
您可以使用 NPOI 库来读取大文件 Excel 到 DataTable。
以下是一个简单的示例代码:
```csharp
using System.Data;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
public static DataTable ReadExcelToDataTable(string filePath, string sheetName)
{
DataTable dt = new DataTable();
IWorkbook workbook = null;
ISheet sheet = null;
int columnCount = 0;
int rowCount = 0;
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
workbook = new XSSFWorkbook(fs);
}
sheet = workbook.GetSheet(sheetName);
if (sheet != null)
{
rowCount = sheet.LastRowNum + 1;
for (int i = 0; i < rowCount; i++)
{
IRow row = sheet.GetRow(i);
DataRow dataRow = null;
if (i == 0)
{
columnCount = row.LastCellNum;
for (int j = 0; j < columnCount; j++)
{
ICell cell = row.GetCell(j);
if (cell != null)
{
dt.Columns.Add(cell.ToString());
}
}
}
else if (row != null)
{
dataRow = dt.NewRow();
for (int j = 0; j < columnCount; j++)
{
ICell cell = row.GetCell(j);
if (cell != null)
{
dataRow[j] = cell.ToString();
}
}
dt.Rows.Add(dataRow);
}
}
}
return dt;
}
```
这个示例代码假设您使用 XLSX 格式的文件,如果您使用 XLS 格式的文件,则需要将 `XSSFWorkbook` 替换为 `HSSFWorkbook`。此外,这个示例代码假设您知道 Excel 文件中要读取的工作表的名称。如果您不知道工作表的名称,可以使用 `workbook.GetSheetAt(index)` 方法来获取工作表,其中 `index` 是从 0 开始的工作表序号。
请注意,如果您想读取大型 Excel 文件,建议使用分段读取的方式,而不是一次读取整个文件。这样可以避免内存溢出的问题。