java SpringMVC中 POI读取数据库数据并写入Excel表格中,并实现下载功能
2017-07-26 22:22
941 查看
package cn.itcast.jk.controller.cargo.outproduct; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.CellRangeAddress; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import cn.itcast.jk.controller.BaseController; import cn.itcast.jk.service.OutProductService; import cn.itcast.jk.vo.OutProductVO; import cn.itcast.util.DownloadUtil; /** * @Description: * @Author: nutony * @Company: http://java.itcast.cn * @CreateDate: 2014年10月14日 */ @Controller public class OutProductController extends BaseController { @Resource OutProductService outProductService; //转向编辑页面 @RequestMapping("/cargo/outproduct/toedit.action") public String toedit(){ return "/cargo/outproduct/jOutProduct.jsp"; } @RequestMapping("/cargo/outproduct/printNotemplate.action") public void printNotemplate(String inputDate) throws IOException{ /* * POI实现excel打印 * 1、大标题,合并单元格 * 2、标题,修饰 * 3、内容,修饰 * */ Workbook wb = new HSSFWorkbook(); //创建一个工作簿 Sheet sheet = wb.createSheet(); //创建一个工作表 Row nRow = null; Cell nCell = null; int rowNo = 0; //行号 int colNo = 1; //列号 //创建样式和字体对象 CellStyle curStyle = wb.createCellStyle(); Font curFont = wb.createFont(); sheet.setColumnWidth(0, 1*278); //设置列宽 256,BUG,精度不够,总是差一点 sheet.setColumnWidth(1, 26*278); //处理大标题 sheet.addMergedRegion(new CellRangeAddress(开始行,结束行,开始列,结束列)); sheet.addMergedRegion(new CellRangeAddress(0, 0, 1, 8)); //合并单元格 nRow = sheet.createRow(rowNo++); nRow.setHeightInPoints(36); nCell = nRow.createCell(1); nCell.setCellStyle(bigTitleStyle(wb)); nCell.setCellValue(inputDate.replaceFirst("-0", "-").replaceFirst("-", "年") + "月份出货表"); 1656f //yyyy-MM //处理标题 String[] title = new String[]{"客户","订单号","货号","数量","工厂","工厂交期","船期","贸易条款"}; //标题数组 nRow = sheet.createRow(rowNo++); nRow.setHeightInPoints(26); for(int i=0;i<title.length;i++){ nCell = nRow.createCell(i+1); nCell.setCellValue(title[i]); nCell.setCellStyle(this.titleStyle(wb)); } //处理内容 List<OutProductVO> dataList = outProductService.find(inputDate); for(int j=0;j<dataList.size();j++){ colNo = 1; //初始化 OutProductVO op = dataList.get(j); nRow = sheet.createRow(rowNo++); nRow.setHeightInPoints(24); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getCustomName()); nCell.setCellStyle(this.textStyle(wb, curStyle, curFont)); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getContractNo()); nCell.setCellStyle(this.textStyle(wb, curStyle, curFont)); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getProductNo()); nCell.setCellStyle(this.textStyle(wb, curStyle, curFont)); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getCnumber()); nCell.setCellStyle(this.textStyle(wb, curStyle, curFont)); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getFactoryName()); nCell.setCellStyle(this.textStyle(wb, curStyle, curFont)); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getDeliveryPeriod()); nCell.setCellStyle(this.textStyle(wb, curStyle, curFont)); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getShipTime()); nCell.setCellStyle(this.textStyle(wb, curStyle, curFont)); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getTradeTerms()); nCell.setCellStyle(this.textStyle(wb, curStyle, curFont)); } OutputStream os = new FileOutputStream("c:\\outproduct.xls"); wb.write(os); os.flush(); os.close(); } //模板开发 @RequestMapping("/cargo/outproduct/printHSSF.action") public void printHSSF(String inputDate, HttpServletRequest request, HttpServletResponse response) throws IOException{ //linux下jdk1.8 方法获取时,不会拼接自己写的目录 String path = request.getSession().getServletContext().getRealPath("/") + "/make/xlsprint/"; InputStream is = new FileInputStream(new File(path + "tOUTPRODUCT.xls")); Workbook wb = new HSSFWorkbook(is); //打开一个模板文件,工作簿 Sheet sheet = wb.getSheetAt(0); //获取到第一个工作表 Row nRow = null; Cell nCell = null; int rowNo = 0; //行号 int colNo = 1; //列号 //获取模板上的单元格样式 nRow = sheet.getRow(2); //客户的样式 nCell = nRow.getCell(1); CellStyle customStyle = nCell.getCellStyle(); //订单号的样式 nCell = nRow.getCell(2); CellStyle contractNoStyle = nCell.getCellStyle(); //货号的样式 nCell = nRow.getCell(3); CellStyle productNoStyle = nCell.getCellStyle(); //数量的样式 nCell = nRow.getCell(4); CellStyle numStyle = nCell.getCellStyle(); //生产厂家的样式 nCell = nRow.getCell(5); CellStyle factoryStyle = nCell.getCellStyle(); //日期的样式 nCell = nRow.getCell(6); CellStyle dateStyle = nCell.getCellStyle(); //贸易条款的样式 nCell = nRow.getCell(8); CellStyle tradeStyle = nCell.getCellStyle(); //处理大标题 nRow = sheet.getRow(rowNo++); //获取一个行对象 nCell = nRow.getCell(colNo); //获取一个单元格对象 nCell.setCellValue(inputDate.replaceFirst("-0", "-").replaceFirst("-", "年") + "月份出货表"); //yyyy-MM rowNo++; //跳过静态表格头 //处理内容 List<OutProductVO> dataList = outProductService.find(inputDate); for(int j=0;j<dataList.size();j++){ colNo = 1; //初始化 OutProductVO op = dataList.get(j); nRow = sheet.createRow(rowNo++); nRow.setHeightInPoints(24); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getCustomName()); nCell.setCellStyle(customStyle); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getContractNo()); nCell.setCellStyle(contractNoStyle); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getProductNo()); nCell.setCellStyle(productNoStyle); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getCnumber()); nCell.setCellStyle(numStyle); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getFactoryName()); nCell.setCellStyle(factoryStyle); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getDeliveryPeriod()); nCell.setCellStyle(dateStyle); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getShipTime()); nCell.setCellStyle(dateStyle); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getTradeTerms()); nCell.setCellStyle(tradeStyle); } // OutputStream os = new FileOutputStream("c:\\outproduct.xls"); // wb.write(os); // // os.flush(); // os.close(); ByteArrayOutputStream os = new ByteArrayOutputStream(); wb.write(os); DownloadUtil downloadUtil = new DownloadUtil(); //直接弹出下载框,用户可以打开,可以保存 downloadUtil.download(os, response, "出货表.xls"); os.flush(); os.close(); } //模板开发XSSF @RequestMapping("/cargo/outproduct/print.action") public void print(String inputDate, HttpServletRequest request, HttpServletResponse response) throws IOException{ //linux下jdk1.8 方法获取时,不会拼接自己写的目录 String path = request.getSession().getServletContext().getRealPath("/") + "/make/xlsprint/"; InputStream is = new FileInputStream(new File(path + "tOUTPRODUCT.xlsx")); Workbook wb = new XSSFWorkbook(is); //打开一个模板文件,工作簿 2007以上版本 Sheet sheet = wb.getSheetAt(0); //获取到第一个工作表 Row nRow = null; Cell nCell = null; int rowNo = 0; //行号 int colNo = 1; //列号 //获取模板上的单元格样式 nRow = sheet.getRow(2); //客户的样式 nCell = nRow.getCell(1); CellStyle customStyle = nCell.getCellStyle(); //订单号的样式 nCell = nRow.getCell(2); CellStyle contractNoStyle = nCell.getCellStyle(); //货号的样式 nCell = nRow.getCell(3); CellStyle productNoStyle = nCell.getCellStyle(); //数量的样式 nCell = nRow.getCell(4); CellStyle numStyle = nCell.getCellStyle(); //生产厂家的样式 nCell = nRow.getCell(5); CellStyle factoryStyle = nCell.getCellStyle(); //日期的样式 nCell = nRow.getCell(6); CellStyle dateStyle = nCell.getCellStyle(); //贸易条款的样式 nCell = nRow.getCell(8); CellStyle tradeStyle = nCell.getCellStyle(); //处理大标题 nRow = sheet.getRow(rowNo++); //获取一个行对象 nCell = nRow.getCell(colNo); //获取一个单元格对象 nCell.setCellValue(inputDate.replaceFirst("-0", "-").replaceFirst("-", "年") + "月份出货表"); //yyyy-MM rowNo++; //跳过静态表格头 //处理内容 List<OutProductVO> dataList = outProductService.find(inputDate); for(int j=0;j<dataList.size();j++){ colNo = 1; //初始化 OutProductVO op = dataList.get(j); nRow = sheet.createRow(rowNo++); nRow.setHeightInPoints(24); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getCustomName()); nCell.setCellStyle(customStyle); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getContractNo()); nCell.setCellStyle(contractNoStyle); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getProductNo()); nCell.setCellStyle(productNoStyle); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getCnumber()); nCell.setCellStyle(numStyle); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getFactoryName()); nCell.setCellStyle(factoryStyle); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getDeliveryPeriod()); nCell.setCellStyle(dateStyle); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getShipTime()); nCell.setCellStyle(dateStyle); nCell = nRow.createCell(colNo++); nCell.setCellValue(op.getTradeTerms()); nCell.setCellStyle(tradeStyle); } // OutputStream os = new FileOutputStream("c:\\outproduct.xls"); // wb.write(os); // // os.flush(); // os.close(); ByteArrayOutputStream os = new ByteArrayOutputStream(); wb.write(os); DownloadUtil downloadUtil = new DownloadUtil(); //直接弹出下载框,用户可以打开,可以保存 downloadUtil.download(os, response, "出货表.xlsx"); os.flush(); os.close(); } //大标题样式 private CellStyle bigTitleStyle(Workbook wb){ CellStyle curStyle = wb.createCellStyle(); Font curFont = wb.createFont(); curFont.setFontName("宋体"); curFont.setFontHeightInPoints((short)16); curFont.setBoldweight(Font.BOLDWEIGHT_BOLD); //字体加粗 curStyle.setFont(curFont); //绑定字体 curStyle.setAlignment(CellStyle.ALIGN_CENTER); //横向居中 curStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //纵向居中 return curStyle; } //小标题样式 private CellStyle titleStyle(Workbook wb){ CellStyle curStyle = wb.createCellStyle(); Font curFont = wb.createFont(); curFont.setFontName("黑体"); curFont.setFontHeightInPoints((short)12); curStyle.setFont(curFont); //绑定字体 curStyle.setAlignment(CellStyle.ALIGN_CENTER); //横向居中 curStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //纵向居中 curStyle.setBorderTop(CellStyle.BORDER_THIN); //设置四周边线,细线 curStyle.setBorderBottom(CellStyle.BORDER_THIN); curStyle.setBorderLeft(CellStyle.BORDER_THIN); curStyle.setBorderRight(CellStyle.BORDER_THIN); return curStyle; } //文字样式 private CellStyle textStyle(Workbook wb, CellStyle curStyle, Font curFont){ curFont.setFontName("Times New Roman"); curFont.setFontHeightInPoints((short)10); curStyle.setFont(curFont); //绑定字体 curStyle.setAlignment(CellStyle.ALIGN_LEFT); //横向居左 curStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //纵向居中 curStyle.setBorderTop(CellStyle.BORDER_THIN); //设置四周边线,细线 curStyle.setBorderBottom(CellStyle.BORDER_THIN); curStyle.setBorderLeft(CellStyle.BORDER_THIN); curStyle.setBorderRight(CellStyle.BORDER_THIN); return curStyle; } }
文件下载类
package cn.itcast.util; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; public class DownloadUtil { /** * @param filePath 要下载的文件路径 * @param returnName 返回的文件名 * @param response HttpServletResponse * @param delFlag 是否删除文件 */ protected void download(String filePath,String returnName,HttpServletResponse response,boolean delFlag){ this.prototypeDownload(new File(filePath), returnName, response, delFlag); } /** * @param file 要下载的文件 * @param returnName 返回的文件名 * @param response HttpServletResponse * @param delFlag 是否删除文件 */ protected void download(File file,String returnName,HttpServletResponse response,boolean delFlag){ this.prototypeDownload(file, returnName, response, delFlag); } /** * @param file 要下载的文件 * @param returnName 返回的文件名 * @param response HttpServletResponse * @param delFlag 是否删除文件 */ public void prototypeDownload(File file,String returnName,HttpServletResponse response,boolean delFlag){ // 下载文件 FileInputStream inputStream = null; ServletOutputStream outputStream = null; try { if(!file.exists()) return; response.reset(); //设置响应类型 PDF文件为"application/pdf",WORD文件为:"application/msword", EXCEL文件为:"application/vnd.ms-excel"。 response.setContentType("application/octet-stream;charset=utf-8"); //设置响应的文件名称,并转换成中文编码 //returnName = URLEncoder.encode(returnName,"UTF-8"); returnName = response.encodeURL(new String(returnName.getBytes(),"iso8859-1")); //保存的文件名,必须和页面编码一致,否则乱码 //attachment作为附件下载;inline客户端机器有安装匹配程序,则直接打开;注意改变配置,清除缓存,否则可能不能看到效果 response.addHeader("Content-Disposition", "attachment;filename="+returnName); //将文件读入响应流 inputStream = new FileInputStream(file); outputStream = response.getOutputStream(); int length = 1024; int readLength=0; byte buf[] = new byte[1024]; readLength = inputStream.read(buf, 0, length); while (readLength != -1) { outputStream.write(buf, 0, readLength); readLength = inputStream.read(buf, 0, length); } } catch (Exception e) { e.printStackTrace(); } finally { try { outputStream.flush(); } catch (IOException e) { e.printStackTrace(); } try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } //删除原文件 if(delFlag) { file.delete(); } } } /** * by tony 2013-10-17 * @param byteArrayOutputStream 将文件内容写入ByteArrayOutputStream * @param response HttpServletResponse 写入response * @param returnName 返回的文件名 */ 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(); //刷数据 } }
相关文章推荐
- java实现从数据库读取数据写入excel,写入多个sheet,6万数据耗时100秒附近
- easyui,springmvc,poi实现上传excel写入数据到数据库中
- java poi实现数据库数据导出到excel
- JAVA实现数据库数据导入/导出到Excel(POI)
- Java中读取Excel功能实现_POI
- Java中读取Excel功能实现_POI
- Java导出页面数据或数据库数据至Excel文件并下载,采用JXL技术,小demo(servlet实现)
- java excel完整实现导入到数据库的功能开发试题导入功能 整合springmvc mybatis 处理
- java 实现excel中的数据导入到数据库的功能
- java 实现excel中的数据导入到数据库的功能
- java 对excel操作 读取、写入、修改数据;导出数据库数据到excel
- java实现数据库数据导出到Excel并下载查看
- poi 学习之使用 Apche poi 读取数据库中的数据并写入Excel
- java excel完整实现导入到数据库的功能开发试题导入功能 整合springmvc mybatis 处理
- 小例子:java利用poi读取excel中数据并导入数据库
- java excel完整实现导入到数据库的功能开发试题导入功能 整合springmvc mybatis 处理
- java excel完整实现导入到数据库的功能开发试题导入功能 整合springmvc mybatis 处理
- java实现excel数据重新写入数据库
- Java实现Excel导入数据库,数据库中的数据导入到Excel。。转载 自学资料总结 实现的功能: Java实现Excel导入数据库,如果存在就更新 数据库中的数据导入到Excel 1、
- java excel完整实现导入到数据库的功能开发试题导入功能 整合springmvc mybatis 处理