把查询的数据导出到elsx表 关于流的概念
1.获取到需要导出的数据 因为这个对象是PagedResulDto类型的 所以封装成Table的时候 传pageList.Items就可以了
PagedResultDto<SearchSatisfactionUnfeedbackTaskLineOutput> pageList = await feedbackService.SearchSatisfactionUnfeedbackTaskLine(input);
DataTable dt = SatisfactionDataTable(pageList.Items);
return ExportExcel(dt);
2.把数据放到Table中
private DataTable SatisfactionDataTable(IReadOnlyList<SearchSatisfactionUnfeedbackTaskLineOutput> list)
{
DataTable dt = new DataTable("满意度问卷调查");
//添加列
dt.Columns.Add(new DataColumn() { ColumnName = nameof(SearchSatisfactionUnfeedbackTaskLineOutput.FeedbackTime), Caption = "回访日期", DataType = typeof(string) });
dt.Columns.Add(new DataColumn() { ColumnName = nameof(SearchSatisfactionUnfeedbackTaskLineOutput.CustomerName), Caption = "客户姓名", DataType = typeof(string) });
dt.Columns.Add(new DataColumn() { ColumnName = nameof(SearchSatisfactionUnfeedbackTaskLineOutput.Telephone), Caption = "联系电话", DataType = typeof(string) });
dt.Columns.Add(new DataColumn() { ColumnName = nameof(SearchSatisfactionUnfeedbackTaskLineOutput.AccountModelProvinceName), Caption = "省", DataType = typeof(string) });
dt.Columns.Add(new DataColumn() { ColumnName = nameof(SearchSatisfactionUnfeedbackTaskLineOutput.AccountModelCityName), Caption = "市", DataType = typeof(string) });
dt.Columns.Add(new DataColumn() { ColumnName = nameof(SearchSatisfactionUnfeedbackTaskLineOutput.QualityScore), Caption = "产品实物质量(50%)", DataType = typeof(string) });
dt.Columns.Add(new DataColumn() { ColumnName = nameof(SearchSatisfactionUnfeedbackTaskLineOutput.TimelinessScore), Caption = "交付及时性(20%)", DataType = typeof(string) });
dt.Columns.Add(new DataColumn() { ColumnName = nameof(SearchSatisfactionUnfeedbackTaskLineOutput.ServiceScore), Caption = "服务质量(15%)", DataType = typeof(string) });
dt.Columns.Add(new DataColumn() { ColumnName = nameof(SearchSatisfactionUnfeedbackTaskLineOutput.AppearanceScore), Caption = "产品外观(15%)", DataType = typeof(string) });
dt.Columns.Add(new DataColumn() { ColumnName = nameof(SearchSatisfactionUnfeedbackTaskLineOutput.QuestionnaireContent), Caption = "综合评价及建议", DataType = typeof(string) });
dt.Columns.Add(new DataColumn() { ColumnName = nameof(SearchSatisfactionUnfeedbackTaskLineOutput.remarks), Caption = "备注", DataType = typeof(string) });
dt.Columns.Add(new DataColumn() { ColumnName = nameof(SearchSatisfactionUnfeedbackTaskLineOutput.FeedbackData), Caption = "得分", DataType = typeof(string) });
foreach (var model in list)
{
//添加行
DataRow row = dt.NewRow();
row[nameof(SearchSatisfactionUnfeedbackTaskLineOutput.FeedbackTime)] = model.FeedbackTime.Value.ToLongDateString();
row[nameof(SearchSatisfactionUnfeedbackTaskLineOutput.CustomerName)] = model.CustomerName;
row[nameof(SearchSatisfactionUnfeedbackTaskLineOutput.Telephone)] = Publics.MaskTelephone(model.Telephone);
row[nameof(SearchSatisfactionUnfeedbackTaskLineOutput.AccountModelProvinceName)] = model.AccountModelProvinceName;
row[nameof(SearchSatisfactionUnfeedbackTaskLineOutput.AccountModelCityName)] = model.AccountModelCityName;
row[nameof(SearchSatisfactionUnfeedbackTaskLineOutput.QualityScore)] = model.QualityScore;
row[nameof(SearchSatisfactionUnfeedbackTaskLineOutput.TimelinessScore)] = model.TimelinessScore;
row[nameof(SearchSatisfactionUnfeedbackTaskLineOutput.ServiceScore)] = model.ServiceScore;
row[nameof(SearchSatisfactionUnfeedbackTaskLineOutput.AppearanceScore)] = model.AppearanceScore;
row[nameof(SearchSatisfactionUnfeedbackTaskLineOutput.QuestionnaireContent)] = model.QuestionnaireContent;
row[nameof(SearchSatisfactionUnfeedbackTaskLineOutput.remarks)] = model.remarks;
row[nameof(SearchSatisfactionUnfeedbackTaskLineOutput.FeedbackData)] = model.FeedbackData;
dt.Rows.Add(row);
}
return dt;
}
3.把table中的数据放到xlsx工作表中 创建XSSFWorkbook对象和ISheet对象 需要引用NPOI包 可以在官网下载
private FileResult ExportExcel(DataTable dt)
{
//操作xlsx表的对象
XSSFWorkbook book = new XSSFWorkbook();
//创建一个工作表
ISheet sheet = book.CreateSheet(dt.TableName);
;
//给xlsx工作表创建第0行
IRow headerRow = sheet.CreateRow(rowIndex);
rowIndex++;
//设置样式
ICellStyle style = book.CreateCellStyle();
style.VerticalAlignment = VerticalAlignment.Center;
//循环table中的列名 放到xlsx中当列名
; i < dt.Columns.Count; i++)
{
//获取当前列 创建第i个单元格 把列名放到单元格中
DataColumn column = dt.Columns[i];
ICell cell = headerRow.CreateCell(i);
cell.SetCellValue(column.Caption);
}
//循环table中的数据
foreach (DataRow dataRow in dt.Rows)
{
//在xlsx工作表中创建第rowIndex行
IRow row = sheet.CreateRow(rowIndex);
; i < dt.Columns.Count; i++)
{
//每次都创建一个cell单元格 来接收当前列的数据值
DataColumn column = dt.Columns[i];
ICell cell = row.CreateCell(i);
if (column.DataType == typeof(string))
{
if (dataRow[column] != null)
{
cell.SetCellValue(dataRow[column].ToString());
}
}
else if (column.DataType == typeof(int))
{
if (dataRow[column] != null)
{
cell.SetCellValue(double.Parse(dataRow[column].ToString()));
}
}
else if (column.DataType == typeof(DateTime))
{
if (dataRow[column] != null)
{
//cell.SetCellValue(DateTime.Parse(dataRow[column].ToString()));
cell.SetCellValue(dataRow[column].ToString());
}
}
}
rowIndex++;
}
; i < dt.Columns.Count; i++)
{
//设置第i列宽度自适应
sheet.AutoSizeColumn(i);
}
var ms = new NPOIMemoryStream();
book.Write(ms);
ms.Flush();
ms.Position = ;
return File(ms, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", dt.TableName + ".xlsx");
}
4.导出需要用到的一个对象
public class NPOIMemoryStream : MemoryStream
{
/// <summary>
/// 获取流是否关闭
/// </summary>
public bool IsColse
{
get;
private set;
}
public NPOIMemoryStream(bool colse = false)
{
IsColse = colse;
}
public override void Close()
{
if (IsColse)
{
base.Close();
}
}
}
5.返回是调用File() 第一个参数 当前流 第二个参数 book(当前xlsx工作表的地址 可以调试看到) 第三个参数要下载的xlsx的名字

