C#使用NPOI實現Excel導入導出功能
本文實例為大傢分享瞭C#使用NPOI實現Excel導入導出的具體代碼,供大傢參考,具體內容如下
Excel導入
使用OpenFileDiolog控件和button結合,選擇文件導入,將路徑顯示在文本框
設置按鈕點擊事件,將文件路徑賦給textBox.Text
private void Department_SUM_Click(object sender, EventArgs e) { OpenFileDialog open = new OpenFileDialog(); open.ShowDialog(); textBox1.Text = open.FileName; }
實現excel導入,通過textBox1.Text來獲取文件路徑
private void button_Excel_Click(object sender, EventArgs e) { FileStream fs = null; IWorkbook workbook = null; ISheet sheet = null; IRow row = null; String txtpath = textBox1.Text; fs = File.OpenRead(txtpath); workbook = new XSSFWorkbook(fs); if (workbook != null) { sheet = workbook.GetSheetAt(0); //獲取excel表格的第一個sheet if (sheet != null) { //行的LastRowNum是0~N-1 //列的LastCellNum是1~N int rowCount = sheet.LastRowNum; if (rowCount > 0) { IRow firstrow = sheet.GetRow(0); int cellCount = firstrow.LastCellNum; for (int i = 0; i <= rowCount - 1; i++) { //獲取行的第6和第7列數據,如果cell類型是文本,則通過StringCellValue取值 //如果cell類型是數值,則通過NumericCellValue來取值 row = sheet.GetRow(i + 1); row.Cells[5].NumericCellValue; row.Cells[6].StringCellValue; //可以將Cell的數據存放在list中,這裡假設將兩列cell的數據存入list1,list2 } fs.Close(); } //實際存放DataTable的位置 //調用自定義方法,實現導出 Add_DataTable_To_Excel(txtpath, table, sheet_name); } }
要實現excel導出,先將程序中的excel存為DataTable格式
本段代碼存在於上面代碼“//實際存放DataTable的位置”位置
DataTable table = new DataTable(); DataRow dr; table.Columns.Add("列名1", System.Type.GetType("System.String")); table.Columns.Add("列名2", System.Type.GetType("System.Double")); for (int i = 0; i < list4.Count; i++) { dr = table.NewRow(); dr["列名1"] = list1i]; dr["列名2"] = list2[i].ToString("0.0000"); //將存入的數據格式保存為保留四位小數 table.Rows.Add(dr); }
通過方法導出excel,傳參為文件路徑,DataTable,表名
通過獲取要導入數據的目標excel的內容,導入數據,要將excel導出的方式
public bool Add_DataTable_To_Excel(string output_file_path, DataTable dt, string sheet_name) { FileStream fs = null; IWorkbook workbook = null; ISheet sheet = null; IRow row = null; XSSFWorkbook xssfworkbook = null; fs = new FileStream(output_file_path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); xssfworkbook = new XSSFWorkbook(fs); sheet = xssfworkbook.GetSheet(sheet_name); //設置馬上要使用的Cell數據格式 IDataFormat dataformat = xssfworkbook.CreateDataFormat(); ICellStyle style0 = xssfworkbook.CreateCellStyle(); style0.DataFormat = dataformat.GetFormat("0.0000"); ICellStyle style1 = xssfworkbook.CreateCellStyle(); style1.DataFormat = dataformat.GetFormat("0.00%"); if (sheet != null) { int rowCount = sheet.LastRowNum; if (rowCount > 0) { IRow firstrow = sheet.GetRow(0); int cellCount = firstrow.LastCellNum; for (int i = 0; i <= rowCount - 1; i++) { row = sheet.GetRow(i + 1); //表中有行為空,將空的行影響消除 if (!"".Equals(row.Cells[code_index].StringCellValue)) { row = sheet.GetRow(i + 1); for (int j = 0; j <= dt.Rows.Count - 1; j++) { if (row.Cells[code_index].StringCellValue.Equals(dt.Rows[j][0])) { //遍歷將DataTable中的數據存入Cell的值 row.Cells[1].SetCellValue(Convert.ToDouble(dt.Rows[j][0].ToString())); row.Cells[1].CellStyle = style0; row.Cells[2].SetCellValue(Convert.ToDouble(dt.Rows[j][1].ToString()) / Convert.ToDouble(dt.Rows[j][1].ToString())); row.Cells[2].CellStyle = style1; } } } } } } //導出excel MemoryStream stream = new MemoryStream(); xssfworkbook.Write(stream); var buf = stream.ToArray(); using (FileStream fss = new FileStream(txtpath, FileMode.Create, FileAccess.Write)) //保存為Excel文件 { fss.Write(buf, 0, buf.Length); fss.Flush(); } return true; }
基礎的Excel文件的導入導出功能到這裡全部完成
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- C#使用NPOI讀取excel轉為DataSet
- C#使用NPOI將excel導入到list的方法
- 詳解Python操作Excel之openpyxl
- C#使用NPOI對Excel數據進行導入導出
- C#使用NPOI庫讀寫Excel文件