MyXLS是一个导出Excel的好工具,速度快,体积小,而且也不用担心使用Com生成Excel时资源释放的问题了。但是作者提供的代码没有设置行高
要实现这个效果,首先需要修改两个文件:
1、Row.cs
添加行高的属性。
private ushort _rowHeight; |
/// Gets the row index of this Row object. |
get { return _rowHeight; } |
set { _rowHeight = value; } |
在构造函数中设置默认值:
2、RowBlocks.cs
在生成字节时,将这个高度设置进去。
在private static Bytes ROW(Row row)方法中,大约150行左右。
注释掉原来的:
bytes.Append( new byte [] { 0x08, 0x00 }); |
修改为:
if (row.RowHeight > 32767) |
throw new ApplicationException( "Row height can not greater than 32767." ); |
bytes.Append(BitConverter.GetBytes(row.RowHeight)); |
注释掉:
bytes.Append( new byte [] {0x00, 0x01, 0x0F, 0x00}); |
替换为:
//6 1 Row height and default font height do not match |
bytes.Append( new byte [] { 0xC0, 0x01, 0x0F, 0x00 }); |
这样保存修改,重新生成类库,重新添加到网站引用。
下边看看怎么用:
/// <param name="sender"></param> |
/// <param name="e"></param> |
protected void ExportBtn_Click( object sender, EventArgs e) |
XlsDocument xls = new XlsDocument(); |
xls.FileName = "TestList.xls" ; |
Worksheet sheet = xls.Workbook.Worksheets.Add( "测试表" ); //Sheet名称 |
Cells cells = sheet.Cells; |
Cell cell = cells.Add(1, 1, "编号" ); |
cell = cells.Add(1, 2, "名称" ); |
sheet.Rows[1].RowHeight = 18 * 20; |
foreach (DataRow row in table.Rows) |
cells.Add(rowIndex, 1, rowIndex); |
cells.Add(rowIndex, 2, "名称" +rowIndex); |
在添加标题行cell之后,添加了一行:
sheet.Rows[1].RowHeight = 18 * 20; |
这一行必须写在添加完cell之后,因为添加cell的时候才会自动创建一个Row对象,之前是没有这个对象的,当然不能设置高度。
这样就可以设置行高了,是不是很简单。
可是我还想让行高的设置方式更优雅一些,就像设置列的宽度一样,比如设置列:
ColumnInfo col1 = new ColumnInfo(xls, sheet); //生成列格式对象 |
col1.ColumnIndexStart = 0; //起始列为第1列 |
col1.ColumnIndexEnd = 0; //终止列为第1列 |
col1.Width = 8 * 256; //列的宽度计量单位为 1/256 字符宽 |
sheet.AddColumnInfo(col1); //把格式附加到sheet页上 |
这样就可以设置第一列的宽度,这段程序放在添加cell前后都没有任何问题,而且可以设置一个列的范围,不用一个个设置。
就仿造这个模式,创建一个RowInfo:
using System.Collections.Generic; |
namespace org.in2bits.MyXls |
/// Describes a range of rows and properties to set on those rows (column height, etc.). |
private ushort _rowHeight; |
private ushort _rowIdxStart = 0; |
private ushort _rowIdxEnd = 0; |
/// Gets or sets height of the rows. |
get { return _rowHeight; } |
set { _rowHeight = value; } |
/// Gets or sets index to first row in the range. |
public ushort RowIndexStart |
get { return _rowIdxStart; } |
if (_rowIdxEnd < _rowIdxStart) |
_rowIdxEnd = _rowIdxStart; |
/// Gets or set index to last row in the range. |
public ushort RowIndexEnd |
get { return _rowIdxEnd; } |
if (_rowIdxStart > _rowIdxEnd) |
_rowIdxStart = _rowIdxEnd; |
这个类有三个属性:行高、起始行索引、结束行索引。
还需要一个方法附加到sheet页上。
在Worksheet类中添加一个私有变量:
private readonly List<RowInfo> _rowInfos = new List<RowInfo>(); |
然后添加一个方法用于添加RowInfo到集合中:
/// Adds a Row Info record to this Worksheet. |
/// <param name="rowInfo">The RowInfo object to add to this Worksheet.</param> |
public void AddRowInfo(RowInfo rowInfo) |
下一步要在生成字节码之前设置相关行的高度,修改属性:internal Bytes Bytes,大约在252行左右:
int rowsCount = Rows.Count; |
for ( ushort i = 1; i <= Rows.Count; i++) |
foreach (RowInfo rowInfo in _rowInfos) |
if (rowInfo.RowIndexStart <= i && rowInfo.RowIndexEnd >= i) |
Rows[i].RowHeight = rowInfo.RowHeight; |
在get中最前面遍历行设置行高,这里也许可以优化下效率,有兴趣的看看吧。
现在保存所有文件,重新编译,重新引用。
现在再来看看怎么设置行高:
RowInfo rol1 = new RowInfo(); |
rol1.RowHeight = 16 * 20; |
从第3行到第10行,行高都是16。行高是以1/20 point为单位的。
现在有两种方法设置行高了,强大吧。
我把编译好的DLL提供下载,原版本是.net2.0的框架,我改成了.net4.0框架
点击这里:下载
- DataGridView设置行高
.Net中DataGridView控件如何设置行高 在DataGridView控件中,默认的行高很大,而标题头的行高却很小,感觉很不匀称. 标题头的行高比较好设置需要修改两个属性1修改ColumnHe ...
- 闲记 单元格与单元格之间的边 ///字体属性都是font开头,除了颜色属性 ///文本属性都是text开的,除了设置行高。
这两天一直在做网页没有什么太大的问题,期间也考了一场试,对答案的时候老师讲了一些小知识,因此来记录一下. 单元格与单元格之间的边距(cellspaling) list-type-image可以使用图像 ...
- angularjs ui-grid如何动态设置行高
自己开发的公众号,可以领取淘宝内部优惠券 在用ui-grid的时候我们可以用rowHeight设置行高,可是每一行的高度都是一样的,无法根据行内的内容进行自适应.如下图 为了解决这个问题,google ...
- 给GridView设置行高
近期在工作中遇到了这样一个问题,使用一个GridView展示数据,item中仅仅是一个TextView,可是里面显示的文字多少不固定多少,必须所有展示出来. 遇到的问题: 1.把item中的宽和高设置 ...
- 如何给HTML页面设置行高
设置行高 由于简单还是老样子直接上代码了哦,注意:line-height属性值可以使用固定值如:20px..和百分比如:20%. 如果想让文字垂直居中如下:行高的主要作用是用来设置文本的垂直方向居中对 ...
- Nopi 导出设置行高
1.导出excel行显示不完整数据客户不满意,需要我们处理 ; rowNum <= sheet.LastRowNum; rowNum++) { HSSFRow currentRow = shee ...
- 实现jsp网页设为首页功能
var url = location.href; var browser_name = navigator.userAgent; if(browser_name.indexOf('Chrome')!= ...
- 在safari下input的placeholder设置行高失效
在项目中遇到input的placeholder在safari下设置行高失效的问题,亲测 input{ width:250px; height:30px; line-height:30px; font- ...
- 20190316xlVba_设置行高的改进方案
Public Sub AutoSetRowHeight(ByVal sht As Worksheet, Optional RowsInOnePage As Long) Dim BreakRow As ...
随机推荐
- CAIN怎么嗅探路由密码
Cain & Abel 是由Oxid.it开发的一个针对Microsoft操作系统的免费口令恢复工具.号称穷人使用的L0phtcrack.它的功能十分强大,可以网络嗅探,网络欺骗,破解加密口令 ...
- DBCP连接池配置示例
<bean id="dataSourceOracle2" class="org.apache.commons.dbcp.BasicDataSource" ...
- Moving Average from Data Stream
Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...
- raspbian调整键盘设置
参考 http://www.jianshu.com/p/8c474339a238 树莓派(raspberry pi)是英国产品,默认键盘布局是英国(GB),我们用的键盘布局一般是美国(US)的(104 ...
- 重建索引提高SQL Server性能
大多数SQL Server表需要索引来提高数据的访问速度,如果没有索引,SQL Server 要进行表格扫描读取表中的每一个记录才能找到索要的数据.索引可以分为簇索引和非簇索引,簇索引通过重排表中的数 ...
- Oracle10g 表分区
1.分区的原因 (1)Tables greater than 2GB should always be considered for partitioning. (2)Tables containin ...
- sublime一些快捷键
语法: 后代:> 缩写:nav>ul>li <nav> <ul> <li></li> </ul> </nav> ...
- EF jsonignore
页面单独指定不循环引用 [JsonIgnore] Newtonsoft.Json.JsonSerializerSettings jsSettings = new Newtonsoft.Json.Jso ...
- WEB 用户指南 -- WEB 系统结构文档
本文描述了如何使用 WEB语言 编程.同时还包含了 WEAVE 和 TANGLE 程序的说明文档. WEB 程序 可以读取 WEB 文件,然后输出 TeX 文档 和 Pascal 程序. 使用 WEB ...
- 记录NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END。
Nonnull区域设置(Audited Regions) 如果需要每个属性或每个方法都去指定nonnull和nullable,是一件非常繁琐的事.苹果为了减轻我们的工作量,专门提供了两个宏:NS_AS ...