在ASP.NET MVC中利用Aspose.cells 将查询出的数据导出为excel,并在浏览器中下载。

正题前的唠叨

本人是才出来工作不久的小白菜一颗,技术很一般,总是会有遇到一些很简单的问题却不知道怎么做,这些问题可能是之前解决过的。发现这个问题,想着提升一下自己的技术水平,将一些学的新的‘好’东西记录下来,一是加深印象;二是以后可以作为参考;三是希望博友们可以提出不足和可以优化的地方,一起讨论。

这个是我去一家公司没多久,让我做的小功能,主要是导出excel并在浏览器下载下来。 但是会有不同的细微的需求差别。

第一次发博客,有描述不清楚的地方还请见谅,希望各位多多指点。

进入正题

简单的需求描述

将查询出来已经转化好了的list<T> xxx 的数据的某些列,导入到excel之中,并在浏览器中下载下来。(这里用Student代替)

开始实现

1.student表的列如下图所示

2.使用的dll :Aspose.Cells.dll  (5.3.1.0)。

3.部分实现代码:

样式及表头

        Workbook workbook = new Workbook();
            Worksheet worksheet = workbook.Worksheets[0];
            Cells cells = worksheet.Cells;
            cells.InsertRow(0);
            Aspose.Cells.Style style = workbook.Styles[workbook.Styles.Add()];//新增样式
            style.HorizontalAlignment = TextAlignmentType.Center;//文字居中
            style.Font.Size = 11;//文字大小
            style.Font.IsBold = true;//粗体
            cells.SetRowHeight(0, 20);              //设置行高 

List<string> listHead = new List<string>();
            listHead.Add("学生编号");
            listHead.Add("学生姓名");
            listHead.Add("学生年龄");
            listHead.Add("电话");
            for (int i = 0; i < listHead.Count; i++)
            {
                cells[0, i].PutValue(listHead[i]);
                cells[0, i].SetStyle(style);
                cells.SetColumnWidth(i, 30);
            }

写入内容部分

      for (int i = 1; i <= list1.Count; i++)
           {
                cells[i, 0].PutValue(list1[i-1].Id);
                cells[i, 1].PutValue(list1[i-1].Name);
                cells[i, 2].PutValue(list1[i-1].Age);
                cells[i, 3].PutValue(list1[i-1].Tel);
            }

最开始用的是这种笨重的方法来写入内容,但是这样子会遍历很多次,如果数据量大会十分的慢,所一找了一下文档,发现一个简单的方法

写入内容部分优化

 worksheet.Cells.ImportCustomObjects(list, new string[] {"Id","Name","Age","Tel"}, false, 1, 0, list.Count, true, "", false);

跟进去看各个参数

public int ImportCustomObjects(ICollection list, string[] propertyNames, bool isPropertyNameShown, int firstRow, int firstColumn, int rowNumber, bool insertRows, string dateFormatString, bool convertStringToNumber)

看参数名称应该比较清楚了。分别是需要导入的list,要写入的列,是否将属性名称显示出来,写入excel的开始行,开始列.....

这样就比较简洁明了,效率也比之前快许多

保存excel

workbook.Save(System.Web.HttpContext.Current.Response, "学生信息.xls", ContentDisposition.Attachment, new XlsSaveOptions(SaveFormat.Xlsx));

也解释不清楚这里,大概意思就是把写入的excel信息,Respose给前台。

前台的调用

 <script>
        $(function() {
            $(".export_excel").click(function() {
                downExcel(‘/aspose/exportexcel‘);
            });
        });
        function downExcel(iframeUrl) {
            if (!iframeUrl) {
                return;
            }
            var body = document.getElementsByTagName("body")[0];
            var downloadIframe = document.createElement("iframe");
            downloadIframe.setAttribute("src", iframeUrl);
            downloadIframe.setAttribute("style", "display:none;")
            body.appendChild(downloadIframe);
        }

    </script>

 这里就是用ifram打开。也可以直接用windows.open(‘url’);来实现

 $(function() {
            $(".export_excel").click(function() {
                window.open(‘/aspose/exportexcel‘);
            });
        });

最后excel效果  

结语

效果基本达到需求,后面需求会变更,这种方式就不能完全满足需求,由于今时间太晚了,下次再来写,谢谢大家,请多指教,大家晚安!

  

时间: 2024-11-11 09:33:42

在ASP.NET MVC中利用Aspose.cells 将查询出的数据导出为excel,并在浏览器中下载。的相关文章

asp.net 查询到的数据导出为excel格式

DataTable pDataTable = newBLL.PRODUCT().GetModel(1862); inttRowCount = pDataTable.Rows.Count; inttColumnCount = pDataTable.Columns.Count; Response.Expires = 0; Response.Clear(); Response.Buffer = true; Response.Charset = "utf-8"; Response.Conten

利用pandas将mysql查询出得结果写入到excel文件

#!/usr/bin/env python3 import pandas as pd import pymysql #返回SQL结果的函数 def getrel(sql): conn =  pymysql.connect(host='localhost',user='root',password='123456',db='test') cur = conn.cursor() cur.execute('set names utf8') cur.execute('select app,name  f

利用Aspose.Cells完成easyUI中DataGrid数据的Excel导出功能

我准备在项目中实现该功能之前,google发现大部分代码都是利用一般处理程序 HttpHandler实现的服务器端数据的Excel导出,但是这样存在的问题是ashx读取的数据一般都是数据库中视图的数据,难免会含有方便操作的 主键ID这列的记录.现在项目需要在easyUI的DataGrid中显示的数据能全部导出Excel,包括DataGrid中的中文标题,其他的统统不 要. 完成该功能所需的工具和环境:Newtonsoft.Json序列化和反序列化类库.easyUI前端UI框架.HttpHandl

Asp.Net中应用Aspose.Cells输出报表到Excel 及样式设置

解决思路: 1.找个可用的Aspose.Cells(有钱还是买个正版吧,谁开发个东西也不容易): 2.在.Net方案中引用此Cells: 3.写个函数ToExcel(传递一个DataTable),可以另写个SetCellStyle的函数专门给各列设置样式. 4.在按钮的Click事件中调用此ToExcel()即可. 注:想更详细了解的到Aspose网站去,那里有很多在线文档,够你看的了.也可以下载个Demo程序研究. 部分代码贴在这里,代码还有需要改进的地方,暂时这么用着,给自己以后方便查找,再

将数据库的数据导出到excel中

这篇文章主要介绍了asp中把数据导出为excel的2种方法:分别用excel组件.文件组件实现,需要的朋友可以参考下.我们在做项目的时候经常要将数据库的数据导出到excel中,很多asp用户并不知道怎么写.这里总结了两种方法来导出excel,希望能帮到大家. 方法一:用excel组件 方法二:使用文件组件 可以看出,第一种方法是直接导出的是excel文件,而第二张方法是到处的是文本文件,只不过后缀名改成了xls. 然后看起来就是excel了. 经过对比第一种方法的效率没有第二种方法的效率高,而且

asp.net 将repeater上数据导出到excel

1,首先得到一个DataTable public DataTable GetTable(string sql) { SqlConnnection con=new SqlConnection(ConfigurationManager.ConnectionStrings["connectionstringname"].ConnectionString); con.Open(); SqlCommand cmd = new SqlCommand(sql, con); SqlDataAdapte

机房收费系统之vb中的MSFlexGrid控件中的数据导出为Excel的步骤

MSFlexGrid控件中的数据导出为Excel表格的方法有很多,我觉得它们都大同小异,总起来说就是vb先调用Excel,然后再将数据导入进去.在数据导出的过程中,我的收获如下,下面是我把MSFlexGrid控件的数据导出到Excel中的步骤. 1 首先确保 在工程中引用Microsoft Excel 14.0 Object Library   和  Microsoft ActiveX Data Objects 2.6 Libray 代码部分, <span style="font-size

Qt中将QTableView中的数据导出为Excel文件

如果你在做一个报表类的程序,可能将内容导出为Excel文件是一项必须的功能.之前使用MFC的时候我就写过一个类,用于将grid中的数据导出为Excel文件.在使用了QtSql模块后,我很容易的将这个类改写应用在Qt程序中.类的名字叫“ExportExcelObject”.使用起来很简单: [cpp] view plaincopy // 1. declare an object // – fileName Excel 文件路径 // – sheetName Excel 工作表(sheet)名称 /

使用原生php将数据库数据导出到excel文件中

最近在工作中遇到一个需求,需要将数据库中的数据导出到excel文件中,并下载excel文件.因为以前没做过,所以就百度了一下, 网上说的大多是使用PHPExcel类来操作excel文件,这还要去下载这个类才能使用,而我只想使用原生的php,不想那么麻烦,好在 也有网友说到关于原生php生成excel文件的方法,其实很简单,下面把我结合网上资料自己实践的代码分享一下. 一般我们这种导数据的操作都是通过用户在网页页面上点击某个按钮触发相应js方法,然后请求php接口来实现的,所以主要有两种 方法来完