SSH入门项目-8-POI报表
来源:互联网 发布:arp绑定 mac绑定 编辑:程序博客网 时间:2024/04/28 01:03
跟着一起做了一个和供销合同相关的内容,这部分内容就不粘贴了。约等于没做什么。
POI简介与准备测试:
1,简介
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 .NET的开发人员则可以利用NPOI(POI for .NET)来存取POI的功能。
2,测试:
2.1POI操作excel的8个步骤
- 创建工作簿workbook
- 创建工作表sheet
- 创建行对象row(下表起始为0)
- 创建一个单元格对象cell(下标起始为0)
- 给单元格设置内容
- 设置单元格样式,设置字体大小等
- 保存,关闭流对象
- 下载
2.2测试代码
public class POI01Test { @Test public void testPoi() throws Exception{ //1.创建工作簿 Workbook wb = new XSSFWorkbook(); //2.创建工作表Sheet Sheet sheet = wb.createSheet(); //3.创建行对象Row Row row = sheet.createRow(3); //下标从0开始 //4.创建单元格对象 从0记数 Cell cell = row.createCell(3); //5.设置单元格内容 cell.setCellValue("刘洋"); //6.设置单元格的样式 CellStyle cellStyle = wb.createCellStyle(); Font font = wb.createFont();//创建字体对象 font.setFontName("叶根友行书繁");//设置字体名称 font.setFontHeightInPoints((short)48);//设置字体大小 cellStyle.setFont(font);//样式中添加一个字体样式 cell.setCellStyle(cellStyle); //7.保存,关闭流 OutputStream os = new FileOutputStream("C:/Users/liuyang19900520/Desktop/liutest.xlsx");//创建一个输出流 wb.write(os); os.close(); //8.下载 }}
留下2个连接地址为了以后用的时候参考
http://blog.csdn.net/houxuehan/article/details/50960259
http://blog.csdn.net/wushuang5566110/article/details/6415035
实现功能:
1,表头部分编写
注意合并单元格的编写
sheet.addMergedRegion(new CellRangeAddress(0, 0, 1, 8));// 横向合并单元格
2,标题的编写
String titles[] = { "客户", "订单号", "货号", "数量", "工厂", "工厂交期", "船期", "贸易条款" }; // 创建小标题的行对象 nRow = sheet.createRow(rowNo++); nRow.setHeightInPoints(26.25f);// 设置行高 // 创建单元格对象,并设置内容 ,并设置样式 for (String title : titles) { nCell = nRow.createCell(cellNo++);// 创建单元格对象 nCell.setCellValue(title);// 设置内容 nCell.setCellStyle(this.title(wb));// 设置样式 }
3,下载的编写并说明一下工具类
DownloadUtil downUtil = new DownloadUtil(); ByteArrayOutputStream baos = new ByteArrayOutputStream();// 流 内存中的缓存区 wb.write(baos);// 将excel表格中的内容输出到缓存 baos.close();// 刷新缓存 HttpServletResponse response = ServletActionContext.getResponse();// 得到response对象 downUtil.download(baos, response, "出货表.xlsx");// 如果是中文,下载时可能会产生乱码,如何解决?
3.1,download工具类主方法
public void download(ByteArrayOutputStream byteArrayOutputStream, HttpServletResponse response, String returnName) throws IOException{ response.setContentType("application/octet-stream;charset=utf-8"); returnName = response.encodeURL(new String(returnName.getBytes(),"iso8859-1")); //保存的文件名,必须和页面编码一致,否则乱码 response.addHeader("Content-Disposition", "attachment;filename=" + returnName); response.setContentLength(byteArrayOutputStream.size()); ServletOutputStream outputstream = response.getOutputStream(); //取得输出流 byteArrayOutputStream.writeTo(outputstream); //写到输出流 byteArrayOutputStream.close(); //关闭 outputstream.flush(); //刷数据 }
3.2,download简单理解
- ByteArrayOutputStream:装着写好excel workbook的流文件。在内存中的缓存区,不占用服务器位置。
- HttpServletResponse:设置响应的Type和header,并且修正了中文乱码
- String(name):中文的文件名,需要解决中文乱码
4,完成内容
4.1,根据选中的日期查询所有数据,得到符合要求的数据列表
4.2,遍历数据列表对象,创建行对象,设置格式
4.3,创建单元格对象,先重置cellNo=1,设置格式,确保每行都能重第一列开始添加数据。
在这个时候需要注意一下,在添加日期数据的时候,应该format一下日期格式。
4.4,中文名乱码修正
/** * 下载文件时,针对不同浏览器,进行附件名的编码 * * @param filename * 下载文件名 * @param agent * 客户端浏览器 * @return 编码后的下载附件名 * @throws IOException */ public String encodeDownloadFilename(String filename, String agent) throws IOException { if (agent.contains("Firefox")) { // 火狐浏览器 filename = "=?UTF-8?B?" + new BASE64Encoder().encode(filename.getBytes("utf-8")) + "?="; } else { // IE及其他浏览器 filename = URLEncoder.encode(filename, "utf-8"); } return filename; }
在工具中适配火狐浏览器的中文乱码,如果一开始导入不了这个base64的工具,需要进行一下配置
采用模板方式生成:
1,找到模板文件
/liussh_web/src/main/webapp/make/xlsprint/tOUTPRODUCT.xls
2,把创建工作簿和工作页的工作调整为读取
//1.读取工作簿 String path = ServletActionContext.getServletContext().getRealPath("/")+"/make/xlsprint/tOUTPRODUCT.xls"; System.out.println(path); InputStream is = new FileInputStream(path); Workbook wb = new HSSFWorkbook(is); //2.读取工作表 Sheet sheet = wb.getSheetAt(0);
3,获取模板单元格的样式并保存起来
nRow = sheet.getRow(rowNo);//读取第三行 CellStyle customCellStyle = nRow.getCell(cellNo++).getCellStyle(); CellStyle orderNoCellStyle = nRow.getCell(cellNo++).getCellStyle(); CellStyle productNoCellStyle = nRow.getCell(cellNo++).getCellStyle(); CellStyle cNumberCellStyle = nRow.getCell(cellNo++).getCellStyle(); CellStyle factoryCellStyle = nRow.getCell(cellNo++).getCellStyle(); CellStyle deliveryPeriodCellStyle = nRow.getCell(cellNo++).getCellStyle(); CellStyle shipTimeCellStyle = nRow.getCell(cellNo++).getCellStyle(); CellStyle tradeTermsCellStyle = nRow.getCell(cellNo++).getCellStyle();
4,绘制表格的时候将样式替换。
这部分就先告一段落吧。
阅读全文
0 0
- SSH入门项目-8-POI报表
- POI报表入门
- 电力项目 poi\jxl报表学习总结
- POI报表
- POI报表
- poi报表技术快速入门demo(带图片插入)
- SSH入门项目-0-前言
- POI生成excel报表
- Java工具 poi报表
- POI导出报表总结
- poi报表代码
- poi报表导出
- 报表导出(POI)
- POI报表导入导出
- java-poi-excel报表
- poi写出报表
- POI导出easyui报表
- poi报表导出
- TCP 三次握手/四次挥手
- Linux学习-Makefile
- java队列queue
- Python中输入一个以空格为间隔的数组
- AI
- SSH入门项目-8-POI报表
- eclipse maven install 没反应
- Tinker热修复(gradle接入--成功)
- 系统虚拟机管理
- C# System.IO 文件流输入输出
- 自然语言处理3---TFIDF
- 道路覆盖 (二分答案+状压DP)
- RSA公钥加密私钥解密--jsp加密,java解密
- 最长公共上升子序列 LCIS