1、引用NPOI;

using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;

2、导出excel

 1 private void btnadd_MouseUp(object sender, MouseButtonEventArgs e)
2 {
3 try
4 {
5 #region 打印导出无统计数据
6 if (dt != null && dt.Rows.Count > 0)
7 {
8 //创建工作薄
9 HSSFWorkbook wb = new HSSFWorkbook();
10 //创建一个名称为mySheet的表
11 ISheet sh = wb.CreateSheet("mySheet");
12 #region 设置表格内容
13 for (int i = 0; i < dt.Rows.Count; i++)
14 {
15 SetRow(wb, sh, i * 2);//设置表头
16 IRow row = sh.CreateRow(i * 2 + 1);
17 for (int j = 2; j < dt.Columns.Count - 7; j++)
18 {
19 if (j < 4)
20 {
21 string content = dt.Rows[i][j].ToString();
22 ICell cell = row.CreateCell(j - 2);
23 cell.SetCellValue(content);
24 }
25 else if (j > 4)
26 {
27 string content = dt.Rows[i][j].ToString();
28 ICell cell = row.CreateCell(j - 3);
29 cell.SetCellValue(content);
30 }
31 }
32 }
33 string saveFileName = "人员工资表.xls";
34 //FileStream fs=new FileStream();
35 SaveFileDialog saveDialog = new SaveFileDialog();
36 saveDialog.DefaultExt = "xls";
37 saveDialog.Filter = "Excel文件|*.xls";
38 saveDialog.FileName = saveFileName;
39 saveDialog.ShowDialog();
40 saveFileName = saveDialog.FileName;
41 if (saveFileName.IndexOf(":") < 0) return; //被点了取消
42 if (saveFileName != "")
43 {
44 using (FileStream fs = File.OpenWrite(saveDialog.FileName))//打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建是不要打开该文件
45 {
46 try
47 {
48 wb.Write(fs);
49 MessageBox.Show("导出成功!", "提示", MessageBoxButton.OK, MessageBoxImage.Asterisk);
50 }
51 catch (Exception ex)
52 {
53 MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message, "提示", MessageBoxButton.OK, MessageBoxImage.Error);
54 }
55 fs.Flush();
56 fs.Dispose();
57 fs.Close();
58 }
59 }
60 else
61 {
62 MessageBox.Show("请选择数据源!");
63 }
64 #endregion
65 }
66 else
67 {
68 MessageBox.Show("请选择数据源!");
69 }
70 #endregion
71 }
72 catch (Exception ex)
73 {
74 MessageBox.Show(ex.Message, "提示", MessageBoxButton.OK, MessageBoxImage.Error);
75 }
76 }

3、导入excel

  1   private void btnexport_MouseUp(object sender, MouseButtonEventArgs e)
