本文实例为大家分享了C#使用NPOI实现Excel导入导出的具体代码,供大家参考,具体内容如下
Excel导入
使用OpenFileDiolog控件和button结合,选择文件导入,将路径显示在文本框
设置按钮点击事件,将文件路径赋给textBox.Text
1
2
3
4
5
6
7
|
private void Department_SUM_Click( object sender, EventArgs e) { OpenFileDialog open = new OpenFileDialog(); open.ShowDialog(); textBox1.Text = open.FileName; } |
实现excel导入,通过textBox1.Text来获取文件路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
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的位置”位置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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导出的方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
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文件的导入导出功能到这里全部完成
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_48591625/article/details/108190904