PageOffice动态填充Excel文档

PageOffice封装了一组用于动态输出数据到Excel文档的相关类,全部包含在PageOffice.ExcelWriter 命名空间之中。PageOffice对Excel的赋值操作分两种方式:

  1. 单元格赋值。这个很好理解, sheet.OpenCell("D5"),返回值就是一个Cell对象;

  2. 针对一个区域赋值。这个区域在PageOffice的概念里就是Table对象,比如:sheet.OpenTable("C9:H15")的返回值就是就是Table对象,这个Table就是”C9:H15”这个区域。下面就针对这两种操作方式来分别介绍。

一、给Excel单元格赋值


JAVA代码:

	Workbook wb = new Workbook();
	Sheet sheet = wb.openSheet("销售订单");
	sheet.openCell("D5").setValue(“北京某某公司”);
    
	PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);
	poCtrl1.setServerPage("poserver.do"); 
	poCtrl1.setWriter(wb); //注意,不要忘记此句代码
	poCtrl1.webOpen("{模板文件路径}", OpenModeType.xlsSubmitForm, "");

ASP.NET代码:

	PageOffice.ExcelWriter.Workbook workBook = new PageOffice.ExcelWriter.Workbook();
	PageOffice.ExcelWriter.Sheet sheet = workBook.OpenSheet("销售订单");
	sheet.OpenCell("D5").Value = ”北京某某公司”;
    
	PageOfficeCtrl1.SetWriter(workBook); //注意,不要忘记此句代码
	PageOfficeCtrl1.ServerPage = "pageoffice/server.aspx";
	PageOfficeCtrl1.WebOpen("{模板文件路径}", PageOffice.OpenModeType.xlsSubmitForm, "John");

通过上面的代码可以看出,给Excel单元格赋值,首先需要创建Workbook对象,然后通过此对象的OpenSheet方法,获取到Sheet对象,再通过Sheet对象的OpenCell方法就可以获取的Cell对象,进行赋值或其他操作。
Sheet对象有两个方法可以获取到Cell对象:

  • OpenCell(string CellAddress),参数为单元格引用字符串。例如:"A1";
  • OpenCellRC(int Row,int Col),参数为excel单元格的行数和列数。所以上面给Excel单元格赋值的代码改成下面的代码也是可以的。

JAVA代码:

sheet.openCellRC(5,4).setValue("北京某某公司");

ASP.NET代码:

sheet.OpenCellRC(5,4).Value = "北京某某公司";

设置Cell的样式

PageOffice中的Cell对象有很多个设置单元格样式的属性和对象,如下表所示:

名称说明
BackColor设置单元格的背景色。
Border获取边框对象。
Font获取字体字体。
ForeColor设置单元格的前景色。
Formula设置单元格的公式。
HorizontalAlignment设置单元格的水平对齐方式。
NumberFormatLocal设置单元格的数据显示格式。
Value设置单元格的值。
VerticalAlignment设置单元格的垂直对齐方式。
  • 设置单元格的背景色

JAVA代码:

Workbook wb = new Workbook();
wb.openSheet("Sheet1").openCell("E16").setBackColor(new Color(0, 128, 128));

ASP.NET代码:

PageOffice.ExcelWriter.Workbook workBook = new PageOffice.ExcelWriter.Workbook();
wb.OpenSheet("Sheet1").OpenCell("E16").BackColor = Color.FromArgb(0, 128, 128);
  • 设置单元格的字体,就需要操作Font对象进行设置。Font对象的属性:
名称说明
Bold设置字体是否加粗。
Italic设置字体是否为斜体。
Name设置字体名称。
Size设置字体大小。以磅为单位。
  • 设置单元格的边框样式,就需要操作Border对象进行设置。Border对象的属性:
名称说明
BorderType设置边框的类型。
LineColor设置边框的颜色。
LineStyle设置边框的线条样式。
Weight设置边框的粗细。

使用Border对象设置Excel的单元格样式,是可以分别对单元格的上下左右边框单独设置样式的,所以再复杂的表格样式用PageOffice也可以“绘制”出来。PageOffice中的Table对象可以设置Table的Border样式,所以在此不作详细的叙述。

二、给Excel中的Table赋值


PageOffice开发平台中,针对Excel文件的处理增加了一个“Table”的概念,一个Table指的就是一个区域,例如:sheet.OpenTable("C9:H15")的返回值就是就是Table对象,这个Table所操作的区域就是”C9:H15”。 为何需要这个Table的概念呢?下面就说明一下使用Table对象的优点。
在实际的项目需求中,常常会需要在Excel 中循环的插入多条数的数据,比如:需要在excel中以B11单元格为起始位置,插入10条包含6个字段的数据,如果使用Cell对象写一个循环程序给单元格赋值会是这样的:

DataTable dt = new DataTable();
for (int i = 0; i < 10; i++) // 10条数据
{
    sheet.OpenCellRC("B"+(11+i).ToString()).Value = dt.Rows[i][0].ToString();
    sheet.OpenCellRC("C"+(11+i).ToString()).Value = dt.Rows[i][1].ToString(); 
    sheet.OpenCellRC("D"+(11+i).ToString()).Value = dt.Rows[i][2].ToString(); 
    sheet.OpenCellRC("E"+(11+i).ToString()).Value = dt.Rows[i][3].ToString(); 
    sheet.OpenCellRC("F"+(11+i).ToString()).Value = dt.Rows[i][4].ToString(); 
    sheet.OpenCellRC("G"+(11+i).ToString()).Value = dt.Rows[i][5].ToString();         
}

如果使用Table对象编程,就与操作数据集的概念一样,代码也更容易读懂,代码如下:

DataTable dt = new DataTable();
PageOffice.ExcelWriter.Table table1 = sheet.OpenTable("B11:G20");
for (int i = 0; i < 10; i++) // 10条数据
{
    for (int j = 0; j <6; j++) // 6个字段
    {
        table1.DataFields[j].Value = dt.Rows[i][j].ToString();        
    }
    table1.NextRow();
}
table1.Close();

读者肯定会认为通过Cell实现这个赋值操作还有一个更好的方法,使用OpenCellRC方法,通过行列号操作会更简单,代码如下:

DataTable dt = new DataTable();
for (int i = 0; i < 10; i++) // 10条数据
{
    for (int j = 0; j <6; j++) // 6个字段
    {
        sheet.OpenCellRC(11+i,2+j )Value = dt.Rows[i][j].ToString();        
    }
}

情况确实是这样,但是这个代码相对于Table对象的操作来说有点晦涩,只是看OpenCellRC中的参数是不容易立刻知道操作的是哪个单元格的,还有一个情况是通过Cell赋值无法做到的,那就是在已有的表格模板中插入不定行数的数据。例如:下图中的模板在“合计”之前只有4行空白行,怎么动态插入10条或更多条数据并且数据行的样式也统一呢?

这种情况使用Cell是无法解决问题的,但是前面使用Table给Excel赋值的代码就可以解决这个问题。使用Table赋值的特点是:在赋值的过程中,如果Table所包含的区域行数不够,那么Table会自动插入行,并且循环重复使用Table区域中各行的样式,直到所有的数据都填充完毕。使用Table对象填充数据的效果如下图所示:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值