2 {
3 try
4 {
5 string str = "";
6 string Error = "";
7 OpenFileDialog of = new OpenFileDialog();
8 of.DefaultExt = "xls";
9 of.Filter = "Excel文件|*.xls";
10 of.ShowDialog();
11 if (string.IsNullOrEmpty(of.FileName))
12 {
13 return;
14 }
15 if (of.CheckFileExists == true) //路径存在
16 {
17 string path = of.FileName;
18 using (FileStream fs = File.OpenRead(path)) //打开myxls.xls文件
19 {
20 HSSFWorkbook wk = new HSSFWorkbook(fs); //把xls文件中的数据写入wk中
21 #region 验证
22 for (int i = 0; i < wk.NumberOfSheets; i++) //NumberOfSheets是myxls.xls中总共的表数
23 {
24 ISheet sheet = wk.GetSheetAt(i); //读取当前表数据
25 for (int j = 1; j <= sheet.LastRowNum; j++) //LastRowNum 是当前表的总行数
26 {
27 IRow row = sheet.GetRow(j); //读取当前行数据
28 if (row != null)
29 {
30 for (int k = 0; k <= row.LastCellNum; k++) //LastCellNum 是当前行的总列数
31 {
32 if (k > 29)
33 {
34 break;
35 }
36 ICell cell = row.GetCell(k); //当前表格
37 if (cell != null)
38 {
39 string content = cell.ToString();
40 #region 验证
41
42 if (k > 3 && k < 30)
43 {
44 if (!new System.Text.RegularExpressions.Regex(@"^(([1-9]{1}\d*)|([0]{1}))(\.(\d){1,2})?$").IsMatch(content.Trim()))
45 {
46 Error += "表" + (i + 1) + "行" + (j + 1) + "列" + (k + 1) + "中有非法字符;\r\n";
47 }
48 }
49 else if (k == 1)
50 {
51 if (!new System.Text.RegularExpressions.Regex(@"^(([1-9]{1}\d*)|([0]{1}))(\.(\d){1,2})?$").IsMatch(content.Trim()))
52 {
53 Error += "表" + (i + 1) + "行" + (j + 1) + "列" + (k + 1) + "中有非法字符;\r\n";
54 }
55 }
56 #endregion
57 }
58 }
59 }
60 }
61 }
62 if (Error.Length > 0)
63 {
64 MessageBox.Show(Error + "请验证!", "提示", MessageBoxButton.OK, MessageBoxImage.Error);
65 return;
66 }
67
68 #endregion
69
70 for (int i = 0; i < wk.NumberOfSheets; i++) //NumberOfSheets是myxls.xls中总共的表数
71 {
72 ISheet sheet = wk.GetSheetAt(i); //读取当前表数据
73 string depid = "";
74 string userid = "";
75 string deptname = "";
76 for (int j = 1; j <= sheet.LastRowNum; j++) //LastRowNum 是当前表的总行数
77 {
78 IRow row = sheet.GetRow(j); //读取当前行数据
79 if (row != null)
80 {
81 str = str + "insert into wage(depid,depname,mon,userid,username,code,gwgz,xl,jishu,zili,jbgz,gl,weisheng,menzhen,tizu,zjjt,jiaotong,zinv,zbbt,jixiao,bufa,ycxj,yjlgz,yfhj,jfz,baoyang,yibao,shiye,fangjin,nianjin,nashui,sfgz,createdate) values(";
82 for (int k = 0; k <= row.LastCellNum; k++) //LastCellNum 是当前行的总列数
83 {
84 if (k > 29)
85 {
86 break;
87 }
88 ICell cell = row.GetCell(k); //当前表格
89 if (cell != null)
90 {
91 string content = cell.ToString();
92
93 #region 验证
94 if (!string.IsNullOrEmpty(content))
95 {
96 if (k == 0)
97 {
98 string sql = @"select depid,userid from wage where depname='" + content + "'";
99 DataSet ds = new DataBase().GetDataSet(sql);
100 DataTable newDT = ds.Tables[0];
101 depid = newDT.Rows[0][0].ToString();
102 userid = newDT.Rows[0][1].ToString();
103 if (string.IsNullOrEmpty(depid))
104 {
105 depid = "99999";
106 }
107 if (string.IsNullOrEmpty(userid))
108 {
109 userid = "1122222";
110 }
111 deptname = content;
112 str = str + "" + depid + ",'" + deptname + "',";
113 }
114 else
115 {
116 if (k == 1)
117 { str = str + content + ","; }
118 else if (k == 2)
119 {
120 str = str + "" + userid + ",'" + content + "',";
121 }
122 else
123 {
124 if (k > 3)
125 {
126 if (!new System.Text.RegularExpressions.Regex(@"^(([1-9]{1}\d*)|([0]{1}))(\.(\d){1,2})?$").IsMatch(content.Trim()))
127 {
128 MessageBox.Show("文件数据内有非数字,请修改!");
129 }
130 else
131 {
132 str = str + "'" + content + "',";
133 }
134 }
135 else
136 {
137 str = str + "'" + content + "',";
138 }
139 }
140 }
141 }
142 else
143 {
144 MessageBox.Show("文件内有空数据,请重新导入!");
145 }
146 #endregion
147 if (i == sheet.LastRowNum - 2)
148 {
149 break;
150 }
151 }
152 else
153 {
154 MessageBox.Show("文件为空,请重新导入!");
155 }
156 }
157 //str = str.ToString().Substring(0, str.Length - 1);
158 str = str + "'" + DateTime.Now + "'";
159 str = str + ");";
160 }
161 int result = new DataBase().ExecuteSQL(str);
162 str = "";
163 }
164 }
165 MessageBox.Show("导入成功", "提示", MessageBoxButton.OK, MessageBoxImage.Asterisk);
166 //重新绑定
167 BindData(int.Parse(common.SelectedValue.ToString()));
168 }
169 }
170 else
171 {
172 MessageBox.Show("文件不存在", "提示", MessageBoxButton.OK, MessageBoxImage.Error);
173 }
174 }
175 catch (Exception ex)
176 {
177 MessageBox.Show(ex.Message, "提示", MessageBoxButton.OK, MessageBoxImage.Error);
178 }
179
180 }

