让我来为你详细讲解“C#使用NPOI读取excel转为DataSet”的完整攻略。
什么是NPOI?
NPOI是一款开源的适用于.NET和Java平台的POI开发包。POI是Apache Software Foundation的一个开源项目,其主要功能是对Microsoft Format Documents的解析和创建,比如Word、Excel、PowerPoint等。
准备工作
首先我们需要安装NPOI这个库,可以通过NuGet获取,也可以前往官网下载安装。接着,我们需要引入以下DLL文件:
- NPOI.dll
- NPOI.OOXML.dll
- NPOI.OpenXmlFormats.dll
读取Excel
现在我们开始来读取Excel,代码如下:
using System.Data;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
public static DataSet ReadExcel(string filePath)
{
DataSet ds = new DataSet();
using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = new XSSFWorkbook(stream);
for (int i = 0; i < workbook.NumberOfSheets; i++)
{
ISheet sheet = workbook.GetSheetAt(i);
DataTable dataTable = new DataTable(sheet.SheetName);
IRow header = sheet.GetRow(0);
if (header != null)
{
int columnIndex = 0;
foreach (ICell cell in header)
{
var column = new DataColumn(cell.ToString());
dataTable.Columns.Add(column);
columnIndex++;
}
}
for (int rowIndex = 1; rowIndex <= sheet.LastRowNum; rowIndex++)
{
IRow row = sheet.GetRow(rowIndex);
if (row == null)
continue;
var dataRow = dataTable.NewRow();
for (int columnIndex = 0; columnIndex < row.LastCellNum; columnIndex++)
{
ICell cell = row.GetCell(columnIndex);
if (cell == null)
continue;
dataRow[columnIndex] = cell.ToString();
}
dataTable.Rows.Add(dataRow);
}
ds.Tables.Add(dataTable);
}
}
return ds;
}
- 首先,我们使用
FileStream
来读取Excel文件。 - 然后,我们使用
XSSFWorkbook
来实例化IWorkbook
对象,其中,XSSFWorkbook
用于读取xlsx格式文件,如果要读取xls格式文件,则需要使用HSSFWorkbook
。 - 接着,我们使用
workbook.NumberOfSheets
获取工作簿的工作表数量,再使用workbook.GetSheetAt(i)
来获取相应的工作表。 - 对于每个工作表,我们使用
sheet.SheetName
作为数据表的表名,并实例化一个DataTable
对象。 - 接着,我们使用
sheet.GetRow(0)
来获取表头的行,然后使用header.ToString()
来将每个单元格的值转化成字符串,并用DataColumn
来创建数据表的列。 - 然后,我们从第二行开始,使用
sheet.GetRow(rowIndex)
来获取每一行,使用row.GetCell(columnIndex)
获取每个单元格,并将其转化成字符串,并将其放入DataRow
中。 - 最后,我们使用
ds.Tables.Add(dataTable)
将数据表添加到数据集中,并返回数据集。
示例
下面,我来举两个例子:
示例1:读取单个工作表
var filePath = "path/to/file.xlsx";
var ds = ReadExcel(filePath);
var dataTable = ds.Tables[0];
for (int rowIndex = 0; rowIndex < dataTable.Rows.Count; rowIndex++)
{
var row = dataTable.Rows[rowIndex];
for (int columnIndex = 0; columnIndex < dataTable.Columns.Count; columnIndex++)
{
Console.Write(row[columnIndex] + "\t");
}
Console.WriteLine();
}
以上代码会读取file.xlsx
文件的第一个工作表,并将其输出到控制台中。
示例2:读取多个工作表
var filePath = "path/to/file.xlsx";
var ds = ReadExcel(filePath);
foreach (DataTable dataTable in ds.Tables)
{
Console.WriteLine(dataTable.TableName);
for (int rowIndex = 0; rowIndex < dataTable.Rows.Count; rowIndex++)
{
var row = dataTable.Rows[rowIndex];
for (int columnIndex = 0; columnIndex < dataTable.Columns.Count; columnIndex++)
{
Console.Write(row[columnIndex] + "\t");
}
Console.WriteLine();
}
}
以上代码会读取file.xlsx
文件的所有工作表,并将其输出到控制台中。
希望这些内容可以帮助到你。如果还有什么问题,请随时联系我。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用NPOI读取excel转为DataSet - Python技术站