使用Aspose.Cell控件实现Excel高难度报表的生成(三)
更新时间:2023-12-05 00:56:01 阅读量: 教育文库 文档下载
使用Aspose.Cell控件实现Excel高难度报表的生成(三)
在之前几篇文章中,介绍了关于Apsose.cell这个强大的Excel操作控件的使用,相关文章如下:
使用Aspose.Cell控件实现Excel高难度报表的生成(一) 使用Aspose.Cell控件实现Excel高难度报表的生成(二) 使用Aspose.Cell控件实现多个Excel文件的合并 这几篇文章,都对Apose.Cell这个控件生成各种Excel的方式进行了阐述,对直接把DataTable或者IList生成Excel的操作,对通过模板方式实现自定义报表的各种方式,以及多个文件的合并的方式进行了介绍。
本文继续介绍该控件进一步的使用,也主要介绍如何动态生成(不使用模板文件)各种单元格,以及图表的增加等功能,介绍生成的表格完全自定义,这个报表时一个典型的图文并茂的统计报表,它的最终样式如下所示。
这个报表,表格数据是动态生成,图形则是直接从窗体的图表控件(如ZedGraph图表控件)或者PictureBox控件中获取,写入Excel文档中的。 测试程序主界面如下所示。
和很多其他的Excel操作控件(NPOI、Myxls)一样吗,Apose.Cell也提供了WorkBook、WorkSheet、Range、Cell这些对象的包装,操作这些对象,基本上能够满足我们各种复杂的需求,给我们更加弹性化的操作。 1、 添加基本对象进行操作 Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
这几个对象是操作Excel必须的,如果需要设定生成的Excel打印预览的参数,进行一些属性设置,如下所示。
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
worksheet.PageSetup.Orientation = PageOrientationType.Landscape;//横向打印
worksheet.PageSetup.Zoom = 100;//以100%的缩放模式打开 worksheet.PageSetup.PaperSize = PaperSizeType.PaperA4;
我们知道,由于该报表完全是手工生成,报表的标题,以及下面几行说明文字,也是需要生成的,操作其实就是把一些单元格合并为一个区域(Range),然后赋值,改变样式就可以了,如下所示的效果和代码
Range range; Cell cell;
int colSpan = 4 + DeptNameList.Count * 2;
range = worksheet.Cells.CreateRange(0, 0, 1, colSpan); range.Merge(); range.RowHeight = 20;
range.Style = CreateTitleStyle(workbook); cell = range[0, 0];
cell.PutValue(\患病情况统计\
range = worksheet.Cells.CreateRange(1, 0, 1, colSpan); range.Merge(); range.RowHeight = 15; cell = range[0, 0];
cell.PutValue(\所选部别范围内,总计有1000名人员,查询统计结果如下:\
range = worksheet.Cells.CreateRange(2, 0, 1, colSpan); range.Merge(); range.RowHeight = 15; cell = range[0, 0];
cell.PutValue(\自2007-1-1开始到现在,统计共有500人有患病史,累计900人次,患病情况如下表:\
2、生成报表头部表格 报表中最复杂的是表头的生成,因为它是不规则的表头,因此需要很细的操作Cell和Range对象,实现复杂表头(也是很常见的)的生成。
这个是慢工出细活,需要对Cell和Range熟悉使用,然后给他们分配不同的行列就可以生成一个标准如下的表头了。
Style headStyle = CreateStyle(workbook, true); Style normalStyle = CreateStyle(workbook, false); int startRow = 4;
range = worksheet.Cells.CreateRange(startRow, 0, 2, 1); range.Merge();
range.Style = headStyle; cell = range[0, 0]; cell.PutValue(\序号\ cell.Style = headStyle;
range = worksheet.Cells.CreateRange(startRow, 1, 2, 1); range.Merge();
range.Style = headStyle; range.ColumnWidth = 40; cell = range[0, 0]; cell.PutValue(\疾病名称\ cell.Style = headStyle;
int startCol = 2;
foreach (string deptName in DeptNameList) {
range = worksheet.Cells.CreateRange(startRow, startCol, 1, 2);
range.Merge();
range.Style = headStyle; cell = range[0, 0]; cell.PutValue(deptName);
cell = worksheet.Cells[startRow + 1, startCol]; cell.PutValue(\人次\ cell.Style = headStyle;
cell = worksheet.Cells[startRow + 1, startCol + 1]; cell.PutValue(\百分比\ cell.Style = headStyle;
startCol += 2; }
range = worksheet.Cells.CreateRange(startRow, startCol, 1, 2);
range.Merge();
range.Style = headStyle; cell = range[0, 0]; cell.PutValue(\合计\
cell = worksheet.Cells[startRow + 1, startCol]; cell.PutValue(\人次\ cell.Style = headStyle;
cell = worksheet.Cells[startRow + 1, startCol + 1]; cell.PutValue(\百分比\ cell.Style = headStyle; #endregion
3、填入表格内容 这个不算复杂,只需要遍历然后生成内容到单元格即可。
//写入数据到Excel
startRow = startRow + 2; for (int i = 0; i < dt.Rows.Count; i++) {
startCol = 0;
for (int j = 0; j < dt.Columns.Count; j++) {
DataRow dr = dt.Rows[i];
cell = worksheet.Cells[startRow, startCol]; cell.PutValue(dr[j]); cell.Style = normalStyle;
startCol++; }
startRow++; }
4、插入图表及导出打开操作 这个Apose.Cell控件的WorkSheet提供了worksheet.Pictures.Add方法,可以添加图片的操作,不过图片是通过流方式写入,我们把图表的Image对象转换一下,创建一个内存流就可以了。如下所示。
//写入图注
startRow += 1;//跳过1行
range = worksheet.Cells.CreateRange(startRow++, 0, 1, colSpan);
range.Merge(); range.RowHeight = 15; cell = range[0, 0];
cell.PutValue(\以柱状图展示如下:\);
//插入图片到Excel里面 byte[] bytes =
ImageHelper.ImageToBytes(this.pictureBox1.Image);
using (MemoryStream stream = new MemoryStream(bytes)) {
worksheet.Pictures.Add(startRow, 0, stream); }
//Save the excel file. string saveFile =
FileDialogHelper.SaveExcel(\, \);
if (!string.IsNullOrEmpty(saveFile)) {
workbook.Save(saveFile);
if (MessageUtil.ShowYesNoAndTips(\保存成功,是否打开文件?\) == System.Windows.Forms.DialogResult.Yes) {
System.Diagnostics.Process.Start(saveFile); } }
至此,基于Apose.Cell的自定义报表的另外一种操作也全部实现了,为了实现这个简单的例子,以便在项目中使用,花了不少时间,不过以后对于生成这类复杂的和自定义报表,可以直接利用它们基础的对象进行操作即可;
如果是一些常规的报表,可以利用自定义模板的方式生成,然后绑定数据源;如果是二维表,或者ILIst集合,导出Excel就更简单了。以上两种都可以直接利用封装好的
AsposeExcelTools来进行操作,这个通用的类库,可以省却每次去编写代码的繁琐,提高效率。
正在阅读:
使用Aspose.Cell控件实现Excel高难度报表的生成(三)12-05
上半年党风廉政建设和反腐败工作总结02-26
韩剧《制作人》经典语录台词06-09
2016-2022年中国倒车雷达市场发展现状及市场评估报告03-19
特殊作业工作票规范(工作票样表)01-09
护卫天使行动方案05-25
众智日照操作手册01-12
2016年中国3D制图软件行业竞争分析及发展前景分析报告04-05
柴油发动机基本原理一01-02
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 高难度
- 控件
- 报表
- 生成
- 实现
- 使用
- Aspose
- Excel
- Cell