4、公共方法

  1  /// <summary>
2 /// 打印导出表头
3 /// </summary>
4 /// <param name="wb"></param>
5 /// <param name="sh"></param>
6 /// <param name="num"></param>
7 /// <returns></returns>
8 public IRow SetRow(HSSFWorkbook wb, ISheet sh, int num)
9 {
10 #region 设置表头
11 IRow row1 = sh.CreateRow(num);
12 row1.Height = 22 * 22;
13 ICell icell1top = row1.CreateCell(0);
14 icell1top.CellStyle = Getcellstyle(wb, stylexls.头);
15 icell1top.SetCellValue("部门");
16 ICell icell2top = row1.CreateCell(1);
17 icell2top.CellStyle = Getcellstyle(wb, stylexls.头);
18 icell2top.SetCellValue("月份");
19 ICell icell3top = row1.CreateCell(2);
20 icell3top.CellStyle = Getcellstyle(wb, stylexls.头);
21 icell3top.SetCellValue("职员");
22 ICell icell4top = row1.CreateCell(3);
23 icell4top.CellStyle = Getcellstyle(wb, stylexls.头);
24 icell4top.SetCellValue("人员编码");
25 ICell icell5top = row1.CreateCell(4);
26 icell5top.CellStyle = Getcellstyle(wb, stylexls.头);
27 icell5top.SetCellValue("岗位工资");
28 ICell icell6top = row1.CreateCell(5);
29 icell6top.CellStyle = Getcellstyle(wb, stylexls.头);
30 icell6top.SetCellValue("学历");
31 ICell icell7top = row1.CreateCell(6);
32 icell7top.CellStyle = Getcellstyle(wb, stylexls.头);
33 icell7top.SetCellValue("技术");
34 ICell icell8top = row1.CreateCell(7);
35 icell8top.CellStyle = Getcellstyle(wb, stylexls.头);
36 icell8top.SetCellValue("资历");
37 ICell icell9top = row1.CreateCell(8);
38 icell9top.CellStyle = Getcellstyle(wb, stylexls.头);
39 icell9top.SetCellValue("基本工资");
40 ICell icell10top = row1.CreateCell(9);
41 icell10top.CellStyle = Getcellstyle(wb, stylexls.头);
42 icell10top.SetCellValue("工龄");
43 ICell icell11top = row1.CreateCell(10);
44 icell11top.CellStyle = Getcellstyle(wb, stylexls.头);
45 icell11top.SetCellValue("卫生");
46 ICell icell12top = row1.CreateCell(11);
47 icell12top.CellStyle = Getcellstyle(wb, stylexls.头);
48 icell12top.SetCellValue("门诊");
49 ICell icell13top = row1.CreateCell(12);
50 icell13top.CellStyle = Getcellstyle(wb, stylexls.头);
51 icell13top.SetCellValue("提租");
52 ICell icell14top = row1.CreateCell(13);
53 icell14top.CellStyle = Getcellstyle(wb, stylexls.头);
54 icell14top.SetCellValue("专家津贴");
55 ICell icell15top = row1.CreateCell(14);
56 icell15top.CellStyle = Getcellstyle(wb, stylexls.头);
57 icell15top.SetCellValue("专家交通");
58 ICell icell16top = row1.CreateCell(15);
59 icell16top.CellStyle = Getcellstyle(wb, stylexls.头);
60 icell16top.SetCellValue("子女");
61 ICell icell17top = row1.CreateCell(16);
62 icell17top.CellStyle = Getcellstyle(wb, stylexls.头);
63 icell17top.SetCellValue("值班补贴");
64 ICell icell18top = row1.CreateCell(17);
65 icell18top.CellStyle = Getcellstyle(wb, stylexls.头);
66 icell18top.SetCellValue("绩效");
67 ICell icell19top = row1.CreateCell(18);
68 icell19top.CellStyle = Getcellstyle(wb, stylexls.头);
69 icell19top.SetCellValue("补发");
70 ICell icell20top = row1.CreateCell(19);
71 icell20top.CellStyle = Getcellstyle(wb, stylexls.头);
72 icell20top.SetCellValue("一次性奖");
73 ICell icell21top = row1.CreateCell(20);
74 icell21top.CellStyle = Getcellstyle(wb, stylexls.头);
75 icell21top.SetCellValue("月奖励工资");
76 ICell icell22top = row1.CreateCell(21);
77 icell22top.CellStyle = Getcellstyle(wb, stylexls.头);
78 icell22top.SetCellValue("应发合计");
79 ICell icell23top = row1.CreateCell(22);
80 icell23top.CellStyle = Getcellstyle(wb, stylexls.头);
81 icell23top.SetCellValue("局租房");
82 ICell icell24top = row1.CreateCell(23);
83 icell24top.CellStyle = Getcellstyle(wb, stylexls.头);
84 icell24top.SetCellValue("保养");
85 ICell icell25top = row1.CreateCell(24);
86 icell25top.CellStyle = Getcellstyle(wb, stylexls.头);
87 icell25top.SetCellValue("医保");
88 ICell icell26top = row1.CreateCell(25);
89 icell26top.CellStyle = Getcellstyle(wb, stylexls.头);
90 icell26top.SetCellValue("失业");
91 ICell icell27top = row1.CreateCell(26);
92 icell27top.CellStyle = Getcellstyle(wb, stylexls.头);
93 icell27top.SetCellValue("房金");
94 ICell icell28top = row1.CreateCell(27);
95 icell28top.CellStyle = Getcellstyle(wb, stylexls.头);
96 icell28top.SetCellValue("年金");
97 ICell icell29top = row1.CreateCell(28);
98 icell29top.CellStyle = Getcellstyle(wb, stylexls.头);
99 icell29top.SetCellValue("纳税");
100 ICell icell30top = row1.CreateCell(29);
101 icell30top.CellStyle = Getcellstyle(wb, stylexls.头);
102 icell30top.SetCellValue("实发工资");
103 #endregion
104 return row1;
105 }
 1  #region 定义单元格常用到样式的枚举
