C# NPOI读取大文件到DataTable
时间: 2023-07-30 09:09:43 浏览: 195
使用NPOI读取大文件Excel到DataTable可以采用流模式(Stream)读取Excel文件,以避免一次性将整个文件读入内存中造成内存不足的问题。以下是使用NPOI流模式读取Excel大文件到DataTable的基本步骤:
1. 使用FileStream打开Excel文件。
2. 使用NPOI的WorkbookFactory创建一个流式的Workbook。
3. 获取Sheet对象。
4. 获取行和单元格对象。
5. 逐行读取数据并将数据添加到DataTable中。
6. 关闭Workbook和FileStream。
以下是示例代码:
```
using System.Data;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
public DataTable ReadExcelToDataTable(string filePath)
{
var dataTable = new DataTable();
using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
var workbook = WorkbookFactory.Create(stream, ImportOption.All);
var sheet = workbook.GetSheetAt(0);
var rowCount = sheet.LastRowNum;
// 获取列名
var headerRow = sheet.GetRow(0);
for (int j = 0; j < headerRow.LastCellNum; j++)
{
var columnName = headerRow.GetCell(j)?.ToString() ?? $"Column{j + 1}";
if (dataTable.Columns.Contains(columnName))
{
columnName += j;
}
dataTable.Columns.Add(columnName);
}
// 逐行读取数据
for (int i = 1; i <= rowCount; i++)
{
var dataRow = dataTable.NewRow();
var row = sheet.GetRow(i);
if (row == null) continue;
for (int j = 0; j < headerRow.LastCellNum; j++)
{
var cell = row.GetCell(j);
if (cell == null) continue;
dataRow[j] = cell.ToString();
}
dataTable.Rows.Add(dataRow);
}
workbook.Close();
}
return dataTable;
}
```
在实际应用中,您可以根据实际需求进行修改,例如设置读取的起始行、批量读取等等。
阅读全文