MyXls导出Excel的各种设置.docx
- 文档编号:6593588
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:19
- 大小:23.55KB
MyXls导出Excel的各种设置.docx
《MyXls导出Excel的各种设置.docx》由会员分享,可在线阅读,更多相关《MyXls导出Excel的各种设置.docx(19页珍藏版)》请在冰豆网上搜索。
MyXls导出Excel的各种设置
MyXls是一个操作Excel的开源类库,支持设置字体、列宽、行高(由珍惜眼前实现)、合并单元格、边框、背景颜色、数据类型、自动换行、对齐方式等,通过众多项目的使用表现,证明MyXls对于创建简单格式的Excel文件十分快捷方便。
//准备测试数据
List
for(inti=1;i<=200;i++)
{
PersonInfoperson=newPersonInfo()
{
RealName="张"+i,
Gender=(i%2==0?
"男":
"女"),
Age=20+(i%3)
};
list.Add(person);
}
intrecordCount=200;//要导出的记录总数
intmaxRecordCount=100;//每个sheet表的最大记录数
intsheetCount=1;//Sheet表的数目
XlsDocumentxls=newXlsDocument();
xls.="MyXls-"+DateTime.Now.ToString("yyyyMMddHHmmss")+".xls";
//计算需要多少个sheet表显示数据
if(recordCount>maxRecordCount)
{
sheetCount=(int)Math.Ceiling((decimal)recordCount/(decimal)maxRecordCount);
}
//Sheet标题样式
XFtitleXF=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/20point为单位的)
//列标题样式
XFcolumnTitleXF=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;//填充背景色
//数据单元格样式
XFdataXF=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/20point为单位的)
dataXF.UseProtection=false;//默认的就是受保护的,导出后需要启用编辑才可修改
dataXF.TextWrapRight=true;//自动换行
//遍历创建Sheet
for(inti=1;i<=sheetCount;i++)
{
//根据计算出来的Sheet数量,一个个创建
//行和列的设置需要添加到指定的Sheet中,且每个设置对象不能重用(因为可以设置起始和终止行或列,就没有太大必要重用了,这应是一个策略问题)
Worksheetsheet;
if(sheetCount==1)
{
sheet=xls.Workbook.Worksheets.Add("人员信息表");
}
else
{
sheet=xls.Workbook.Worksheets.Add("人员信息表-"+i);
}
//序号列设置
ColumnInfocol0=newColumnInfo(xls,sheet);//列对象
col0.ColumnIndexStart=0;//起始列为第1列,索引从0开始
col0.ColumnIndexEnd=0;//终止列为第1列,索引从0开始
col0.Width=8*256;//列的宽度计量单位为1/256字符宽
sheet.AddColumnInfo(col0);//把格式附加到sheet页上
//姓名列设置
ColumnInfocol1=newColumnInfo(xls,sheet);//列对象
col1.ColumnIndexStart=1;//起始列为第2列,索引从0开始
col1.ColumnIndexEnd=1;//终止列为第2列,索引从0开始
col1.Width=16*256;//列的宽度计量单位为1/256字符宽
sheet.AddColumnInfo(col1);//把格式附加到sheet页上
//性别列设置
ColumnInfocol2=newColumnInfo(xls,sheet);//列对象
col2.ColumnIndexStart=2;//起始列为第3列,索引从0开始
col2.ColumnIndexEnd=2;//终止列为第3列,索引从0开始
col2.Width=16*256;//列的宽度计量单位为1/256字符宽
sheet.AddColumnInfo(col2);//把格式附加到sheet页上
//年龄列设置
ColumnInfocol3=newColumnInfo(xls,sheet);//列对象
col3.ColumnIndexStart=3;//起始列为第4列,索引从0开始
col3.ColumnIndexEnd=3;//终止列为第4列,索引从0开始
col3.Width=16*256;//列的宽度计量单位为1/256字符宽
sheet.AddColumnInfo(col3);//把格式附加到sheet页上
//行设置
RowInforol1=newRowInfo();//行对象
rol1.RowHeight=16*20;//行高
rol1.RowIndexStart=3;//行设置起始列,索引从1开始
rol1.RowIndexEnd=(ushort)(maxRecordCount+2);//行设置结束列
sheet.AddRowInfo(rol1);//把设置附加到sheet页上
//合并单元格
//sheet.Cells.Merge(1,1,1,4);
MergeAreatitleArea=newMergeArea(1,1,1,4);//一个合并单元格实例(合并第1行、第1列到第1行、第4列)
sheet.AddMergeArea(titleArea);//填加合并单元格
//开始填充数据到单元格
Cellscells=sheet.Cells;
//Sheet标题行,行和列的索引都是从1开始的
Cellcell=cells.Add(1,1,"人员信息统计表",titleXF);
cells.Add(1,2,"",titleXF);//合并单元格后仍需要设置每一个单元格,样式才有效
cells.Add(1,3,"",titleXF);//合并单元格后仍需要设置每一个单元格,样式才有效
cells.Add(1,4,"",titleXF);//合并单元格后仍需要设置每一个单元格,样式才有效
sheet.Rows[1].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.Rows[2].RowHeight=18*20;//对指定的行设置行高
//行索引
introwIndex=3;
for(intj=0;j { //当前记录在数据集合中的索引 intk=(i-1)*maxRecordCount+j; //如果达到sheet最大记录数则跳出 if(k>=recordCount) { break; } //设置单元格的值 cells.Add(rowIndex,1,k+1,dataXF); cells.Add(rowIndex,2,list[k].RealName,dataXF); cells.Add(rowIndex,3,list[k].Gender,dataXF); //最右侧的列需要右边框,通过给Cell设置属性的方式实现,因为并不是所有的单元格都需要设置,不能通过修改样式dataXF的方式 CelllastCell=cells.Add(rowIndex,4,list[k].Age,dataXF); lastCell.RightLineStyle=1; lastCell.RightLineColor=Colors.Black; //行号递增 rowIndex++; } } //在浏览器中输出Excel文件 xls.Send(); 实现MyXLS设置行高的功能 MyXLS是一个导出Excel的好工具,速度快,体积小,而且也不用担心使用Com生成Excel时资源释放的问题了。 MyXLS已经实现了很多操作Excel的功能,但是作者好像2009年末就不再更新维护这个程序了,猜想可能是新版本office的文件格式操作起来更容易。 我这里管不了这么多啊,还得继续用。 作者在程序中注释说将要实现自定义行高的功能,但是一等就是两年,还不知道猴年马月。 还好程序是开源的,作者也给了提示,参考excel这个文档第196页,我把这个功能给实现了。 先看看效果如何: 要实现这个效果,首先需要修改两个文件: 1、Row.cs 添加行高的属性。 查看源代码 打印? privateushort_rowHeight; /// ///GetstherowindexofthisRowobject. /// publicushortRowHeight { get{return_rowHeight;} set{_rowHeight=value;} } 在构造函数中设置默认值: 查看源代码 打印? publicRow() { _minCellCol=0; _maxCellCol=0; _rowHeight=280; } 2、RowBlocks.cs 在生成字节时,将这个高度设置进去。 在privatestaticBytesROW(Rowrow)方法中,大约150行左右。 注释掉原来的: 查看源代码 打印? bytes.Append(newbyte[]{0x08,0x00}); 修改为: 查看源代码 打印? if(row.RowHeight>32767) { thrownewApplicationException("Rowheightcannotgreaterthan32767."); } else { bytes.Append(BitConverter.GetBytes(row.RowHeight)); } 注释掉: 查看源代码 打印? bytes.Append(newbyte[]{0x00,0x01,0x0F,0x00}); 替换为: 查看源代码 打印? //BitValue //7 1 //6 1 Rowheightanddefaultfontheightdonotmatch //5 0 //4 0 //2-00 bytes.Append(newbyte[]{0xC0,0x01,0x0F,0x00}); 这样保存修改,重新生成类库,重新添加到网站引用。 下边看看怎么用: 查看源代码 打印? /// ///导出Excel /// /// /// protectedvoidExportBtn_Click(objectsender,EventArgse) { XlsDocumentxls=newXlsDocument(); xls.="TestList.xls"; introwIndex=1; Worksheetsheet=xls.Workbook.Worksheets.Add("测试表");//Sheet名称 Cellscells=sheet.Cells; Cellcell=cells.Add(1,1,"编号"); cell.Font.Bold=true; cell=cells.Add(1,2,"名称"); cell.Font.Bold=true; sheet.Rows[1].RowHeight=18*20; foreach(DataRowrowintable.Rows) { cells.Add(rowIndex,1,rowIndex); cells.Add(rowIndex,2,"名称"+rowIndex); rowIndex++; } xls.Send(); } 在添加标题行cell之后,添加了一行: 查看源代码 打印? sheet.Rows[1].RowHeight=18*20; 这一行必须写在添加完cell之后,因为添加cell的时候才会自动创建一个Row对象,之前是没有这个对象的,当然不能设置高度。 这样就可以设置行高了,是不是很简单。 可是我还想让行高的设置方式更优雅一些,就像设置列的宽度一样,比如设置列: 查看源代码 打印? ColumnInfocol1=newColumnInfo(xls,sheet);//生成列格式对象 col1.ColumnIndexStart=0;//起始列为第1列 col1.ColumnIndexEnd=0;//终止列为第1列 col1.Width=8*256;//列的宽度计量单位为1/256字符宽 sheet.AddColumnInfo(col1);//把格式附加到sheet页上 这样就可以设置第一列的宽度,这段程序放在添加cell前后都没有任何问题,而且可以设置一个列的范围,不用一个个设置。 就仿造这个模式,创建一个RowInfo: 查看源代码 打印? usingSystem; usingSystem.Collections.Generic; usingSystem.Text; namespaceorg.in2bits.MyXls { /// ///Describesarangeofrowsandpropertiestosetonthoserows(columnheight,etc.). /// publicclassRowInfo { privateushort_rowHeight; privateushort_rowIdxStart=0; privateushort_rowIdxEnd=0; /// ///Getsorsetsheightoftherows. /// publicushortRowHeight { get{return_rowHeight;} set{_rowHeight=value;} } /// ///Getsorsetsindextofirstrowintherange. /// publicushortRowIndexStart { get{return_rowIdxStart;} set { _rowIdxStart=value; if(_rowIdxEnd<_rowIdxStart) _rowIdxEnd=_rowIdxStart; } } /// ///Getsorsetindextolastrowintherange. /// publicushortRowIndexEnd { get{return_rowIdxEnd;} set { _rowIdxEnd=value; if(_rowIdxStart>_rowIdxEnd) _rowIdxStart=_rowIdxEnd; } } } } 这个类有三个属性: 行高、起始行索引、结束行索引。 还需要一个方法附加到sheet页上。 在Worksheet类中添加一个私有变量: 查看源代码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MyXls 导出 Excel 各种 设置