博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过模板将GridView导出为Excel
阅读量:4071 次
发布时间:2019-05-25

本文共 3234 字,大约阅读时间需要 10 分钟。

在网页中做复杂报表都是一件很痛苦的事情,如果做好之后又要打印成和excel模板中一模一样的格式那就更痛苦了,调试工作量那叫一个强。

最近也在做一个这样的项目,为了规避打印的问题,我想是不是可以通过他们已经现有的excel模板进行数据导出,这样,一方面我们可以规避数据打印调试,二可以延续客户原有的操作,三还可以作为存档进行备份。

 

在开发过程中发现,由于网页已经能够正确显示数据了,所以这里面的数据已经和excel中的数据一致了,所以,将gridview对应的datatable直接导出到excel中无疑是一个好办法。但是仔细想有另外一个问题,因为gridview显示的时候对数据有可能进行了一定处理(如%),而且还有可能提取出来的datatable数据为了有通用性,数据字段的个数和顺序与最终显示都不一样。

 

基于以上问题,我想,可以这样做,首先将gridview 转化为 datatable,然后讲datatable写到对应的excel模板中,最后将其返回给客户端浏览器。

 

具体做法:

 

1、将gridview转化为datatable,代码请参考:

 

2、将datatable保存到excel中去,为了使模板与数据一致,需要有针对性的设置一些参数,这里有一些是与业务相关的,大家仅参考吧,具体方法如下:

public static Boolean Report2Excel(System.Data.DataTable dtReport, String fullTemplateFilePath, String fullOutputFilePath,

        int sheetNum,

        String nianyue, int nianyueRow, int nianyueColumn, 

        int dtStartColumn, int dtEndColumn,

        int excelStartColumn, int excelStartRow)

    {

        //如果Datatable为空或没有数据,那么直接返回

        if (dtReport == null || dtReport.Rows.Count == 0)

        {

            return false;

        }

        Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();

        try

        {

            app.Visible = false;

            //Workbook wBook = app.Workbooks.Open(fullTemplateFilePath);

            //Workbook wBook = app.Workbooks.Add(true);

            Workbook wBook = app.Workbooks.Add(fullTemplateFilePath);

            Worksheet wSheet = wBook.Worksheets[sheetNum] as Worksheet;

            //写入年月

            wSheet.Cells[nianyueRow, nianyueColumn] = nianyue;

 

            //写入数据

            int rowcount = dtReport.Rows.Count;

            for (int i = 0; i < rowcount; i++)

            {

                for (int j = 0; j < dtEndColumn - dtStartColumn + 1; j++)

                {

                    wSheet.Cells[excelStartRow + i, excelStartColumn + j] = dtReport.Rows[i][dtStartColumn + j];

                }

            }

 

            //设置禁止弹出保存和覆盖的询问提示框

            app.DisplayAlerts = false;

            app.AlertBeforeOverwriting = false;

            //保存工作簿

            wBook.Save();

            //保存excel文件

            app.Save(fullOutputFilePath);

            app.SaveWorkspace(fullOutputFilePath);

            app.Quit();

 

            System.Runtime.InteropServices.Marshal.ReleaseComObject(wSheet);

            System.Runtime.InteropServices.Marshal.ReleaseComObject(wBook);

            System.Runtime.InteropServices.Marshal.ReleaseComObject(app);

 

            wSheet = null;

            wBook = null;

            app = null;

 

            GC.Collect();

        }

        catch (Exception ex)

        {

            throw ex;

        }

        return true;

    }

 

3、将生成的excel文件返回给客户端。具体代码如下:

public static void ExportByTemplate(DataTable dtReport, String templateFilePath, String outputFilePath,

        int sheetNum,

        String nianyue, int nianyueRow, int nianyueColumn,

        int dtStartColumn, int dtEndColumn,

        int excelStartColumn, int excelStartRow)

    {

        string fullTemplateFilePath = System.Web.HttpContext.Current.Server.MapPath("~/Resource/ReportTemplate/") + templateFilePath;

        string fullOutputFilePath = System.Web.HttpContext.Current.Server.MapPath("~/UploadFiles/TempReport/") + outputFilePath;

 

        ExcelHlper.Report2Excel(dtReport, fullTemplateFilePath, fullOutputFilePath, sheetNum, nianyue, nianyueRow, nianyueColumn, dtStartColumn, dtEndColumn, excelStartColumn, excelStartRow);

 

        HttpContext.Current.Response.ContentType = "application/application/ms-excel";

        HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;

        HttpContext.Current.Response.AddHeader(

            "content-disposition", string.Format("attachment; filename={0}", System.Web.HttpUtility.UrlEncode(outputFilePath, System.Text.Encoding.UTF8)));

        HttpContext.Current.Response.ContentType = "application/ms-excel";

 

        HttpContext.Current.Response.TransmitFile(fullOutputFilePath);

 

    }

 

至此,通过模板导出excel完成。

 

转载地址:http://dkwni.baihongyu.com/

你可能感兴趣的文章
Flash中实现语音变声(下)
查看>>
StageVideo API
查看>>
[转]三维成像原理
查看>>
Flex Custom Component LifeCycle
查看>>
获取.fla所有导出类名称列表的方法
查看>>
关于FLASH 3D游戏的想法,做一个双人合作射击的游戏,
查看>>
PNG图片优化技术(一)
查看>>
photoshop 优化 PNG 图片尺寸大小 终极秘技!
查看>>
mmo游戏开发应在profile下运行,才能保证正式运行不卡
查看>>
关于Flash CS3创建Sprite类型的问题
查看>>
AS3通俗教程---AS3自身loading制作
查看>>
0 bytes after compression出现的情况
查看>>
内存回收专题
查看>>
[资料] 史上最强的伯克利大学1024线飞龙AI下载地址,有没有人有兴趣来测试一手?...
查看>>
Discuz多人斗地主积分版,消耗论坛积分的斗地主
查看>>
discuz X2斗地主积分版插件安装方法(用户版)
查看>>
ASP.NET程序也能像WinForm程序一样运行
查看>>
听到两个程序员聊天——A:“借我1K块。”
查看>>
轻松搭建一个Windows SVN服务器
查看>>
Discuz X2多人斗地主[消耗论坛积分]小体积版本,仅25MB!
查看>>