在 WinForm使用Aspose.cells利用模板导出Excel,这篇文章中讲述了如何使用模板进行导出Excel,但是实际上还有比较复杂的Excel导出操作,直接使用模板是无法完成,在这里就要代码创建模板,然后利用创建的模板进行Excel的导出。下面来看一个例子:
项目要实现的效果图如上图,用户可以多选单位客户,然后可进行导出,自动根据单位进行分页,每一个单位至少占一页。
因为条件是不确定的,单位也是不确定的,所以无法建立一个统一的模板进行导出,也许有人认为利用Group可以实现,但是实际上是不行的,因为单位与实际的数据Table不是在一行的,利用Group时,是会分组,但是下面的数据只有一段,只是创建了多个单位所在的行。下面就说说我的实现方法吧。
(1)我们依旧要使用模板进行导出,只不过这个模板不是简单的模板,而且我们通过代码创建的一个模板,首先我们要做的就是代码创建模板。而且这个模板是会自动根据数据源进行分页的,并且这个模板是有多个数据的,代码创建的模板如下。
模板创建的录入实际的数据表格式类似,已经实现了自动的分页,实际上绑定数据只是设置数据源而已。可以看见我们主要是要创建一个如上图的Excel表格,这就稍微有些许简单了吧,下面来看看代码吧。
(2)Aspose.Cells创建Excel。
下面是创建代码Excel的主要代码:
1。创建以上的Excel表格就必须代码明了分页,在这里我新建了一个函数进行创建表格的操作,传入的参数有三个,一个是表格本身,第二个是创建的页的第一行,第三个是数据的总行数。具体的可以看代码,比较简单,主要是如何处理分页的步骤。
int yeHasCount = 34;//每页有多少行
int oneYeHasCount = 29;//第一页具有多少行,去除表头以后
#region
/// <summary>
/// 创建Excel表格,每页三十二行,表头+表尾总共五行
/// </summary>
/// <param name="workBook"></param>
/// <param name="i">下一页的第一行</param>
/// <param name="count">数据的行数</param>
/// <returns>返回下一个表格开始的行数</returns>
private int createCheckDetail(Workbook workBook,int i,int count) {
Worksheet workSheet = workBook.Worksheets[0]; //获取工作簿
Cells cells = workSheet.Cells;
//设置行高
cells.SetRowHeight(i,21);
cells.SetRowHeight(i+1, 21);
cells.SetRowHeight(i+2, 21);
cells.SetRowHeight(i+3, 21);
cells.SetRowHeight(i + 4, 21);
cells.SetRowHeight(i + 5, 21);
cells.SetColumnWidth(0,4.5);
cells.SetColumnWidth(1,8.7);
cells.SetColumnWidth(2, 24);
cells.SetColumnWidth(3, 12.5);
cells.SetColumnWidth(4, 8.5);
cells.SetColumnWidth(5, 5.0);
cells.SetColumnWidth(6, 8);
cells.SetColumnWidth(7,10.9);
Style style1 = workBook.Styles[workBook.Styles.Add()];
//设置居中
style1.HorizontalAlignment = Aspose.Cells.TextAlignmentType.Center;
style1.VerticalAlignment = Aspose.Cells.TextAlignmentType.Center;
//设置背景颜色
style1.Font.IsBold = true;
style1.Font.Name = "宋体";
style1.Font.Size = 12;
style1.IsTextWrapped = true; //自动换行
Style styleBorder = workBook.Styles[workBook.Styles.Add()];//边界线
styleBorder.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; //应用边界线 左边界线
styleBorder.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; //应用边界线 右边界线
styleBorder