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表 关于流的概念的更多相关文章

  1. 数据库查询的数据导出到xls表,集合数据导出到xls表

    //实体类package com.outxls; public class Student { private Integer studentId; private String studentNam ...

  2. 使用SSM框架实现Sql数据导出成Excel表

    SSM框架实现SQL数据导出Excel 思路 首先在前端页面中添加一个导出功能的button,然后与后端controller进行交互. 接着在相应的controller中编写导出功能方法. 方法体: ...

  3. java中的数据导出到Excel表中

    整个项目中导出数据到.Excel的源码 import java.io.BufferedOutputStream; import java.io.FileInputStream; import java ...

  4. 将数据导出成excel表

    /// <summary> /// 生成excel表 /// </summary> /// <param name="dt">数据表</p ...

  5. jsp页面查询的数据导出到excel

    java导入导出excel操作(jxl) jxl.jar 包下载地址:http://www.andykhan.com/jexcelapi/真实下载地址:http://www.andykhan.com/ ...

  6. Python 把数据库的数据导出到excel表

    import io,xlwt def export_excel(request): """导出数据到excel表""" list_obj = ...

  7. python 用xlwt包把数据导出到excel表中

    def write_excel(): f = xlwt.Workbook() #创建工作簿 ''' 创建第一个sheet: sheet1 ''' sheet1 = f.add_sheet(u'shee ...

  8. 【ITOO 1】将List数据导出Excel表

    需求描述:在课表导入的时候,首先给用户提供模板(excel),然后将用户填写好的数据读取到list集合中.再进行判空处赋值处理,以及去重处理.这篇博客,主要介绍读取excel表和导出excel表的方法 ...

  9. 将C1Chart数据导出到Excel

    大多数情况下,当我们说将图表导出到Excel时,意思是将Chart当成图片导出到Excel中.如果是这样,你可以参考帮助文档中保存和导出C1Chart章节. 不过,也有另一种情况,当你想把图表中的数据 ...

随机推荐

  1. 新建web项目myeclipse基本设置

    1. General --> Workspace --> UTF-82. General --> Editors --> Associations --> JSP --& ...

  2. ltp makefile 解析

    困惑于 /include/mk/automake.mk中出现了第一个目标 而makefile却任然将all当做最终目标 测试了一番后发觉: ifeq ($(MAKE_3_80_COMPAT),1)# ...

  3. Web安全学习笔记之更新kali国内源

    vi /etc/apt/sources.list #中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib ...

  4. P2048 [NOI2010]超级钢琴(RMQ+堆+贪心)

    P2048 [NOI2010]超级钢琴 区间和--->前缀和做差 多次查询区间和最大--->前缀和RMQ 每次取出最大的区间和--->堆 于是我们设个3元组$(o,l,r)$,表示左 ...

  5. jbpm 6 vs activities 5评估(持续更新、亲测实际项目评估)

    最近我们有个使用了jbpm 6.2(6.2是一个较大的里程碑)的批处理模块,因为大BOSS一直觉得太重了,希望有更加轻量级的解决方案,因为我们基本上没有真正意义上流程的概念,只有静态的流程图,因为一直 ...

  6. 爬虫的基本操作 requests / BeautifulSoup 的使用

    爬虫的基本操作 爬虫基础知识 什么是爬虫? 在最开始,还没有诞生Google和百度等一系列搜索引擎的公司的时候,人们进入一些公司的网站只能通过在浏览器地址栏输入网址的方式访问,如同在很早之前前手机不流 ...

  7. Python3 Iterator and Generator

    Python3 Iterator and Generator iterator  主要是利用 iter 函数 >>> list=[1,2,3,4] >>> it = ...

  8. PHP 重置数组为连续数字索引的几种方式

    原文链接:https://blog.csdn.net/zhang197093/article/details/78606916 推荐的方式  array_values 方法 这样方式无论对普通数组还是 ...

  9. C# 监控代码执行效率

    System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); stop ...

  10. Restful framework【第四篇】视图组件

    基本使用 -view的封装过程有空可以看一下 -ViewSetMixin # ViewSetMixin 写在前面,先找ViewSetMixin的as_view方法 # 用了ViewSetMixin , ...