大致流程:前端使用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文件导出的更多相关文章

  1. 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的路由方案,与原来的方案在使用上差别不 ...

  2. 基于EPPlus和NPOI实现的Excel导入导出

    基于EPPlus和NPOI实现的Excel导入导出 CollapseNav.Net.Tool.Excel(NuGet地址) 太长不看 导入 excel 文件流将会转为 ExcelTestDto 类型的 ...

  3. C# 使用 NPOI 库读写 Excel 文件

    NPOI 是开源的 POI 项目的.NET版,可以用来读写Excel,Word,PPT文件.在处理Excel文件上,NPOI 可以同时兼容 xls 和 xlsx.官网提供了一份 Examples,给出 ...

  4. php excel文件导出之phpExcel扩展库

    php Excel  文件导出 phpExcel 官网 http://phpexcel.codeplex.com/ /** * 导出特定文件 * 依据详细情况而定 */ public function ...

  5. 使用NPOI插件读取excel模版修改数据后保存到新目录新文件中

    添加引用: using System.IO; using NPOI.XSSF.UserModel; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel ...

  6. NPOI读取excel文件导出数据, 而此时文件正在打开中抛异常怎么办

    项目中需要用到一些数值表格, 方便起见都是用excel来的. 而如果excel正打开中, 直接使用npoi制作的工具来导出数据的话, 在这一行将会异常: workbook = new XSSFWork ...

  7. 根据NPOI 读取一个excel 文件的多个Sheet

    大家都知道NPOI组件可以再你本地没有安装office的情况下来 读取,创建excel文件.但是大家一般都是只默认读取一个excel文件的第一个sheet.那么如果要读取一个excel 的所有shee ...

  8. .Net NPOI 上传excel文件、提交后台获取excel里的数据

    1.导入NPOI.dll 2.添加类NPOIExcel.cs using System; using System.Collections.Generic; using System.Text; us ...

  9. NPOI库读写Excel文件

    //首先Nuget安装NPOI库using System; using System.Data; using System.IO; using NPOI.HSSF.UserModel; using N ...

随机推荐

  1. Java虚拟机知识 总结 记录

    总结了自己这两天掌握的一些JVM相关的知识.方便自己复习. jvm全称是Java Virtual Machine(java虚拟机).它之所以被称之为是“虚拟”的,就是因为它仅仅是由一个规范来定义的抽象 ...

  2. 关于80286——《x86汇编语言:从实模式到保护模式》读书笔记15

    一.80286的工作模式 80286首次提出了实模式和保护模式的概念. 实模式:和8086的工作方式相同: 保护模式:提供了存储器管理机制和保护机制,支持多任务. 二.80286的寄存器 (一)通用寄 ...

  3. C 标准库 - string.h之strlen使用

    strlen Returns the length of the C string str. The length of a C string is determined by the termina ...

  4. Laravel 使用Voyager导致多个数据库连接总是返回默认连接?

    问题与分析 最近的项目碰到一个奇怪的问题,在Laravel(5.3)中想建立多个数据库连接连到MySQL的不同数据库(另一个连接名为conn2),执行如下语句得到却发现得到的仍然是默认连接: $con ...

  5. jquery获取子元素

    Jquery获取子元素的方法有2种,分别是children()方法和find()方法. 下面我们分别来使用这两种方法,看看它们有何差异. children()方法:获取该元素下的直接子集元素 find ...

  6. php发送邮件功能(PHPMailer-master插件)

    当作一个插件使用即可,放到网站根目录,然后调用里面的mail.php 源码

  7. Hibernate学习1--对象持久化的思想

    前些天开始接触hibernate,想想以前直接用c3p0进行笨拙而繁杂的数据库操作就觉得生无可恋了,也正因如此,在刚刚接触hibernate的我,便强烈地喜欢上这种偷懒而优雅的面向对象式操作数据库的方 ...

  8. 深入理解javascript原型和闭包_____全部

    http://www.cnblogs.com/wangfupeng1988/p/3977924.html

  9. 远程连接Redis服务器

    建立了一个redis服务器,那么其他主机应该怎么连接上呢? /** * * 修改redis.conf配置文件 * */ // 1. 注释掉bind绑定配置 // 2. 搜索并修改为 protected ...

  10. Scarpy+selenium 结合使用

    首先要先在spider对象实例化时,同时实例化一个浏览器对象 # -*- coding: utf-8 -*- import scrapy from selenium import webdriver ...