这里的数据库是SQL Server,Excel 为2003版。
系统升级,从原来的asp改成asp.net,其他的都还好,下载报告这一项可发了不少时间。
公司前辈写的程序是asp,用ado写excel文件。我这人就是懒,被asp折磨死了,所以就直接忽视了,后来才知道这是个杯具,哎。
最开始的方法是用System.IO.StringWriter画table。下载的报告是没问题了,但是后续操作出现了故障:
比如,下载的excel叫a.xls。然后新建一个sheet,例如做一个透视表,然后保存。就出现了一个叫“a.file”的文件夹,里面的文件大概是一些样式表,htm。
如果想把a.xls保存在其他地方,以前可以直接对a.xls Ctrl+C,Ctrl+V就可以了,现在需要将两个文件同时进行操作。否则提示缺少文件。
所以,这个方法就pass了。
直接引用 .NET自带的COM组件,对我这里是不行的,服务器没有安装Office,⊙﹏⊙b汗
然后想到的是 用System.IO.StringWriter直接写\t,\r.这样又会出现问题,比如下载奖品,奖品描述里面的内容比较多,数据就折行了【如下图】,
红色线条其实为一条数据,很明显这个更加不行。
后来就在“下载demo,然后研究,然后再否定 ”的怪圈里面跑,是在是不行了,去codeproject下载了一个“ A Very Easy to Use Excel XML Import-Export Library ”,然后step by step,终于把我遇到的问题给解决了,到底是牛人呀。
// 然后导入命名空间
using Yogesh.ExcelXml;
// 利用静态方法创建一个ExcelXmlWorkbook对象
ExcelXmlWorkbook book = ExcelXmlWorkbook.DataSetToWorkbook(ds);
// 创建一个IO流,按作者说的IO流对象比简单的路径好处理错误,“So, the preferred way to import is to pass a Stream because it gives you more control with error management.”
st = System.IO.File.Create(Path);
// Export方法返回值是bool
book.Export(st, ExportFormat.Xml)
这个方法在本地测试通过,不知道传到没有按照Office的服务器上面会怎样?
未完待续--》》