本文小编为大家详细介绍“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; } } } } } }//导出excelMemoryStream 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文件的导入导出功能到这里全部完成
读到这里,这篇“C#中如何使用NPOI实现Excel导入导出功能”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。