excel npoi 连接_C#中NPOI操作excel之读取和写入excel数据

using System;

using System.Data;

using System.IO;

using NPOI.SS.UserModel;

using NPOI.XSSF.UserModel;

using NPOI.HSSF.UserModel;

namespace NPOIOprateExcel

{

public class ExcelUtility

{

/// 

/// 将excel导入到datatable

/// 

/// excel路径

/// 第一行是否是列名

/// 返回datatable

public static DataTable ExcelToDataTable(string filePath, bool isColumnName)

{

DataTable dataTable = null;

FileStream fs = null;

DataColumn column = null;

DataRow dataRow = null;

IWorkbook workbook = null;

ISheet sheet = null;

IRow row = null;

ICell cell = null;

int startRow = 0;

try

{

using (fs = File.OpenRead(filePath))

{

// 2007版本

if (filePath.IndexOf(".xlsx") > 0)

workbook = new XSSFWorkbook(fs);

// 2003版本

else if (filePath.IndexOf(".xls") > 0)

workbook = new HSSFWorkbook(fs);

if (workbook != null)

{

sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet

dataTable = new DataTable();

if (sheet != null)

{

int rowCount = sheet.LastRowNum;//总行数

if (rowCount > 0)

{

IRow firstRow = sheet.GetRow(0);//第一行

int cellCount = firstRow.LastCellNum;//列数

//构建datatable的列

if (isColumnName)

{

startRow = 1;//如果第一行是列名,则从第二行开始读取

for (int i = firstRow.FirstCellNum; i 

{

cell = firstRow.GetCell(i);

if (cell != null)

{

if (cell.StringCellValue != null)

{

column = new DataColumn(cell.StringCellValue);

dataTable.Columns.Add(column);

}

}

}

}

else

{

for (int i = firstRow.FirstCellNum; i 

{

column = new DataColumn("column" + (i + 1));

dataTable.Columns.Add(column);

}

}

//填充行

for (int i = startRow; i <= rowCount; ++i)

{

row = sheet.GetRow(i);

if (row == null) continue;

dataRow = dataTable.NewRow();

for (int j = row.FirstCellNum; j 

{

cell = row.GetCell(j);

if (cell == null)

{

dataRow[j] = "";

}

else

{

//CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)

switch (cell.CellType)

{

case CellType.Blank:

dataRow[j] = "";

break;

case CellType.Numeric:

short format = cell.CellStyle.DataFormat;

//对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理

if (format == 14 || format == 31 || format == 57 || format == 58)

dataRow[j] = cell.DateCellValue;

else

dataRow[j] = cell.NumericCellValue;

break;

case CellType.String:

dataRow[j] = cell.StringCellValue;

break;

}

}

}

dataTable.Rows.Add(dataRow);

}

}

}

}

}

return dataTable;

}

catch (Exception)

{

if (fs != null)

{

fs.Close();

}

return null;

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值