波斯马BOSSMA Information Technology

实现MyXLS设置行高的功能

发布时间:2011年9月22日 / 分类:DOTNET / 16,380 次浏览 / 评论

MyXLS是一个导出Excel的好工具,速度快,体积小,而且也不用担心使用Com生成Excel时资源释放的问题了。MyXLS已经实现了很多操作Excel的功能,但是作者好像2009年末就不再更新维护这个程序了,猜想可能是新版本office的文件格式操作起来更容易。我这里管不了这么多啊,还得继续用。

作者在程序中注释说将要实现自定义行高的功能,但是一等就是两年,还不知道猴年马月。还好程序是开源的,作者也给了提示,参考excelfileformat.pdf这个文档第196页,我把这个功能给实现了。

先看看效果如何:

要实现这个效果,首先需要修改两个文件:

1、Row.cs

添加行高的属性。

在构造函数中设置默认值:

2、RowBlocks.cs

在生成字节时,将这个高度设置进去。

在private static Bytes ROW(Row row)方法中,大约150行左右。

注释掉原来的:

修改为:

注释掉:

替换为:

这样保存修改,重新生成类库,重新添加到网站引用。

下边看看怎么用:

在添加标题行cell之后,添加了一行:

这一行必须写在添加完cell之后,因为添加cell的时候才会自动创建一个Row对象,之前是没有这个对象的,当然不能设置高度。

这样就可以设置行高了,是不是很简单。

可是我还想让行高的设置方式更优雅一些,就像设置列的宽度一样,比如设置列:

这样就可以设置第一列的宽度,这段程序放在添加cell前后都没有任何问题,而且可以设置一个列的范围,不用一个个设置。

就仿造这个模式,创建一个RowInfo:

这个类有三个属性:行高、起始行索引、结束行索引。

还需要一个方法附加到sheet页上。

在Worksheet类中添加一个私有变量:

然后添加一个方法用于添加RowInfo到集合中:

下一步要在生成字节码之前设置相关行的高度,修改属性:internal Bytes Bytes,大约在252行左右:

在get中最前面遍历行设置行高,这里也许可以优化下效率,有兴趣的看看吧。

现在保存所有文件,重新编译,重新引用。

现在再来看看怎么设置行高:

从第3行到第10行,行高都是16。行高是以1/20 point为单位的。

现在有两种方法设置行高了,强大吧。

修改起来挺烦人,想直接使用的朋友点击这里下载就可以了。

欢迎测试!

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《实现MyXLS设置行高的功能

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

目前有15 条评论

  1. 橘子 9楼:

    还想问一下,楼主会用MyExcel这个插件把生成的Excel文档设置成横向打印的吗?还有页边距问题….

  2. 橘子 8楼:

    @bossma
    用源码我也没弄什么设置,行高就是自动撑开的…但是有个问题,合并了单元格后,就不能自动撑开行高了…

  3. 橘子 7楼:

    大哥,你修改源码后,行高不能自动了,本来行高是可以根据内容自动的! 本来的源码合并单元格才不能自动行高

    • 原来的行高需要先点击单元格才会自动行高吧?我这个设置了之后确实是不能自动了。

发表评论