2 public enum stylexls
3 {
4 头,
5 url,
6 时间,
7 数字,
8 钱,
9 百分比,
10 中文大写,
11 科学计数法,
12 默认
13 }
14 #endregion
15 #region 定义单元格常用到的样式
16 static ICellStyle Getcellstyle(IWorkbook wb, stylexls str)
17 {
18 ICellStyle cellStyle = wb.CreateCellStyle();
19
20 //定义几种字体
21 //也可以一种字体,写一些公共属性,然后在下面需要时加特殊的
22 IFont font12 = wb.CreateFont();
23 font12.FontHeightInPoints = 10;
24 font12.FontName = "微软雅黑";
25
26
27 IFont font = wb.CreateFont();
28 font.FontName = "微软雅黑";
29 //font.Underline = 1;下划线
30
31
32 IFont fontcolorblue = wb.CreateFont();
33 fontcolorblue.Color = HSSFColor.OliveGreen.Blue.Index;
34 fontcolorblue.IsItalic = true;//下划线
35 fontcolorblue.FontName = "微软雅黑";
36
37
38 //边框
39 cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
40 cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
41 cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
42 cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
43 //水平对齐
44 cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left;
45
46 //垂直对齐
47 cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
48
49 //自动换行
50 cellStyle.WrapText = true;
51
52 //缩进;当设置为1时,前面留的空白太大了。希旺官网改进。或者是我设置的不对
53 cellStyle.Indention = 0;
54
55 //上面基本都是设共公的设置
56 //下面列出了常用的字段类型
57 switch (str)
58 {
59 case stylexls.头:
60 // cellStyle.FillPattern = FillPatternType.LEAST_DOTS;
61 cellStyle.SetFont(font12);
62 break;
63 case stylexls.时间:
64 IDataFormat datastyle = wb.CreateDataFormat();
65
66 cellStyle.DataFormat = datastyle.GetFormat("yyyy/mm/dd");
67 cellStyle.SetFont(font);
68 break;
69 case stylexls.数字:
70 cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
71 cellStyle.SetFont(font);
72 break;
73 case stylexls.钱:
74 IDataFormat format = wb.CreateDataFormat();
75 cellStyle.DataFormat = format.GetFormat("¥#,##0");
76 cellStyle.SetFont(font);
77 break;
78 case stylexls.百分比:
79 cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00%");
80 cellStyle.SetFont(font);
81 break;
82 case stylexls.中文大写:
83 IDataFormat format1 = wb.CreateDataFormat();
84 cellStyle.DataFormat = format1.GetFormat("[DbNum2][$-804]0");
85 cellStyle.SetFont(font);
86 break;
87 case stylexls.科学计数法:
88 cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00E+00");
89 cellStyle.SetFont(font);
90 break;
91 case stylexls.默认:
92 cellStyle.SetFont(font);
93 break;
94 }
95 return cellStyle;
96
97
98 }
99 #endregion

