
“为什么越靠北方地区的人性格越直接?”“天寒地冻的,谁有时间跟你磨叽?”
今天我们讲解的内容是关于在mvc框架里对Excel表的导入,导出操作
1,导入:上传一个Excel文件-->读取Excel内容-->入库
思路:我们进行导入操作,前台先表单上传一个excel文件,然后把路径传到后台读取内容,存在新建的文件夹temp里
第一步:前台上传文件代码如下:
- <form method="post" action="~/npoi/read" enctype="multipart/form-data" style="width:600px;">
- <input type="file" name="username" />
- <input type="submit" value="上传导入" />
- </form>
第二步:后台通过文件流读取内容,判断数据类型,然后存入新建的文件夹temp里,代码如下:
- //进行导入操作
- public void Read()
- {
- //判断是否有数据
- if(Request.Files.Count>0)
- {
- string filename = Request.Files[0].FileName;
- string prex = filename.Substring(filename.LastIndexOf(".") + 1);
- if(prex.ToLower()=="xls")
- {
- //截取后缀,并且命名为随机不重复
- string url = Server.MapPath("~/temp/" + Guid.NewGuid().ToString().Replace("-", "") + ".xls");
- Request.Files[0].SaveAs(url);
- FileStream fileStream = new FileStream(url, FileMode.Open);
- //通过文件流打开excel表格
- HSSFWorkbook workbook = new HSSFWorkbook(fileStream);
- //读取excel表格下某一张表
- HSSFSheet sheet = workbook.GetSheet("Sheet1") as HSSFSheet;
- for (int i = 0; i <= sheet.LastRowNum; i++)
- {
- HSSFRow row = sheet.GetRow(i) as HSSFRow;
- string number = "";
- //判断值类型
- if (row.GetCell(0).CellType == NPOI.SS.UserModel.CellType.STRING)
- {
- number = row.GetCell(0).StringCellValue;
- }
- if (row.GetCell(0).CellType == NPOI.SS.UserModel.CellType.NUMERIC)
- {
- number = row.GetCell(0).NumericCellValue + "";
- }
- string name = row.GetCell(1).StringCellValue;
- Response.Write(number + ":" + name + "<br/>");
- }
- Response.End();
- }
- }
- }
我们打开temp文件,会发现已经存入了一个excel文件,打开就是我们上传的文件内容,如下图
2,导出:查询数据库-->动态创建Excel 填充数据-->下载到客户端
思路:我们进行导出操作,后台创建Excel,设置表格样式,填充数据,通过前台访问此方法,下载到客户端
后台代码如下:
- //进行导出操作
- public void Down()
- {
- //动态创建一个excel工作表
- HSSFWorkbook workbook = new HSSFWorkbook();
- //创建一个表
- HSSFSheet sheet = workbook.CreateSheet("重庆富婆通讯录") as HSSFSheet;
- //设置表头标题
- #region 公司说明
- HSSFRow head = sheet.CreateRow(0) as HSSFRow;
- HSSFCell headcell = head.CreateCell(0) as HSSFCell;
- //设置行高
- head.Height = 290 * 3;
- //设置列宽
- for (int i = 0; i < 5; i++)
- {
- sheet.SetColumnWidth(i, 255 * 12);
- }
- //合并单元格
- sheet.AddMergedRegion(new NPOI.SS.Util.Region(0, 0, 0, 4));
- //得到列样式
- HSSFCellStyle cellStyle = workbook.CreateCellStyle() as HSSFCellStyle;
- //垂直居中
- cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.CENTER;
- //水平居中
- cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;
- //得到字体的样式
- HSSFFont font = workbook.CreateFont() as HSSFFont;
- font.Boldweight = 800;
- //设置字体颜色
- font.Color = HSSFColor.ORANGE.index;
- font.FontHeight = 30 * 13;
- headcell.CellStyle = cellStyle;
- cellStyle.SetFont(font);
- cellStyle.WrapText = true; //让\n起作用
- headcell.SetCellValue("重庆富婆通讯有限公司\ntel:1858848");
- #endregion
- //创建行
- HSSFRow row = sheet.CreateRow(1) as HSSFRow;
- //创建列
- row.CreateCell(0).SetCellValue("姓名");
- row.CreateCell(1).SetCellValue("年龄");
- row.CreateCell(2).SetCellValue("财产");
- row.CreateCell(3).SetCellValue("电话");
- row.CreateCell(4).SetCellValue("微信");
- Random random = new Random();
- //从第二行开始写入数据
- for (int i = 2; i < 10; i++)
- {
- //创建行
- HSSFRow rows = sheet.CreateRow(i) as HSSFRow;
- //创建列
- rows.CreateCell(0).SetCellValue("艾美" + i);
- rows.CreateCell(1).SetCellValue(Convert.ToInt32("18") + i);
- rows.CreateCell(2).SetCellValue(random.Next(1000, 10000) + "万元");
- rows.CreateCell(3).SetCellValue(Convert.ToInt32("5487") + i);
- rows.CreateCell(4).SetCellValue("不公布");
- }
- //创建一个储存流
- MemoryStream memoryStream = new MemoryStream();
- workbook.Write(memoryStream);
- //执行创建生成命令
- Response.AddHeader("Content-Disposition", "attachment; filename=重庆富婆通讯录.xls");
- //把对象通过内存流转换为字节数组,然后把字节数组通过response传递到前台
- Response.BinaryWrite(memoryStream.ToArray());
- }
前台代码如下:
- <div style="margin-top:20px;">
- <button><a href="/npoi/down">导出创建Excel</a></button>
- </div>
演示效果如下图:
点击导出创建Excel这样它就会下载到客户端了,当然也可以自己添加的数据效果哦。
最后我们做一个小练习,就是后台创建一个excel表格,然后下载查看.
需求效果图如下:
首先创建这样感觉不是太难,就是调表格的样式有点麻烦。下面我们一起解析它是怎样生成的。
步骤1:像上面的导出操作一致,也是创建表格,然后我们需要控制行高和列宽等。代码如下:
- public void inform()
- {
- //动态创建一个excel工作表
- HSSFWorkbook workbook = new HSSFWorkbook();
- //创建一个表
- HSSFSheet sheet = workbook.CreateSheet("阿里工作信息表") as HSSFSheet;
- //创建行(三行的工作表)
- HSSFRow row1 = sheet.CreateRow(0) as HSSFRow;
- //设置行高
- row1.Height = 350 * 3;
- HSSFRow row2 = sheet.CreateRow(1) as HSSFRow;
- row2.Height = 250 * 3;
- HSSFRow row3 = sheet.CreateRow(2) as HSSFRow;
- row3.Height = 250 * 3;
- //八列的工作表
- //设置前四列的宽度
- for (int i = 0; i < 4; i++)
- {
- row1.CreateCell(i);
- row2.CreateCell(i);
- row3.CreateCell(i);
- //设置每列的宽度
- sheet.SetColumnWidth(i, 800 * 3);
- }
- //设置后四列的宽度
- for (int i = 4; i < 8; i++)
- {
- row1.CreateCell(i);
- row2.CreateCell(i);
- row3.CreateCell(i);
- //设置每列的宽度
- sheet.SetColumnWidth(i, 1500 * 3);
- }
- //合并前四列
- for (int i = 0; i < 4; i++)
- {
- //合并单元格
- sheet.AddMergedRegion(new NPOI.SS.Util.Region(0, i, 2, i));
- }
- //合并第一行的5列到8列
- sheet.AddMergedRegion(new NPOI.SS.Util.Region(0, 4, 0, 7));
- //合并第5列2到3行
- sheet.AddMergedRegion(new NPOI.SS.Util.Region(1, 4, 2, 4));
- //合并第6列2到3行
- sheet.AddMergedRegion(new NPOI.SS.Util.Region(1, 5, 2, 5));
- //合并第二行的7到8列
- sheet.AddMergedRegion(new NPOI.SS.Util.Region(1, 6, 1, 7));
- //得到列样式
- HSSFCellStyle cellStyle = workbook.CreateCellStyle() as HSSFCellStyle;
- //水平垂直居中样式
- cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;
- //垂直居中
- cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.CENTER;
- //得到字体的样式
- HSSFFont font = workbook.CreateFont() as HSSFFont;
- font.Boldweight = 800; //字体加粗
- //设置字体颜色
- // font.Color = HSSFColor.ORANGE.index;
- // font.FontHeight = 30 * 13;
- cellStyle.SetFont(font);
- //给每行或者每列添加应有的数据
- row1.GetCell(0).SetCellValue("编码");
- row1.GetCell(0).CellStyle = cellStyle;
- row1.GetCell(1).SetCellValue("月度");
- row1.GetCell(1).CellStyle = cellStyle;
- row1.GetCell(2).SetCellValue("工资");
- row1.GetCell(2).CellStyle = cellStyle;
- row1.GetCell(3).SetCellValue("绩效");
- row1.GetCell(3).CellStyle = cellStyle;
- row1.GetCell(4).SetCellValue("8月经营性指标");
- row1.GetCell(4).CellStyle = cellStyle;
- row2.GetCell(4).SetCellValue("在职人数");
- row2.GetCell(4).CellStyle = cellStyle;
- row2.GetCell(5).SetCellValue("新增人数");
- row2.GetCell(5).CellStyle = cellStyle;
- row2.GetCell(6).SetCellValue("实际销售为准");
- row2.GetCell(6).CellStyle = cellStyle;
- row3.GetCell(6).SetCellValue("人力");
- row3.GetCell(6).CellStyle = cellStyle;
- row3.GetCell(7).SetCellValue("出单率");
- row3.GetCell(7).CellStyle = cellStyle;
- //测试数据
- //从第四行开始写入数据]
- Random random = new Random();
- for (int i = 3; i < 10; i++)
- {
- //创建行
- HSSFRow rows = sheet.CreateRow(i) as HSSFRow;
- //创建列
- rows.CreateCell(0).SetCellValue("艾美" + i);
- rows.CreateCell(1).SetCellValue(Convert.ToInt32("18") + i);
- rows.CreateCell(2).SetCellValue(random.Next(1000, 10000) + "万元");
- rows.CreateCell(3).SetCellValue(Convert.ToInt32("5487") + i);
- rows.CreateCell(4).SetCellValue("不公布");
- rows.CreateCell(5).SetCellValue("xx" + i);
- rows.CreateCell(6).SetCellValue("zz" + i);
- rows.CreateCell(7).SetCellValue("cc" + i);
- }
- //创建一个储存流
- MemoryStream memoryStream = new MemoryStream();
- workbook.Write(memoryStream);
- //执行创建生成的命令
- Response.AddHeader("Content-Disposition", "attachment; filename=阿里工作信息表.xls");
- //把对象通过内存流转换为字节数组,然后把字节数组通过response传递到前台
- Response.BinaryWrite(memoryStream.ToArray());
- }
- 前台也是通过a标签访问此方法得到数据并下载.代码如下:
- <div style="margin-top:40px;">
- <button><a href="/npoi/inform">导出生成阿里工作表</a></button>
- </div>
- 演示效果如下图:
我们打开后的效果如下:
哈哈,感觉和原图还是有点差别,喜欢的朋友可以试下。好了本次分享就到这儿了
评价
排名
13
文章
64
粉丝
20
评论
30
MUI框架页面间的传值指针
XingDy姐 :
不错哦
MUI框架页面间的传值指针
剑轩 :
接口的真实地址可以用xx/yy什么的代替哦,真实地址还是隐藏一下好
.NET EF 用户按钮权限
YOU : 可以,在写文章的时候,有需要写代码的地方,可以选择编辑器上的代...
.NET EF 用户按钮权限
剑轩 : 哈哈哈哈,你这个追女生的逻辑
EF三种模式解析
剑轩 :
好文采!
重要sql语句和linq,lamdba分组条件查询语句
剑轩 : 开头那句诗句写得很好哇!
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术