关于ISheet接口中的属性方法介绍
https://github.com/dotnetcore/NPOI/blob/master/src/NPOI/SS/UserModel/Sheet.cs
关于Stream、FileStream、MemoryStream的区别


***********************************
把查询的数据导出到elsx表 关于流的概念的更多相关文章
- 数据库查询的数据导出到xls表,集合数据导出到xls表
//实体类package com.outxls; public class Student { private Integer studentId; private String studentNam ...
- 使用SSM框架实现Sql数据导出成Excel表
SSM框架实现SQL数据导出Excel 思路 首先在前端页面中添加一个导出功能的button,然后与后端controller进行交互. 接着在相应的controller中编写导出功能方法. 方法体: ...
- java中的数据导出到Excel表中
整个项目中导出数据到.Excel的源码 import java.io.BufferedOutputStream; import java.io.FileInputStream; import java ...
- 将数据导出成excel表
/// <summary> /// 生成excel表 /// </summary> /// <param name="dt">数据表</p ...
- jsp页面查询的数据导出到excel
java导入导出excel操作(jxl) jxl.jar 包下载地址:http://www.andykhan.com/jexcelapi/真实下载地址:http://www.andykhan.com/ ...
- Python 把数据库的数据导出到excel表
import io,xlwt def export_excel(request): """导出数据到excel表""" list_obj = ...
- python 用xlwt包把数据导出到excel表中
def write_excel(): f = xlwt.Workbook() #创建工作簿 ''' 创建第一个sheet: sheet1 ''' sheet1 = f.add_sheet(u'shee ...
- 【ITOO 1】将List数据导出Excel表
需求描述:在课表导入的时候,首先给用户提供模板(excel),然后将用户填写好的数据读取到list集合中.再进行判空处赋值处理,以及去重处理.这篇博客,主要介绍读取excel表和导出excel表的方法 ...
- 将C1Chart数据导出到Excel
大多数情况下,当我们说将图表导出到Excel时,意思是将Chart当成图片导出到Excel中.如果是这样,你可以参考帮助文档中保存和导出C1Chart章节. 不过,也有另一种情况,当你想把图表中的数据 ...
随机推荐
- 【react】兄弟组件的通信方式,传统非redux
很多用过redux开发的朋友们都知道,一般兄弟组件通信可以使用redux. redux也是近期在挤时间学习中.可能也不是很懂,说不定是有错误的理解,若有.现在虽然自己搭建了一个react+router ...
- RabbitMQ的安装与基本使用
运行环境:https://oneinstack.com/install/ 在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提 ...
- Zookeeper本地模式安装
本地模式安装部署 1.安装前准备 (1)安装Jdk (2)拷贝Zookeeper安装包到Linux系统下 (3)解压到指定目录 tar -zxvf zookeeper-3.4.10.tar.gz -C ...
- List,Set,Collection,Collections比较
官方话 1.List和Set都是接口,他们都继承于接口Collection,List是一个有序的可重复的集合,而Set的无序的不可重复的集合.Collection是集合的顶层接口,Collection ...
- c++ kafka 客户端rdkafka报Receive failed: Disconnected问题原因以及解决方法
%3|1538976114.812|FAIL|rdkafka#producer-1| [thrd:kafka-server:9092/bootstrap]: kafka-server:9092/0: ...
- 【题解】bzoj 4327 JSOI2012 玄武密码
原题传送门 我们先对所有询问串建立AC自动机(今天洛咕上有人分不清AC自动机和自动AC机) 然后将母串在AC自动机上跑,每走到一个点x,从x点出发沿着fail指针所能到的所有前缀都是匹配成功的,暴力向 ...
- Docker 配置
1. 网络 使用redsocks 需要配置 iptables -t nat -A PREROUTING -p tcp -j REDSOCKS 还需要使能 route_localnet # settin ...
- day 27 异常处理
一.异常 1.什么是异常? 异常指的是与正常情况不同在程序中 程序的正常执行过程 按照代码顺序 一行一行的执行 直到所有的代码都执行完如果在执行过程中出现了错误导致代码无法执行完毕 这就称之为异常异常 ...
- 前端 --- 3 css 属性
一. 标签嵌套规则 块级标签能够嵌套某些块级标签和内敛标签(行内标签) 内敛标签不能嵌套块级标签,只能嵌套内敛标签 二. 属性 1.宽和高 (块级标签能够设置高度和宽度 内敛标签不能设置,设置了没 ...
- Manjaro 系统添加国内源和安装搜狗输入法
添加中科大源 #打开配置文件 kate /etc/pacman.conf 在文件末尾添加 [archlinuxcn] SigLevel = Optional TrustedOnly Server = ...