日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發布時間:2024/10/12 asp.net 104 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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(-2007) file format.
XSSF is the POI Project's pure Java implementation of the Excel 2007 OOXML (.xlsx) file format.
即:HSSF適用2007以前的版本,XSSF適用2007版本及其以上的。

下面是用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) // 2007版本workbook = new XSSFWorkbook();else if (fileName.IndexOf(".xls") > 0) // 2003版本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) // 2007版本workbook = new XSSFWorkbook(fs);else if (fileName.IndexOf(".xls") > 0) // 2003版本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; //沒有數據的行默認是null       DataRow 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;}}} }

轉載于:https://www.cnblogs.com/mcad/p/4124035.html

總結

以上是生活随笔為你收集整理的【NPOI】.NET EXCEL导入导出开发包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。