Java实现 用Aspose.Cells导出excel模板数据


最近有个需求是将数据库查询出来的数据,写入到用户提供的指定的模板中。查询一番,java方面的有jxl和poi两种插件,考虑到本次模板有多个页签,只是简单的数据查询,便选择 Aspose.Cells。记录下来实现的过程,方便之后的查看。

知识介绍

Aspose.Cell控件支持多种参数变量的绑定操作,如支持DataSet、Datatable、IList集合,实体类集合、类对象。下面是实现的过程。

第一步、设置引用关系

需要给用户提供的模板文件中的每个字段添加引用,作用是将程序查询出来的结果集,对应到数据列。实现效果如下图所示。
在这里插入图片描述
  模板中的列名要与数据库查询出来的列对应,绑定两者之间的关系,这里通过**&=**来连接,从而建立两者之间的关系。

知识点
通过&= 来引用对象的结果的集合,如&=a.姓名,即引用a表中的性名列。
模板中不同页签也能根据&= 实现数据的对应关系。

第二步、查询数据集

查询数据库获取结果模板所需字段的数据集,本例子利用jdbcOperations.queryForList来实现查询,将结果放到HashMapDataTable中。
主要实现的步骤:读取模板文件–查询数据–往模板中写数据。程序代码实现:

// 读取模板文件,FilePath为文件的路径
InputStream in=new FileInputStream(new File(FilePath));
//读取工作簿
Workbook wb= new Workbook(in);
//记得关闭输入流
in.close(); 
//创建Aspose.Cells WorkbookDesigner 的对象
WorkbookDesigner designer = new WorkbookDesigner();
designer.setWorkbook(wb);
//创建StringBuffer 存放查询的SQL
StringBuffer sql = new StringBuffer();
sql.append(“select name as 姓名,sex as 性别,sfzh as 身份证号 FROM a”);
//将查询结果存放到list中
List<Map<String, Object>> dataList = jdbcOperations.queryForList(sql.toString());
//设置DataTable对象
designer.setDataSource("a", new HashMapDataTable(dataList));
//根据数据源处理生成报表内容
designer.process();
//输出流,写入到文件中
OutputStream out = new FileOutputStream(logPath+File.separator+"导出数据.xls");
//将查询数据写入到文件中
wb.save(out, wb.getFileFormat());

知识点
designer.setDataSource 设置对象之间的引用关系。
合并单元格 cells.Merge
如cells.Merge(1, 0, 3, 1) 参数1代表当前行,参数0代表当前行当前列即第一行第一列,参数3合并的行数,参数4合并的列数

模板输出的两种方式:

// 第一种方式:模板数据输出
var filename = HttpUtility.UrlEncode("数据导出", System.Text.Encoding.UTF8) +DateTime.Now.ToString("yyyyMMddhhmmss")+ ".xls"
//第二种方式:模板输出
OutputStream out = new FileOutputStream(logPath+File.separator+"导出数据.xls");

如果输出的是中文的文件名,需要添加 HttpUtility.UrlEncode() 防止出现乱码。若采用http请求直接在浏览器下载生成的文件,则需要获取response.getOutputStream()输出流。

// 浏览器上输出文件
wb.save(response.getOutputStream(), wb.getFileFormat());

第三步、测试导出程序

经过测试,能够将查询出来的结果写入到对应的模板中。
在这里插入图片描述

博客参考

【1】https://blog.csdn.net/kongwei521/article/details/41647747
【2】https://www.cnblogs.com/wuhuacong/archive/2011/02/23/1962147.html
【3】https://blog.csdn.net/a363722188/article/details/81202295

Aspose.Cells是一个用于处理Excel文件的.NET组件。在使用Aspose.Cells导出Excel文件时,可以使用以下代码示例: ```csharp System.Web.HttpResponse Response = System.Web.HttpContext.Current.Response; workbook.Save(Response, HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8) + ".xlsx", Aspose.Cells.ContentDisposition.Attachment, new Aspose.Cells.XlsSaveOptions(Aspose.Cells.SaveFormat.Xlsx)); ``` 这段代码将Excel文件保存到HttpResponse中,以便将其作为附件下载。其中,`workbook`是你创建的Excel工作簿对象,`filename`是你想要保存的文件名。 在生成Excel文件时,你还可以设置标题行和列头行的样式,例如: ```csharp // 生成标题行 cells.Merge(0, 0, 1, header.Keys.Count); // 合并单元格,标题行有几列就合并几列 cells\[0, 0\].PutValue(filename); // 填写内容 cells\[0, 0\].SetStyle(styleTitle); // 使用标题样式 cells.SetRowHeight(0, 50); // 第0行,50px高 // 生成列头行 int headerNum = 0; // 当前表头所在列 foreach (string item in header.Keys) { cells\[1, headerNum\].PutValue(item); cells\[1, headerNum\].SetStyle(styleHeader); cells.SetColumnWidthPixel(headerNum, 200); // 设置单元格200宽度 cells.SetRowHeight(1, 30); // 第一行,30px高 headerNum++; } ``` 这段代码示例展示了如何设置标题行和列头行的样式,其中`cells`是你创建的Worksheet对象,`header`是一个包含列头信息的字典,`styleTitle`和`styleHeader`是你定义的样式对象。 希望这些代码示例能帮助到你导出Excel文件使用Aspose.Cells。 #### 引用[.reference_title] - *1* *2* *3* [使用Aspose.Cells导出excel](https://blog.csdn.net/rxbtalent/article/details/99818241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值