这次来看看将excel中的内容用npoi导入到一个datatable中的方法
代码如下:
Bash
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections;
using System.Data;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class Office_NPOI
{
#region 设置单元格样式 示例
//IWorkbook wk = myexcel.workbook(filename);
//ICellStyle style = wk.CreateCellStyle();//创建样式
//style.VerticalAlignment = VerticalAlignment.Justify;//垂直居中 方法1
// style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CenterSelection;//设置居中 方法2
// //style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//设置居中 方法3
// ISheet sheet = myexcel.sheet(wk, 0);
//IRow row = myexcel.row(sheet, 2);
//ICell cell = myexcel.cell(row, 2);
//cell.CellStyle = style;
//myexcel.save(filename, wk);
#endregion
public class EXCEL
{
/// <summary>
/// 将Excel中的数据导入DataTable中,空行会自动去掉
/// <para>--------------说明------------------</para>
/// <para>DataTable dt = NPOI_Excel2DT_ByFileName("D:\\1.xlsx", "PP", true);</para>
/// <para>------------------------------------</para>
/// </summary>
/// <param name="_ExcelFileName">Excel文件路径</param>
/// <param name="_sheetinfo">Sheet信息,可以是索引或者列名,找不到时得到第一个sheet</param>
/// <param name="_FirstRowisColumnName">Excel的第一行数据是不是列名</param>
/// <returns></returns>
public DataTable NPOI_Excel2DT_ByFileName(string _ExcelFileName, object _sheetinfo, bool _FirstRowisColumnName)
{
IWorkbook workbook = null;
ISheet sheet = null;
DataTable data = new DataTable();
int startRow = 0;
try
{
workbook = NOPI_workbook(_ExcelFileName);
sheet = NPOI_sheet(workbook, _sheetinfo);
if (sheet != null)
{
IRow firstRow = sheet.GetRow(0);
int cellbeginnum = firstRow.FirstCellNum;
int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数
if (_FirstRowisColumnName)
{
for (int i = cellbeginnum; i < cellCount; ++i)
{
ICell cell = firstRow.GetCell(i);
if (cell != null)
{
string cellValue = cell.StringCellValue;
if (cellValue != null)
{
DataColumn column = new DataColumn(cellValue);
data.Columns.Add(column);
}
}
}
startRow = sheet.FirstRowNum + 1;
}
else
{
DataColumn column = new DataColumn();
data.Columns.Add(column);
startRow = sheet.FirstRowNum;
}
//最后一列的标号
int dtcolumncount = data.Columns.Count;
int rowCount = sheet.LastRowNum;
for (int i = startRow; i <= rowCount; ++i)
{
IRow row = sheet.GetRow(i);
if (row == null) continue; //没有数据的行默认是null
ArrayList al = new ArrayList();
for (int j = cellbeginnum; j < cellCount; ++j)
{
if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null
al.Add(row.GetCell(j).ToString());
else
al.Add(null);
}
DataRow dataRow = data.NewRow();
for (int j = 0; j < dtcolumncount; j++)
{
dataRow[j] = al[j];
}
data.Rows.Add(dataRow);
}
}
return data;
}
catch (Exception ex)
{
//处理民间常
return null;
}
}
public IWorkbook NOPI_workbook(string _filename)
{
IWorkbook wk = null;
using (var file = File.Open(_filename, FileMode.OpenOrCreate, FileAccess.Read))
{
wk = new XSSFWorkbook(file);
file.Close();
}
return wk;
}
public ISheet NPOI_sheet(IWorkbook wk, object _sheetinfo)
{
ISheet sheet = null;
if (_sheetinfo is int)
{
sheet = wk.GetSheetAt((int)_sheetinfo);
}
else
{
sheet = wk.GetSheet((string)_sheetinfo);
}
if (sheet == null)
{
sheet = wk.GetSheetAt(0);
}
return sheet;
}
}
}
参数说明
DataTable dt = NPOI_Excel2DT_ByFileName("D:\\1.xlsx", "PP", true);
1、Excel文件路径
2、哪个sheet,可以是sheet名称,也可以是索引,如果找不到该名称或者索引的sheet,默认导入第一个sheet中的内容
3、excel文件的目标sheet的第一行是不是标题行
本文暂时没有评论,来添加一个吧(●'◡'●)