NPOI库读写Excel文件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

NPOI库读写Excel⽂件//⾸先Nuget安装NPOI库
using System;
using System.Data;
using System.IO;
using erModel;
using erModel;
using erModel;
public static class ExcelExtensions
{
/// <summary>
/// DataSet数据导出到Excel⽂件
/// </summary>
/// <param name="ds">DataSet</param>
/// <param name="fileName">⽂件全名</param>
/// <returns></returns>
public static bool DataSetToExcel(DataSet ds, string fileName)
{
IWorkbook workbook = new HSSFWorkbook();
FileStream fs = null;
try
{
int k = 0;
foreach (DataTable dt in ds.Tables)
{
if (dt != null && dt.Rows.Count > 0)
{
ISheet sheet = null;
if (!string.IsNullOrWhiteSpace(dt.TableName))
{
sheet = workbook.CreateSheet(dt.TableName);//创建⼀个名称为Sheet0的表
}
else
{
sheet = workbook.CreateSheet("Sheet" + k.ToString());//创建⼀个名称为Sheet0的表
}
int rowCount = dt.Rows.Count;//⾏数
int columnCount = dt.Columns.Count;//列数
//设置列头
IRow row = sheet.CreateRow(0);//excel第⼀⾏设为列头
ICell cell = null;
for (int c = 0; c < columnCount; c++)
{
cell = row.CreateCell(c);
cell.SetCellValue(dt.Columns[c].ColumnName);
}
//设置每⾏每列的单元格,
for (int i = 0; i < rowCount; i++)
{
row = sheet.CreateRow(i + 1);
for (int j = 0; j < columnCount; j++)
{
cell = row.CreateCell(j);//excel第⼆⾏开始写⼊数据
cell.SetCellValue(dt.Rows[i][j].ToString());
}
}
//设置最后⼀列单元格宽度
sheet.SetColumnWidth(columnCount - 1, 20000);
k = k + 1;
}
}
using (fs = File.OpenWrite(fileName))
{
workbook.Write(fs);//向打开的这个xls⽂件中写⼊数据
}
return true;
}
catch (Exception ex)
{
if (fs != null)
{
fs.Close();
}
return false;
}
}
/// <summary>
/// 将excel导⼊到dataset
/// </summary>
/// <param name="filePath">excel路径</param>
/// <param name="isColumnName">第⼀⾏是否是列名</param>
/// <returns>返回datatable</returns>
public static DataSet ExcelToDataSet(string filePath, bool isColumnName)
{
DataSet dataset = new DataSet();
DataTable dataTable = null;
FileStream fs = null;
IWorkbook workbook = 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)
{
for (int n = 0; n < workbook.NumberOfSheets; n++)
{
ISheet sheet = workbook.GetSheetAt(n); //读取第⼀个sheet,当然也可以循环读取每个sheet dataTable = new DataTable();
if (sheet != null && sheet.SheetName != "")
{
dataTable.TableName = sheet.SheetName;
int rowCount = stRowNum; //总⾏数
if (rowCount > 0)
{
IRow firstRow = sheet.GetRow(0); //第⼀⾏
int cellCount = stCellNum; //列数
//构建datatable的列
DataColumn column = null;
ICell cell = null;
if (isColumnName)
{
startRow = 1; //如果第⼀⾏是列名,则从第⼆⾏开始读取
for (int i = firstRow.FirstCellNum; i < cellCount; ++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 < cellCount; ++i)
{
column = new DataColumn("column" + (i + 1));
dataTable.Columns.Add(column);
}
}
//填充⾏
for (int i = startRow; i <= rowCount; ++i)
{
IRow row = sheet.GetRow(i);
if (row == null || string.IsNullOrWhiteSpace(row.Cells[0].ToString()))
continue;
DataRow dataRow = dataTable.NewRow();
for (int j = row.FirstCellNum; j < cellCount; ++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);
}
}
}
dataset.Tables.Add(dataTable);
}
}
}
return dataset;
}
catch (Exception)
{
if (fs != null)
{
fs.Close();
}
return null;
}
}
}。

相关文档
最新文档