使用.net导出Excel出了标准的 Excel控件,还有很多第三方控件。
下面介绍的一个就是功能同样强大的Aspose.cells控件
这个控件按说是收费的,不过还是有很多破解的版本,我用的就是csdn下来的,嘿嘿。
本来前边使用 Excel 11.0 object liberay 已经把所有功能完成,但两个问题不太满意。一个是导出速度太慢,没办法功能需要必须逐行逐cell写入,这个问题还能忍受,使用了单独的线程,并且加入了进度显示,好歹也能知道完成了多少。
但另外一个问题是很难绕过的,就是客户端的情况,本来在我这边很多个机器上都没有问题,但是在客户环境同样是office2003的所有机器上都无法执行,只有用我的安装介质重新安装一遍office2003才能解决问题(我认为这是个糟糕的解决办法,客户的环境最好不要奢望能够改动)。
你们只有使用不依赖于office的控件。
aspose.cells控件,很多方法和 Excel 11.0 object liberay 类似,但有操作上有些不大相同的地方
样式设置,这点感觉aspose用起来很不方便(但不知道这是不是它速度快的一个原因)
Excel 11.0 object liberay,支持在任何时候设置任何一个区域的样式,并且只要样式属性不重复,就不会被覆盖。
aspose就比较苛刻了,首先,它要求赋值必须在设置样式之前,否则如果先设置了样式,之后再给这个cell赋值,那么样式是不会生效的 :(
第二,后设置的样式区域,如果覆盖了前边的区域的某些部分,那么前边的所有样式都无效(这个实在太违背面向对象的特性了)
举例:
Dim topstyle As Aspose.Cells.Style = ac.Styles(ac.Styles.Add())
topstyle.Font.Size = 16
topstyle.Font.IsBold = True
topstyle.Font.Name = "宋体"
Dim toprange As Aspose.Cells.Range = wksheet.Cells.CreateRange(0, 0, 1, 1)
toprange.style = topstyle
上面这个片段是设置第一行,第一列的第一个单元格的字体等信息。
如果我接着
Dim Allstyle As Aspose.Cells.Style = ac.Styles(ac.Styles.Add())
Allstyle.Borders(Aspose.Cells.BorderType.BottomBorder).LineStyle = Aspose.Cells.CellBorderType.Thin
Dim Allrange As Aspose.Cells.Range = wksheet.Cells.CreateRange(0, 0, 10, 10)
Allrange.style = Alltyel
上面这个代码片段是设置前十行,十列这个范围所有cell的下边框属性。
本应当和前边的toptyle属性不冲突。
但如果这两个先后设置,那么结果就是之后后边的Allstyle生效,前边的topstyle因为range被包含在了后边allrange中,所以所有样式都被取消了。
基于以上原因,我们在设置样式的时候就不得不分开考虑,避免使用这样来回覆盖的模式。
也就是说每个区域我们都要单独定义一切属性,比如字体,边框,是否居中,行高,列宽等等。。。
但值得肯定的一点是aspose.cells控件导出的速度非常快,同样多的数据所用时间是Excel 11.0 object liberay的 1/5
前文连接: