Myxls导出excel报表

     最近项目中有一个导出excel报表的需求。大体就是将一个datatable中的数据导出到excel供用户下载。开始也想过几种方法:

1.因为报表已经在页面上展现出来了,所以想能不能使用js直接将页面的table给保存到excel中,如果真能实现那还真讨巧了。但是查了一下使用js好像都必须用到activex组件,也就限制了只能在IE下使用。否决。

2.为了兼容大多数的浏览器貌似只能将生成工作放在服务器端了。两个问题。一,如何生成。二,生成了以后如何给用户。

对于第一个问题,我刚开始想直接写字符串,中间使用\t分隔。虽然这样也能生成“伪excel”(暂时这么叫吧)不过效果却不好。不能控制单元格的样式以及合并。也有一种方法是使用微软的office组件,不过这要求你在服务器上安装了office,而且据说使用这种方法在进程释放方面有问题。

对于第二个问题,有人是直接在服务器端生成后将连接发送给用户给用户下载。有人是直接给response设置头信息,让浏览器直接返回下载。显然第二种方法要好得多。

总之想要既简单又很好的到处excel也不是那么简单的一回事。不过嘛……有了myxls以后,一切就变得美好又简单了。

Myxls

      MyXls是用C#开源项目,可以应用于asp.net 或者 .net应用程序上。它根据微软公开的Excle文档格式文件(BIFF),以二进制格式直接生成excel文档,支持Excel versions 97 - 2007。目前MyXls已经实现了单元格(cell)的格式设置,包括文本颜色、文本大小、字体、单位格边框、底色、列宽、行高,合并单元格,多个sheet页等功能。

      你可以在这里找到myxls项目:http://sourceforge.net/projects/myxls/

      需要注意的是,如果你想在asp.net中使用myxls,那么上面链接中的download并不适合你,因为那是针对silverlight的。你可以到这里下载asp.net版本的http://sourceforge.net/projects/myxls/files/MyXls/v0.6.3/

     说完了介绍,我们再来说说如何使用。我做了一个demo,希望可以帮助你更加直观的了解如何使用myxls。下面一段代码是demo中将datatable输出为为excel的方法:

        private XlsDocument DataTableExportToExcel(DataTable dataTable, string excelName, string sheetName)
        {
            XlsDocument xls = new XlsDocument();    //新建一个xls文档 
            xls.FileName = excelName + ".xls";   //设定Excel文件名 

            Worksheet sheet = xls.Workbook.Worksheets.Add(sheetName);//填加名为"第一个Sheet Demo"的sheet页 
            Cells cells = sheet.Cells;//Cells实例是sheet页中单元格(cell)集合 

            for (int row = 0; row < dataTable.Rows.Count; row++)
            {
                for (int column = 0; column < dataTable.Columns.Count; column++)
                {
                    object val = dataTable.Rows[row][column];

                    //对于数字,需要将其转化为数字类型。否则将默认以字符串类型输出到excel中
                    double doubleVal;
                    if (double.TryParse(val.ToString(), out doubleVal))
                    {
                        cells.Add(row + 1, column + 1, doubleVal);
                    }
                    else
                    {
                        cells.Add(row + 1, column + 1, val.ToString());
                    }
                }
            }

            return xls;
        }

对于返回的xls变量,只需要使用

xls.Send();

就可以将excel流返回到客户端,此时浏览器会自动弹出excel下载窗口供用户下载了。输出的截图如下:

image

Demo下载

       http://dl.dbank.com/c0b5au1uuz

原文地址:https://www.cnblogs.com/qianlifeng/p/2147873.html