MyXls导出Excel的各种设置Word文件下载.docx
- 文档编号:19607343
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:19
- 大小:23.55KB
MyXls导出Excel的各种设置Word文件下载.docx
《MyXls导出Excel的各种设置Word文件下载.docx》由会员分享,可在线阅读,更多相关《MyXls导出Excel的各种设置Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
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();
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();
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
=sheetCount;
//根据计算出来的Sheet数量,一个个创建
//行和列的设置需要添加到指定的Sheet中,且每个设置对象不能重用(因为可以设置起始和终止行或列,就没有太大必要重用了,这应是一个策略问题)
Worksheetsheet;
if(sheetCount==1)
sheet=xls.Workbook.Worksheets.Add("
人员信息表"
);
}
else
人员信息表-"
+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;
sheet.AddColumnInfo(col1);
//性别列设置
ColumnInfocol2=newColumnInfo(xls,sheet);
col2.ColumnIndexStart=2;
//起始列为第3列,索引从0开始
col2.ColumnIndexEnd=2;
//终止列为第3列,索引从0开始
col2.Width=16*256;
sheet.AddColumnInfo(col2);
//年龄列设置
ColumnInfocol3=newColumnInfo(xls,sheet);
col3.ColumnIndexStart=3;
//起始列为第4列,索引从0开始
col3.ColumnIndexEnd=3;
//终止列为第4列,索引从0开始
col3.Width=16*256;
sheet.AddColumnInfo(col3);
//行设置
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,"
"
//合并单元格后仍需要设置每一个单元格,样式才有效
cells.Add(1,3,"
cells.Add(1,4,"
sheet.Rows[1].RowHeight=40*20;
//对指定的行设置行高
//列标题行
cells.Add(2,1,"
序号"
columnTitleXF);
cells.Add(2,2,"
姓名"
cells.Add(2,3,"
性别"
//最右侧的列需要右边框,通过修改样式columnTitleXF的方式,还可以通过设置单元格属性的方式实现。
columnTitleXF.RightLineStyle=1;
columnTitleXF.RightLineColor=Colors.Black;
cells.Add(2,4,"
年龄"
sheet.Rows[2].RowHeight=18*20;
//行索引
introwIndex=3;
for(intj=0;
j<
maxRecordCount;
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;
///<
summary>
///GetstherowindexofthisRowobject.
/summary>
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
//2-00
bytes.Append(newbyte[]{0xC0,0x01,0x0F,0x00});
这样保存修改,重新生成类库,重新添加到网站引用。
下边看看怎么用:
///导出Excel
paramname="
sender"
>
<
/param>
e"
protectedvoidExportBtn_Click(objectsender,EventArgse)
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,"
名称"
sheet.Rows[1].RowHeight=18*20;
foreach(DataRowrowintable.Rows)
cells.Add(rowIndex,1,rowIndex);
cells.Add(rowIndex,2,"
+rowIndex);
rowIndex++;
在添加标题行cell之后,添加了一行:
这一行必须写在添加完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_rowIdxStart=0;
privateushort_rowIdxEnd=0;
///Getsorsetsheightoftherows.
///Getsorsetsindextofirstrowintherange.
publicushortRowIndexStart
get{return_rowIdxStart;
set
_rowIdxStart=value;
if(_rowIdxEnd<
_rowIdxStart)
_rowIdxEnd=_rowIdxStart;
///Getsorsetindextolastrowintherange.
publicushortRowIndexEnd
get{return_rowIdxEnd;
_rowIdxEnd=value;
if(_rowIdxStart>
_rowIdxEnd)
_rowIdxStart=_rowIdxEnd;
这个类有三个属性:
行高、起始行索引、结束行索引。
还需要一个方法附加到sheet页上。
在Worksheet类中添加一个私有变量:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MyXls 导出 Excel 各种 设置