使用npoi插件将excel文件导出
大致流程:前端使用URL地址的方式跳转到action后返回file类型数据
js:
window.location.href = '/Home/index?Id=' + id
后台代码:
/// <summary>
/// 导出对比结果
/// </summary>
/// <param name="quarter"></param>
/// <returns></returns>
public FileResult index(int Id)
{
try
{
var list = 可以根据传入参数查找到数据库中需要导出的数据列表 //创建Excel文件的对象
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
//创建样式
var style = book.CreateCellStyle();
//单元格样式:水平对齐居中
style.Alignment = HorizontalAlignment.Center;
//字体样式
var font=book.CreateFont();
//加粗
font.Boldweight=short.MaxValue;
//字体样式加入到单元格样式里面
style.SetFont(font); //添加一个sheet
NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");
var titleCell = sheet1.AddMergedRegion(new CellRangeAddress(, , , ));
var row = sheet1.CreateRow();
row.CreateCell().SetCellValue("签到标题:" + title + " 反馈进度:" + feedBackProgress);
//标题的样式设置
row.CreateCell().CellStyle = style;
//给sheet1添加第一行的头部标题
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(); row1.CreateCell().SetCellValue("姓名");
row1.CreateCell().SetCellValue("性别");
row1.CreateCell().SetCellValue("年龄");
//将数据逐步写入sheet1各个行 for (int i = ; i < list.Count; i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + );
rowtemp.CreateCell().SetCellValue(list[i].name);
rowtemp.CreateCell().SetCellValue(list[i].sex);//如果是时间字段需要tostring确定格式,否则导出到数据库的时候会变成一个小数的数字
rowtemp.CreateCell().SetCellValue(list[i].age);
}
// 写入到客户端
System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
ms.Seek(, SeekOrigin.Begin);
return File(ms, "application/vnd.ms-excel", string.Format("你的excel-{0}.xls", DateTime.Now.ToString("yyyyMMddhhmmss")));
}
catch (Exception ex)
{
logger.Error(ex.Message + ex.StackTrace);
return null;
}
}
上述代码存在一个错误,就是导出的excel合并行的标题不见了,经过研究发现,要写成如下形式:
//添加一个sheet
ISheet sheet1 = book.CreateSheet("Sheet1");
sheet1.AddMergedRegion(new CellRangeAddress(, , , )); var row = sheet1.CreateRow();
//标题的样式设置
var titleRow = row.CreateCell();
//创建样式
var style = book.CreateCellStyle();
//单元格样式:水平对齐居中
style.Alignment = HorizontalAlignment.Center;
//字体样式
var font = book.CreateFont();
//加粗
font.Boldweight = short.MaxValue;
//字体样式加入到单元格样式里面
style.SetFont(font);
titleRow.CellStyle = style;
row.CreateCell().CellStyle = style;
titleRow.SetCellValue("签到标题:" + title + " 反馈进度:" + feedBackProgress);
这里首先是
row.CreateCell(0)在设置的时候要统一用一个变量去设置,第二点就是
titleRow.CellStyle = style;
row.CreateCell(0).CellStyle = style;
先设置样式。再设置值,如果顺序颠倒也会出现比如字体不对或者不显示的问题.
另外,合并单元格方法的四个参数解释如下:
//CellRangeAddress四个参数为:起始行,结束行,起始列,结束列
使用npoi插件将excel文件导出的更多相关文章
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...
- 基于EPPlus和NPOI实现的Excel导入导出
基于EPPlus和NPOI实现的Excel导入导出 CollapseNav.Net.Tool.Excel(NuGet地址) 太长不看 导入 excel 文件流将会转为 ExcelTestDto 类型的 ...
- C# 使用 NPOI 库读写 Excel 文件
NPOI 是开源的 POI 项目的.NET版,可以用来读写Excel,Word,PPT文件.在处理Excel文件上,NPOI 可以同时兼容 xls 和 xlsx.官网提供了一份 Examples,给出 ...
- php excel文件导出之phpExcel扩展库
php Excel 文件导出 phpExcel 官网 http://phpexcel.codeplex.com/ /** * 导出特定文件 * 依据详细情况而定 */ public function ...
- 使用NPOI插件读取excel模版修改数据后保存到新目录新文件中
添加引用: using System.IO; using NPOI.XSSF.UserModel; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel ...
- NPOI读取excel文件导出数据, 而此时文件正在打开中抛异常怎么办
项目中需要用到一些数值表格, 方便起见都是用excel来的. 而如果excel正打开中, 直接使用npoi制作的工具来导出数据的话, 在这一行将会异常: workbook = new XSSFWork ...
- 根据NPOI 读取一个excel 文件的多个Sheet
大家都知道NPOI组件可以再你本地没有安装office的情况下来 读取,创建excel文件.但是大家一般都是只默认读取一个excel文件的第一个sheet.那么如果要读取一个excel 的所有shee ...
- .Net NPOI 上传excel文件、提交后台获取excel里的数据
1.导入NPOI.dll 2.添加类NPOIExcel.cs using System; using System.Collections.Generic; using System.Text; us ...
- NPOI库读写Excel文件
//首先Nuget安装NPOI库using System; using System.Data; using System.IO; using NPOI.HSSF.UserModel; using N ...
随机推荐
- UEditor编辑器 字符数统计和字符数限制 问题
1.百度UEditor修改右下角统计字数默认只统计前台所见的文字个数,为了便于展示实际保存的时候是保存的包含html标签的,所以右下角的统计字数功能需要修改 getContentLength: fun ...
- maven打包报错 ERROR: No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id
打开pom.xml 在build标签中 增加 <defaultGoal>compile</defaultGoal> 如下: <build><defaultGo ...
- poj 1284 Primitive Roots(未完)
Primitive Roots Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3155 Accepted: 1817 D ...
- TCP/IP协议簇分层详解---转
http://blog.csdn.net/hankscpp/article/details/8611229 一. TCP/IP 和 ISO/OSI ISO/OSI模型,即开放式通信系统互联参考模型(O ...
- android添加系统(服务、应用)
1. 添加系统服务 1.1 添加方式1:(不加入servicemanager统一管理的) 看Android6.0.1 init.rc解析中的第2章和第3章 方式1: 1). 写一个测试脚本test.s ...
- java POST 传值 加签 验证
话不多说,代码如下 package com.syl.test_key; import lombok.extern.slf4j.Slf4j; import org.apache.commons.code ...
- Java如何实现form表单提交的数据自动对应实体类(源码)
原文出自:https://blog.csdn.net/seesun2012 原生Java+JQuery form表单serializeArray提交自动对应java实体,这是一个实际的例子: html ...
- Java基础(六)包装类
一.包装类 JAVA是一种面向对象语言,java中的类把方法与数据连接在一起,但在JAVA中不能定义基本类型对象,为了能将基本类型视为对象进行处理,java为每个基本类型都提供了包装类. 对应关系如下 ...
- poi-word导出,导出多图片到word
一.添加依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratc ...
- Java温故而知新(10)类的加载机制
类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性 ...