NPOI导入excel的更多相关文章

  1. ASP.NET MVC NPOI导入Excel DataTable批量导入到数据库

    使用NPOI导入Excel 首先在MVC项目中导入NPOI 查询NPOI安装,排序依据,选择:最高下载量,选择第一个. 在控制器中创建ExcelController 在Index视图中写入代码: @u ...

  2. 使用NPOI导入Excel注意日期格式和数字格式

    //使用NPOI导入Excel public static DataTable importExcelToDataSetUsingNPOI(string FilePath, string fileNa ...

  3. 使用npoi导入Excel - 带合并单元格--附代码

    之前我们在使用npoi导入excel表格的时候,往往会遇见那种带有合并单元格的数据在导入的时候出现合并为空的问题, 也就是只有第一条有数据,其余均为空白.在网上翻了半天也没有找到合适的解决方案,最后还 ...

  4. NPOI 导入Excel和读取Excel

    1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 ...

  5. NPOI导入excel为datatable (xls xlsx xlsm)

    使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中 http://www.cnblogs.com/songrun/p/3547738.html NPOI 2.0教程 – 自动 ...

  6. .Net Core 使用 NPOI 导入Excel

    由于之前在网上查阅一些资料发现总是不能编译通过,不能正常使用,现把能正常使用的代码贴出: /// <summary> /// Excel导入帮助类 /// </summary> ...

  7. NPOI导入Excel日期格式的处理 - 附类型格式匹配表

    传统操作Excel方法在部署的时候遇到很多问题,如目标主机需要安装Excel.64位电脑不支持.需要安装相关驱动程序等.所以我们一般会使用开源的NPOI来替代传统的Excel操作方法,NPOI的优点是 ...

  8. NPOI导入excel文件为DataTable,使用SqlBulkCopy添加到数据库表

    public DataTable ExcelToDataTable(Stream stream, string fileName) { DataTable data = new DataTable() ...

  9. Winforn中导入Excel并显示然后获取多选框选中的内容

    场景 使用NPOI导入Excel并赋值给DataTable,然后显示在DataGrdView上,并且添加多选框,然后获取选中行的内容. Winform中使用NPOI实现Excel导入并赋值给DataT ...

随机推荐

  1. 【bzoj2588/P2633】count on a tree —— LCA + 主席树

    (以下是luogu题面) 题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问 ...

  2. python sklearn库实现逻辑回归的实例代码

    Sklearn简介 Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression).降维(Dimensionality Red ...

  3. mfc c++优化

    1.不住求精度时,尽量使用单精度浮点型2.使用32位数据类型3.使用有符号和无符号整型: 前提:无需考虑正负时 double x; int i; x = i; 使用有符号:unsigned int i ...

  4. 19_B门长时曝光APP

    知识很基础-- 前几天买了个单反,特别想拍B门长时间曝光的效果.后来想想不如自己写个APP,实现屏幕背景的随机颜色以及全屏显示文字. 先上图: 这两张图片的左侧都很亮,这是因为APP里面忘记把&quo ...

  5. 更改ubuntu的分辨率

    乘号使用xyz的x打出来

  6. Unity全局调用非静态函数

    Unity全局调用非静态函数 情形 大概就是做游戏的时候想做一个给玩家展示信息的东西,比如玩家按了不该按的键提醒一下之类的.这个脚本倒是很简单,找个Text组件往上面加字就行了.问题在于这个脚本游戏中 ...

  7. 问题:PyCharm调试方法smart step into的用途

    smart step into为智能单步跟踪,当一行代码中有多个函数,想进入其中一个函数调测其他函数不进入调测时,使用该功能可以让调试人员选择进入的函数.如: 就可以选择需要调试进入的函数而其他两个函 ...

  8. Mybatis学习03

    title: Mybatis学习03 date: 2020-01-19 13:03:20 tags: Mybatis学习的第二天,内容有日志和分页. <!--more--> 1.日志 1. ...

  9. 建立sa用户登录

    Sa用户是SQL Server的超级管理员用户,由于该用户的特殊性,往往容易成为被攻击的漏洞对象,因此建议不要轻易启动该用户.下面讲述如何以Sa用户的身份登录当前的SQL Server系统. 第一步: ...

  10. flask注册蓝图报错

    记录下这个我找了两天的坑... take no arguments() 这两天一直学习flask的时候,我把注册的蓝图,写成注册的form表单的 举个栗子 class TetsView(view.Me ...