1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【NPOI】.NET EXCEL导入导出开发包

【NPOI】.NET EXCEL导入导出开发包

时间:2020-01-08 15:58:14

相关推荐

【NPOI】.NET EXCEL导入导出开发包

1.导出

//工作簿HSSFWorkbook

HSSFWorkbook hssfworkbook = new HSSFWorkbook();

//ISheet页

ISheet sheet1 = hssfworkbook.CreateSheet("员工资料");

//创建行

IRow rowHeader = sheet1.CreateRow(0);

//设置第一行中的每一个单元格

rowHeader.CreateCell(0, CellType.STRING).SetCellValue("工号");

//保存

using (Stream stream = File.OpenWrite(filename))

{

hssfworkbook.Write(stream);

}

2.设置样式

ICellStyle cellStyle = hssfworkbook.CreateCellStyle();

IDataFormat dataFormat = hssfworkbook.CreateDataFormat();

cellStyle.DataFormat = dataFormat.GetFormat("yyyy\"年\"m\"月\"d\"日\"");

//入职日期

ICell InDateCell = rowContent.CreateCell(3, CellType.NUMERIC);

InDateCell.CellStyle = cellStyle;

InDateCell.SetCellValue(item.InDate);

//设置Excel表格

3.设置宽度

在使用NPOI技术开发自动操作EXCEL软件时遇到不能精确设置列宽的问题。

ISheet sheet1 = hssfworkbook.CreateSheet("Sheet1");

sheet1.SetColumnWidth(0, 50 * 256); // 在EXCEL文档中实际列宽为49.29

sheet1.SetColumnWidth(1, 100 * 256); // 在EXCEL文档中实际列宽为99.29

sheet1.SetColumnWidth(2, 150 * 256); // 在EXCEL文档中实际列宽为149.29

到此一般人应该知道问题出在哪了,解决方法如下:

ISheet sheet1 = hssfworkbook.CreateSheet("Sheet1");

sheet1.SetColumnWidth(0, (int)((50 + 0.72) * 256)); // 在EXCEL文档中实际列宽为50

sheet1.SetColumnWidth(1, (int)((100 + 0.72) * 256)); // 在EXCEL文档中实际列宽为100

sheet1.SetColumnWidth(2, (int)((150 + 0.72) * 256)); // 在EXCEL文档中实际列宽为150

既在要设置的实际列宽中加上列宽基数:0.72

NPOI读写Excel

1、整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet;行:Row;单元格Cell。

2、NPOI是POI的C#版本,NPOI的行和列的index都是从0开始

3、POI读取Excel有两种格式一个是HSSF,另一个是XSSF。 HSSF和XSSF的区别如下:

HSSF is the POI Project's pure Java implementation of the Excel '97(-) file format.

XSSF is the POI Project's pure Java implementation of the Excel OOXML (.xlsx) file format.

即:HSSF适用以前的版本,XSSF适用版本及其以上的。

下面是用NPOI读写Excel的例子:ExcelHelper封装的功能主要是把DataTable中数据写入到Excel中,或者是从Excel读取数据到一个DataTable中。

ExcelHelper类:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using NPOI.HSSF.UserModel;using System.IO;using System.Data;namespace GMapDemo{class ExcelHelper : IDisposable{private string fileName = null; //文件名private IWorkbook workbook = null;private FileStream fs = null;private bool disposed;public ExcelHelper(string fileName){this.fileName = fileName;disposed = false;}/// <summary>/// 将DataTable数据导入到excel中/// </summary>/// <param name="data">要导入的数据</param>/// <param name="isColumnWritten">DataTable的列名是否要导入</param>/// <param name="sheetName">要导入的excel的sheet的名称</param>/// <returns>导入数据行数(包含列名那一行)</returns>public int DataTableToExcel(DataTable data, string sheetName, bool isColumnWritten){int i = 0;int j = 0;int count = 0;ISheet sheet = null;fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);if (fileName.IndexOf(".xlsx") > 0) // 版本workbook = new XSSFWorkbook();else if (fileName.IndexOf(".xls") > 0) // 版本workbook = new HSSFWorkbook();try{if (workbook != null){sheet = workbook.CreateSheet(sheetName);}else{return -1;}if (isColumnWritten == true) //写入DataTable的列名{IRow row = sheet.CreateRow(0);for (j = 0; j < data.Columns.Count; ++j){row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName);}count = 1;}else{count = 0;}for (i = 0; i < data.Rows.Count; ++i){IRow row = sheet.CreateRow(count);for (j = 0; j < data.Columns.Count; ++j){row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString());}++count;}workbook.Write(fs); //写入到excelreturn count;}catch (Exception ex){Console.WriteLine("Exception: " + ex.Message);return -1;}}/// <summary>/// 将excel中的数据导入到DataTable中/// </summary>/// <param name="sheetName">excel工作薄sheet的名称</param>/// <param name="isFirstRowColumn">第一行是否是DataTable的列名</param>/// <returns>返回的DataTable</returns>public DataTable ExcelToDataTable(string sheetName, bool isFirstRowColumn){ISheet sheet = null;DataTable data = new DataTable();int startRow = 0;try{fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);if (fileName.IndexOf(".xlsx") > 0) // 版本workbook = new XSSFWorkbook(fs);else if (fileName.IndexOf(".xls") > 0) // 版本workbook = new HSSFWorkbook(fs);if (sheetName != null){sheet = workbook.GetSheet(sheetName);}else{sheet = workbook.GetSheetAt(0);}if (sheet != null){IRow firstRow = sheet.GetRow(0);int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数if (isFirstRowColumn){for (int i = firstRow.FirstCellNum; i < cellCount; ++i){DataColumn column = new DataColumn(firstRow.GetCell(i).StringCellValue);data.Columns.Add(column);}startRow = sheet.FirstRowNum + 1;}else{startRow = sheet.FirstRowNum;}//最后一列的标号int rowCount = sheet.LastRowNum;for (int i = startRow; i <= rowCount; ++i){IRow row = sheet.GetRow(i);if (row == null) continue; //没有数据的行默认是nullDataRow dataRow = data.NewRow();for (int j = row.FirstCellNum; j < cellCount; ++j){if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是nulldataRow[j] = row.GetCell(j).ToString();}data.Rows.Add(dataRow);}}return data;}catch (Exception ex){Console.WriteLine("Exception: " + ex.Message);return null;}}public void Dispose(){Dispose(true);GC.SuppressFinalize(this);}protected virtual void Dispose(bool disposing){if (!this.disposed){if (disposing){if (fs != null)fs.Close();}fs = null;disposed = true;}}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。