Java 导出Excel实例代码整理(POI) 可用
来源:互联网 发布:tensorflow车道线识别 编辑:程序博客网 时间:2024/06/05 15:19
两年前曾实现做过导出excel表格,由于当年缺少一种代码积累意识,于是乎跟很多人一样代码实现后就给弃之九霄,凑巧如今又使用了这么一个功能,等于又重新开始了一段初学的历程. 声明:以下代码均是小弟参考其他大神资料整理而来。建议阅读时根据先后顺序
附上导出结果:
一、Java实现Excel导出的方式有哪些
目前常见读写Excel的工具类开源javaAPI有两种方式,
一个是JXL(Java Excel API) 官网地址:http://jexcelapi.sourceforge.net/
一个是Apache的POI(Poor Obfuscation Implementation)官网地址:http://poi.apache.org/
一个是JXL(Java Excel API) 官网地址:http://jexcelapi.sourceforge.net/
一个是Apache的POI(Poor Obfuscation Implementation)官网地址:http://poi.apache.org/
由于我是使用的POI,所以这里较为注重POI导出资料的整理,另鉴于轮组不要胡乱造,况且新造的轮子不一定有旧的好,故此处搬出自己学习的技术博客出处
- java中导入、导出execl http://blog.csdn.net/jerehedu/article/details/45195359
注:很简单明了的一个教程,可以让你简单快速的进行代码开发等。
- java读写execl之POI超入门 http://rensanning.iteye.com/blog/1538591
注:此为详细篇,基本常用的都已包含. 基础execl格式以满足.
- poi中常用的api http://blog.csdn.net/u011182715/article/details/51473618
注:一些api的补充.
以上三篇,可以说包含了大部分的poi资料. 一般情况下够用,至少我就是参考以上例子完成酱.
二、代码功能实现
铺垫了酱么多,说白了还是一样一样的,这里就简单附上一下个人代码的实现,首先肯定了先要加jar包,插件嘛,少了关键点怎么行呢,就比如咱们去大保健,钱都没带那不是迟早要粗事吖~
1.加入jar包.
自己下载自己加 http://download.csdn.net/detail/dcb_ripple/9790774
2.main代码实现
package jakarta;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFAnchor;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.util.CellRangeAddress;public class JakartaTest {public static void main(String[] args) {//web对象HSSFWorkbook wb = new HSSFWorkbook();//创建表头等HSSFSheet sheet = wb.createSheet("test1");//创建行HSSFRow row = sheet.createRow(0);//创建列HSSFCell cell = row.createCell(0);HSSFCell cell2 = row.createCell(2);cell2.setCellValue("嗯哼");cell.setCellValue("我是写入的值");sheet.addMergedRegion(new CellRangeAddress(0,0,0,3)); try {FileOutputStream output = new FileOutputStream("E:\\JAKARTA.xls");wb.write(output);output.flush(); System.out.println("成功创建excel文件");} catch (Exception e) {e.printStackTrace();}}}
经测试. 运行即可完成execl创建,其实可以理解为是java 通过POI插件创建了一个EXECL文件而已.
3.通过浏览器实现导出
其实上面教程已经有讲怎么样通过控制器Controller导出
public void exportInfo(){try {String myId = getRequest().getParameter("myId");MyOrder my = endOrderService.getMyOrderMyId(myId);//订单信息List<MyOrderProductBean> mylist = endOrderService.getOrderInfos(myId); //订单产品详情if(my!=null || mylist!=null){//web对象HSSFWorkbook wb = new HSSFWorkbook();//创建表头等HSSFSheet sheet = wb.createSheet(my.getOrder_title());//省略省略/.... //以下是关键HttpServletResponse response = ServletActionContext.getResponse();response.reset(); OutputStream output = getRepsonse().getOutputStream(); response.setHeader("Content-disposition", "attachment; filename=Info.xls"); response.setContentType("application/msexcel"); wb.write(output); output.close(); System.out.println("成功创建excel文件");}}catch (Exception e) {e.printStackTrace();}}
Struts2框架,这里是通过了输出流OutputStream完成对文件的创建,这里要避免可能出现的Exception,即输出流重复创建或者输出流与struts2方法返回冲突。
概要; http://blog.csdn.net/dcb_ripple/article/details/62422440
代码实例.
/** * 导出订单信息.* @author 邓成波* @date 创建时间 2017年3月16日 下午12:04:31 * @return */public void exportInfo(){try {String myId = getRequest().getParameter("myId");MyOrder my = endOrderService.getMyOrderMyId(myId);//订单信息List<MyOrderProductBean> mylist = endOrderService.getOrderInfos(myId); //订单产品详情if(my!=null || mylist!=null){//web对象HSSFWorkbook wb = new HSSFWorkbook();//创建表头等HSSFSheet sheet = wb.createSheet(my.getOrder_title());// 用于格式化单元格的数据 HSSFDataFormat format = wb.createDataFormat(); // 设置字体 (上方标题用 填写内容) HSSFFont font = wb.createFont(); font.setFontHeightInPoints((short) 11); //字体高度 font.setColor(HSSFFont.COLOR_NORMAL); //字体颜色 font.setFontName("宋体"); //字体 //表头主数据,加粗 HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setFont(font); cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平布局:居中 cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//单元格垂直居中 cellStyle.setWrapText(true);//换行 // 设置字体 (上方标题用 导航头加粗) HSSFFont fontBold = wb.createFont(); fontBold.setFontHeightInPoints((short) 11); //字体高度 //setHSSFPalette("#3366FF",7,wb);//自定义设置字体颜色 fontBold.setColor(HSSFFont.COLOR_NORMAL); //字体颜色 fontBold.setFontName("宋体"); //字体 fontBold.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 设置单元格类型 HSSFCellStyle cellStyleBold = wb.createCellStyle(); cellStyleBold.setFont(fontBold); cellStyleBold.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平布局:居中 cellStyleBold.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//单元格垂直居中 cellStyleBold.setWrapText(true);//换行 ArrayList<String[]> list = new ArrayList<String[]>(); //rowNmae名称 String[] rowsName1 = new String[]{"合同流水号:","","机构:",""+my.getCompany()+"", "客户名称:",""+my.getClient_name()+"","出货批次:",""+my.getBatch()+""}; String[] rowsName2 = new String[]{"合同号:","","负责人:",""+my.getPrincipal()+"", "项目名称:",""+my.getProject_name()+"","收货人:",""+my.getReceipt_name()+""}; list.add(rowsName1); list.add(rowsName2); String[] rowsName3 = new String[]{"erp编号","产品名称","型号","识别号","颜色","数量","合同单价","金额小计"}; list.add(rowsName3); sheet.setDefaultColumnWidth(15);//设置列默认的宽度 //sheet.setDefaultRowHeight((short) 1.5); //设置默认列高度 for (int i = 0; i < list.size(); i++) { HSSFRow row = null; if(i==2){ row = sheet.createRow(3); }else{ row = sheet.createRow(i); } row.setHeightInPoints(17);//设置字体大小 String[] rowsName = list.get(i);for(int c = 0;c<rowsName.length;c++){HSSFCell cell = row.createCell(c);cell.setCellValue(rowsName[c]);if(i==2){ cell.setCellStyle(getStyleTitle(wb));}else{if(c%2==0){cell.setCellStyle(cellStyleBold);}else{cell.setCellStyle(cellStyle);}}}} sheet.setColumnWidth((short) 1, (short)(256*20)); //设置行宽度 sheet.setColumnWidth((short) 2, (short)(256*20)); //设置行宽度 //==================表头信息 结束========================= List<Object[]> dataList = new ArrayList<Object[]>(); Object[] objs = null; for (int i = 0; i < mylist.size(); i++) { MyOrderProductBean mybean = mylist.get(i); objs = new Object[rowsName3.length]; objs[0] = mybean.getProduct_id(); //erp编号 objs[1] = mybean.getSort_Name(); //产品名称 objs[2] = mybean.getTypeName(); //产品类型名称 objs[3] = mybean.getIdentify(); //识别号 id objs[4] = mybean.getColor(); //颜色 objs[5] = mybean.getCount(); //数量 objs[6] = mybean.getClinch_money(); //合同单价 objs[7] = mybean.getClinch_money_sum(); //金额小计 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //String date = df.format(man.getModiDate()); dataList.add(objs); } for(int i = 0; i < dataList.size(); i++) { HSSFRow row =sheet.createRow(i+4); Object[] objsRow = dataList.get(i); int length = 0; for (int j = 0; j < objsRow.length; j++) {HSSFCell cell = row.createCell(j);if(objsRow[j]!=null && !objsRow[j].toString().isEmpty()){if(objsRow[j].toString().length()>length){//获取本列最高的字符长度length = objsRow[j].toString().length();}cell.setCellValue(objsRow[j].toString());}cell.setCellStyle(getStyle(wb));} //某列字数太多换行 暂时不要 /*if(length>9){ row.setHeight((short)((length%9)*265)); //这里的265代表一个字的高度 }*/} //价格合计及说明. HSSFRow row =sheet.createRow(dataList.size()+4); HSSFCell cell = row.createCell(0); cell.setCellStyle(getStyle(wb)); HSSFCell cell2 = row.createCell(1); cell2.setCellValue("合计:"); cell2.setCellStyle(getStyle(wb)); row.createCell(2).setCellStyle(getStyle(wb)); row.createCell(3).setCellStyle(getStyle(wb)); row.createCell(4).setCellStyle(getStyle(wb)); row.createCell(5).setCellStyle(getStyle(wb)); row.createCell(6).setCellStyle(getStyle(wb)); HSSFCell cell3 = row.createCell(7); cell3.setCellValue(my.getTotal_money()); cell3.setCellStyle(getStyleTitle(wb)); sheet.addMergedRegion(new CellRangeAddress(dataList.size()+4,dataList.size()+4,1,6)); // 表格说明列 HSSFRow rowContext =sheet.createRow(dataList.size()+5); HSSFCell cellContext = rowContext.createCell(0); cellContext.setCellValue("说明:"); cellContext.setCellStyle(getStyle(wb)); HSSFCell cellContext2 = rowContext.createCell(1); cellContext2.setCellValue(my.getOrder_desc()); cellContext2.setCellStyle(getStyle(wb)); rowContext.createCell(2).setCellStyle(getStyle(wb)); rowContext.createCell(3).setCellStyle(getStyle(wb)); rowContext.createCell(4).setCellStyle(getStyle(wb)); rowContext.createCell(5).setCellStyle(getStyle(wb)); rowContext.createCell(6).setCellStyle(getStyle(wb)); rowContext.createCell(7).setCellStyle(getStyle(wb)); sheet.addMergedRegion(new CellRangeAddress(dataList.size()+5,dataList.size()+5,1,7)); sheet.autoSizeColumn((short)0); //调整第一列宽度 sheet.autoSizeColumn((short)1); //调整第二列宽度 sheet.autoSizeColumn((short)2); sheet.autoSizeColumn((short)3); sheet.autoSizeColumn((short)4); sheet.autoSizeColumn((short)5); sheet.autoSizeColumn((short)6); sheet.autoSizeColumn((short)7);//sheet.addMergedRegion(new CellRangeAddress(0,0,0,3)); //合并列HttpServletResponse response = ServletActionContext.getResponse();response.reset(); OutputStream output = getRepsonse().getOutputStream(); response.setHeader("Content-disposition", "attachment; filename=Info.xls"); response.setContentType("application/msexcel"); wb.write(output); output.close(); System.out.println("成功创建excel文件");}}catch (Exception e) {e.printStackTrace();}}/** * 列表数据格式* @author 邓成波* @date 创建时间 2017年3月21日 下午4:32:13 * @param workbook* @return*/ public HSSFCellStyle getStyle(HSSFWorkbook workbook) { // 设置字体 HSSFFont font = workbook.createFont(); //设置字体名字 font.setFontName("宋体"); //字体 //设置字体大小 font.setFontHeightInPoints((short)11); //字体加粗 //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //设置样式; HSSFCellStyle style = workbook.createCellStyle(); //设置底边框; style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //设置底边框颜色; style.setBottomBorderColor(HSSFColor.BLACK.index); //设置左边框; style.setBorderLeft(HSSFCellStyle.BORDER_THIN); //设置左边框颜色; style.setLeftBorderColor(HSSFColor.BLACK.index); //设置右边框; style.setBorderRight(HSSFCellStyle.BORDER_THIN); //设置右边框颜色; style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框; style.setBorderTop(HSSFCellStyle.BORDER_THIN); //设置顶边框颜色; style.setTopBorderColor(HSSFColor.BLACK.index); //在样式用应用设置的字体; style.setFont(font); //设置自动换行; style.setWrapText(true); //设置水平对齐的样式为居中对齐; style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //设置垂直对齐的样式为居中对齐; style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); return style; } /*** 列表表头用 数据格式表头* @author 邓成波* @date 创建时间 2017年3月21日下午4:32:13* @param workbook* @return*/ public HSSFCellStyle getStyleTitle(HSSFWorkbook workbook) { //设置字体 HSSFFont font = workbook.createFont(); //设置字体名字 font.setFontName("宋体"); //字体 //设置字体大小 font.setFontHeightInPoints((short)10); //字体加粗 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //设置样式; HSSFCellStyle style = workbook.createCellStyle(); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setFillForegroundColor(IndexedColors.RED.getIndex()); style.setFillBackgroundColor(IndexedColors.RED.getIndex()); //设置底边框; style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //设置底边框颜色; style.setBottomBorderColor(HSSFColor.BLACK.index); //设置左边框; style.setBorderLeft(HSSFCellStyle.BORDER_THIN); //设置左边框颜色; style.setLeftBorderColor(HSSFColor.BLACK.index); //设置右边框; style.setBorderRight(HSSFCellStyle.BORDER_THIN); //设置右边框颜色; style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框; style.setBorderTop(HSSFCellStyle.BORDER_THIN); //设置顶边框颜色; style.setTopBorderColor(HSSFColor.BLACK.index); //在样式用应用设置的字体; style.setFont(font); //设置自动换行; style.setWrapText(false); //设置水平对齐的样式为居中对齐; style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //设置垂直对齐的样式为居中对齐; style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); return style; } /** * 设定自定义字体颜色信息* @author 邓成波* @date 创建时间 2017年3月21日 下午12:01:09 * @param str 颜色* @param index 编号* @param wb execl对象 */public void setHSSFPalette(String str,int index,HSSFWorkbook wb){ //处理把它转换成十六进制并放入一个数 int[] color=new int[3]; color[0]=Integer.parseInt(str.substring(1, 3), 16); color[1]=Integer.parseInt(str.substring(3, 5), 16); color[2]=Integer.parseInt(str.substring(5, 7), 16); //自定义颜色 HSSFPalette palette = wb.getCustomPalette(); //设置自定义颜色的下标,接下来会用到 palette.setColorAtIndex(((short) index),(byte)color[0], (byte)color[1], (byte)color[2]);}
附加:导出表名中文乱码问题,从别处找到可用.
response.setHeader("Content-disposition", "attachment; filename=中文名称.xls"); //response.setContentType("application/msexcel"); response.setContentType("application/x-download");//下面三行是关键代码,处理乱码问题 response.setCharacterEncoding("utf-8"); response.setHeader("Content-Disposition", "attachment;filename="+new String(my.getOrder_title().getBytes("gbk"), "iso8859-1")+".xls");
代码有点乱,由于格式问题,比较臃肿,仅能做参考那种。至于为什么要这么用上面的三个已经介绍的比较详细》
一. POI设置自定义的字体颜色等,经测试可行,代码中未使用 注释掉了。
- poi怎么使用自定义字体颜色 http://www.iteye.com/problems/42620
- poi设置颜色和自定义颜色 http://blog.sina.com.cn/s/blog_b0d90e8c0102v3op.html
- 颜色索引对照表 http://blog.csdn.net/for_china2012/article/details/29844661
二.调整行宽及自适应及数据转
- execl自动调整列宽 http://www.cnblogs.com/azhqiang/p/4111197.html
- 行高设置 http://blog.csdn.net/chinapi_hzh/article/details/5776119
- 公共导出execl的方法 http://blog.csdn.net/wangchangpen62/article/details/44410967
完。
嗯哼》》 不会告诉你这么点东西,整理下来弄一弄居然花了一个多小时. 宝宝心里苦
0 0
- Java 导出Excel实例代码整理(POI) 可用
- java 通过Apache poi导出excel代码demo实例
- struts2 poi导出excel实例代码下载
- POI-----POI导出Excel实例
- poi导出excel实例
- poi--excel --导出实例
- POI导出Excel实例
- POI导出Excel实例
- java poi 导出excel 部分代码
- java poi 导出excel表格 代码
- poi导出excel代码
- java poi 导出excel
- Java POI导出excel
- Java POI 导出Excel
- java poi 导出excel
- java POI导出Excel
- JAVA POI 导出excel
- JAVA POI 导出excel
- MySQL中的if
- 建立一个全数据管理的分析平台,该如何落实?
- HTTP文件断点续传的原理
- 导致页面顶部空白一行解决方法
- navigator.userAgent 判断浏览器类型
- Java 导出Excel实例代码整理(POI) 可用
- 打包/发包工具-需求分析一
- C++读XML文件
- web前端之列表(五)————有序无序自定义
- 4款Bootstrap在线富文本编辑器
- PB高级用法-String(long,"address")
- Activity四种启动模式
- 解决The current branch is not configured for pull No value for key branch.master.merge found in config
- 117-epoll(基础)