MyXls导出Excel的各种设置.docx_第1页
MyXls导出Excel的各种设置.docx_第2页
MyXls导出Excel的各种设置.docx_第3页
MyXls导出Excel的各种设置.docx_第4页
MyXls导出Excel的各种设置.docx_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MyXls是一个操作Excel的开源类库,支持设置字体、列宽、行高(由珍惜眼前 实现)、合并单元格、边框、背景颜色、数据类型、自动换行、对齐方式等,通过众多项目的使用表现,证明MyXls对于创建简单格式的Excel文件十分快捷方便。/ 准备测试数据List list = new List();for (int i = 1; i maxRecordCount) sheetCount = (int)Math.Ceiling(decimal)recordCount / (decimal)maxRecordCount);/ Sheet标题样式XF titleXF = xls.NewXF(); / 为xls生成一个XF实例,XF是单元格格式对象titleXF.HorizontalAlignment = HorizontalAlignments.Centered; / 设定文字居中titleXF.VerticalAlignment = VerticalAlignments.Centered; / 垂直居中titleXF.UseBorder = true; / 使用边框 titleXF.TopLineStyle = 1; / 上边框样式titleXF.TopLineColor = Colors.Black; / 上边框颜色titleXF.LeftLineStyle = 1; / 左边框样式titleXF.LeftLineColor = Colors.Black; / 左边框颜色titleXF.RightLineStyle = 1; / 右边框样式titleXF.RightLineColor = Colors.Black; / 右边框颜色titleXF.Font.FontName = 宋体; / 字体titleXF.Font.Bold = true; / 是否加楚titleXF.Font.Height = 12 * 20; / 字大小(字体大小是以 1/20 point 为单位的)/ 列标题样式XF columnTitleXF = xls.NewXF(); / 为xls生成一个XF实例,XF是单元格格式对象columnTitleXF.HorizontalAlignment = HorizontalAlignments.Centered; / 设定文字居中columnTitleXF.VerticalAlignment = VerticalAlignments.Centered; / 垂直居中columnTitleXF.UseBorder = true; / 使用边框 columnTitleXF.TopLineStyle = 1; / 上边框样式columnTitleXF.TopLineColor = Colors.Black; / 上边框颜色columnTitleXF.BottomLineStyle = 1; / 下边框样式columnTitleXF.BottomLineColor = Colors.Black; / 下边框颜色columnTitleXF.LeftLineStyle = 1; / 左边框样式columnTitleXF.LeftLineColor = Colors.Black; / 左边框颜色columnTitleXF.Pattern = 1; / 单元格填充风格。如果设定为0,则是纯色填充(无色),1代表没有间隙的实色 columnTitleXF.PatternBackgroundColor = Colors.Red; / 填充的底色 columnTitleXF.PatternColor = Colors.Default2F; / 填充背景色/ 数据单元格样式XF dataXF = xls.NewXF(); / 为xls生成一个XF实例,XF是单元格格式对象dataXF.HorizontalAlignment = HorizontalAlignments.Centered; / 设定文字居中dataXF.VerticalAlignment = VerticalAlignments.Centered; / 垂直居中dataXF.UseBorder = true; / 使用边框 dataXF.LeftLineStyle = 1; / 左边框样式dataXF.LeftLineColor = Colors.Black; / 左边框颜色dataXF.BottomLineStyle = 1; / 下边框样式dataXF.BottomLineColor = Colors.Black; / 下边框颜色dataXF.Font.FontName = 宋体;dataXF.Font.Height = 9 * 20; / 设定字大小(字体大小是以 1/20 point 为单位的)dataXF.UseProtection = false; / 默认的就是受保护的,导出后需要启用编辑才可修改dataXF.TextWrapRight = true; / 自动换行/ 遍历创建Sheetfor (int i = 1; i = sheetCount; i+) / 根据计算出来的Sheet数量,一个个创建 / 行和列的设置需要添加到指定的Sheet中,且每个设置对象不能重用(因为可以设置起始和终止行或列,就没有太大必要重用了,这应是一个策略问题) Worksheet sheet; if (sheetCount = 1) sheet = xls.Workbook.Worksheets.Add(人员信息表); else sheet = xls.Workbook.Worksheets.Add(人员信息表 - + i); / 序号列设置 ColumnInfo col0 = new ColumnInfo(xls, sheet); / 列对象 col0.ColumnIndexStart = 0; / 起始列为第1列,索引从0开始 col0.ColumnIndexEnd = 0; / 终止列为第1列,索引从0开始 col0.Width = 8 * 256; / 列的宽度计量单位为 1/256 字符宽 sheet.AddColumnInfo(col0); / 把格式附加到sheet页上 / 姓名列设置 ColumnInfo col1 = new ColumnInfo(xls, sheet); / 列对象 col1.ColumnIndexStart = 1; / 起始列为第2列,索引从0开始 col1.ColumnIndexEnd = 1; / 终止列为第2列,索引从0开始 col1.Width = 16 * 256; / 列的宽度计量单位为 1/256 字符宽 sheet.AddColumnInfo(col1); / 把格式附加到sheet页上 / 性别列设置 ColumnInfo col2 = new ColumnInfo(xls, sheet); / 列对象 col2.ColumnIndexStart = 2; / 起始列为第3列,索引从0开始 col2.ColumnIndexEnd = 2; / 终止列为第3列,索引从0开始 col2.Width = 16 * 256; / 列的宽度计量单位为 1/256 字符宽 sheet.AddColumnInfo(col2); / 把格式附加到sheet页上 / 年龄列设置 ColumnInfo col3 = new ColumnInfo(xls, sheet); / 列对象 col3.ColumnIndexStart = 3; / 起始列为第4列,索引从0开始 col3.ColumnIndexEnd = 3; / 终止列为第4列,索引从0开始 col3.Width = 16 * 256; / 列的宽度计量单位为 1/256 字符宽 sheet.AddColumnInfo(col3); / 把格式附加到sheet页上 / 行设置 RowInfo rol1 = new RowInfo(); / 行对象 rol1.RowHeight = 16 * 20; / 行高 rol1.RowIndexStart = 3; / 行设置起始列,索引从1开始 rol1.RowIndexEnd = (ushort)(maxRecordCount + 2); /行设置结束列 sheet.AddRowInfo(rol1); / 把设置附加到sheet页上 / 合并单元格 /sheet.Cells.Merge(1, 1, 1, 4); MergeArea titleArea = new MergeArea(1, 1, 1, 4); / 一个合并单元格实例(合并第1行、第1列 到 第1行、第4列) sheet.AddMergeArea(titleArea); /填加合并单元格 / 开始填充数据到单元格 Cells cells = sheet.Cells; / Sheet标题行,行和列的索引都是从1开始的 Cell cell = cells.Add(1, 1, 人员信息统计表, titleXF); cells.Add(1, 2, , titleXF); / 合并单元格后仍需要设置每一个单元格,样式才有效 cells.Add(1, 3, , titleXF); / 合并单元格后仍需要设置每一个单元格,样式才有效 cells.Add(1, 4, , titleXF); / 合并单元格后仍需要设置每一个单元格,样式才有效 sheet.Rows1.RowHeight = 40 * 20; / 对指定的行设置行高 / 列标题行 cells.Add(2, 1, 序号, columnTitleXF); cells.Add(2, 2, 姓名, columnTitleXF); cells.Add(2, 3, 性别, columnTitleXF); / 最右侧的列需要右边框,通过修改样式columnTitleXF的方式,还可以通过设置单元格属性的方式实现。 columnTitleXF.RightLineStyle = 1; columnTitleXF.RightLineColor = Colors.Black; cells.Add(2, 4, 年龄, columnTitleXF); sheet.Rows2.RowHeight = 18 * 20; / 对指定的行设置行高 / 行索引 int rowIndex = 3; for (int j = 0; j = recordCount) break; / 设置单元格的值 cells.Add(rowIndex, 1, k + 1, dataXF); cells.Add(rowIndex, 2, listk.RealName, dataXF); cells.Add(rowIndex, 3, listk.Gender, dataXF); / 最右侧的列需要右边框,通过给Cell设置属性的方式实现,因为并不是所有的单元格都需要设置,不能通过修改样式dataXF的方式 Cell lastCell = cells.Add(rowIndex, 4, listk.Age, dataXF); lastCell.RightLineStyle = 1; lastCell.RightLineColor = Colors.Black; / 行号递增 rowIndex+; / 在浏览器中输出Excel文件xls.Send();实现MyXLS设置行高的功能MyXLS是一个导出Excel的好工具,速度快,体积小,而且也不用担心使用Com生成Excel时资源释放的问题了。MyXLS已经实现了很多操作Excel的功能,但是作者好像2009年末就不再更新维护这个程序了,猜想可能是新版本office的文件格式操作起来更容易。我这里管不了这么多啊,还得继续用。作者在程序中注释说将要实现自定义行高的功能,但是一等就是两年,还不知道猴年马月。还好程序是开源的,作者也给了提示,参考excelfileformat.pdf这个文档第196页,我把这个功能给实现了。先看看效果如何:要实现这个效果,首先需要修改两个文件:1、Row.cs添加行高的属性。查看源代码 打印?private ushort _rowHeight; / / Gets the row index of this Row object. / public ushort RowHeight get return _rowHeight; set _rowHeight = value; 在构造函数中设置默认值:查看源代码 打印?public Row() _minCellCol = 0; _maxCellCol = 0; _rowHeight = 280; 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.); else bytes.Append(BitConverter.GetBytes(row.RowHeight); 注释掉:查看源代码 打印?bytes.Append(new byte 0x00, 0x01, 0x0F, 0x00);替换为:查看源代码 打印?/Bit Value /7 1 /6 1 Row height and default font height do not match /5 0 /4 0 /2-0 0 bytes.Append(new byte 0xC0, 0x01, 0x0F, 0x00 );这样保存修改,重新生成类库,重新添加到网站引用。下边看看怎么用:查看源代码 打印?/ / 导出Excel / / / protected void ExportBtn_Click(object sender, EventArgs e) XlsDocument xls = new XlsDocument(); xls.FileName = TestList.xls; int rowIndex = 1; Worksheet sheet = xls.Workbook.Worksheets.Add(测试表);/Sheet名称 Cells cells = sheet.Cells; Cell cell = cells.Add(1, 1, 编号); cell.Font.Bold = true; cell = cells.Add(1, 2, 名称); cell.Font.Bold = true; sheet.Rows1.RowHeight = 18 * 20; foreach (DataRow row in table.Rows) cells.Add(rowIndex, 1, rowIndex); cells.Add(rowIndex, 2, 名称+rowIndex); rowIndex+; xls.Send(); 在添加标题行cell之后,添加了一行:查看源代码 打印?sheet.Rows1.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; using System.Collections.Generic; using System.Text; namespace org.in2bits.MyXls / / Describes a range of rows and properties to set on those rows (column height, etc.). / public class RowInfo private ushort _rowHeight; private ushort _rowIdxStart = 0; private ushort _rowIdxEnd = 0; / / Gets or sets height of the rows. / public ushort RowHeight get return _rowHeight; set _rowHeight = value; / / Gets or sets index to first row in the range. / public ushort RowIndexStart get return _rowIdxStart; set _rowIdxStart = value; if (_rowIdxEnd _rowIdxStart) _rowIdxEnd = _rowIdxStart; / / Gets or set index to last row in the range. / public ushort RowIndexEnd get return _rowIdxEnd; set _rowIdxEnd = value; if (_rowIdxStart _rowIdxEnd) _rowIdxStart = _rowIdxEnd; 这个类有三个属性:行高、起始行索

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论