84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
我现在要做一个execl的导出,所用的.jar我已经弄好了,现在我不知道要怎么实现这个功能,还请细致回答。不要凑数的评论。谢谢大家。 网上的例子都是 半截拉快的 实在不知从哪开始。
我点击按钮之后,到后台,然后怎么弄。。。excel里面的列名字都是自己根据需要写死的吗,还是怎么弄,需要展现的数据,是在先查 还是已经存在一个集合里面直接循环出来了,,,
闭关修行中......
poi version.
poi
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency>
Hello World Example
import java.io.FileOutputStream; import java.util.HashMap; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellUtil; /** * @author Kevin Zou (kevinz@weghst.com) */ public class HelloWorld { public static void main(String[] args) throws Exception { Workbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet("HELLO"); Map<String, Object> properties = new HashMap<>(); // border around a cell properties.put(CellUtil.BORDER_TOP, CellStyle.BORDER_MEDIUM); properties.put(CellUtil.BORDER_BOTTOM, CellStyle.BORDER_MEDIUM); properties.put(CellUtil.BORDER_LEFT, CellStyle.BORDER_MEDIUM); properties.put(CellUtil.BORDER_RIGHT, CellStyle.BORDER_MEDIUM); // Give it a color (RED) properties.put(CellUtil.TOP_BORDER_COLOR, IndexedColors.RED.getIndex()); properties.put(CellUtil.BOTTOM_BORDER_COLOR, IndexedColors.RED.getIndex()); properties.put(CellUtil.LEFT_BORDER_COLOR, IndexedColors.RED.getIndex()); properties.put(CellUtil.RIGHT_BORDER_COLOR, IndexedColors.RED.getIndex()); // Apply the borders to the cell at B2 Row row = sheet.createRow(1); Cell cell = row.createCell(1); for (Map.Entry<String, Object> e : properties.entrySet()) { CellUtil.setCellStyleProperty(cell, workbook, e.getKey(), e.getValue()); } cell.setCellValue("First"); // 单元格值 // Apply the borders to a 3x3 region starting at D4 for (int ix = 3; ix <= 5; ix++) { row = sheet.createRow(ix); for (int iy = 3; iy <= 5; iy++) { cell = row.createCell(iy); for (Map.Entry<String, Object> e : properties.entrySet()) { CellUtil.setCellStyleProperty(cell, workbook, e.getKey(), e.getValue()); } cell.setCellValue(ix + " * " + iy); // 单元格值 } } FileOutputStream fileOut = new FileOutputStream("C:/helloworld.xls"); workbook.write(fileOut); fileOut.close(); System.out.println("The end."); } }
poi Quick Guide
Just use jxl, there are many case demo cases on the Internet
For example:
public void QueryExport(){ //查询你需要的数据 list = yourService.selectExportData(yourParams); //封装成你需要的格式数据 List<Map<String,String>> mlist = new ArrayList<Map<String,String>>(); Iterator it = list.iterator(); while(it.hasNext()){ BABillProjectStatistics dp = (BABillProjectStatistics) it.next(); Map<String,String> map = dp.toMap(); mlist.add(map); } String fileName = "当前文件名称"; String sheetName = "ExcelSheetName"; //定义列头 List<String> colList = new ArrayList<String>(); colList.add("项目编号"); //如果表列头为动态数据,直接按固定格式,封装在mlist中即可。 JxlExcelUtils.exportexcle(httpServletResponse, fileName, mlist, sheetName, colList); }
Help class:
import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletResponse; import jxl.SheetSettings; import jxl.Workbook; import jxl.format.Alignment; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.format.Colour; import jxl.format.VerticalAlignment; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; /** * jxl导出excel * @author jamboree * @date 2013-11-28 */ public class JxlExcelUtils { /** * @author * @param objData 导出内容数组 * @param sheetName 导出工作表的名称 * @param columns 导出Excel的表头数组 * @return */ public static int exportToExcel(HttpServletResponse response, List<Map<String, String>> objData, String sheetName,List<String> columns) { int flag = 0; //声明工作簿jxl.write.WritableWorkbook WritableWorkbook wwb; try { //根据传进来的file对象创建可写入的Excel工作薄 OutputStream os = response.getOutputStream(); wwb = Workbook.createWorkbook(os); /* * 创建一个工作表、sheetName为工作表的名称、"0"为第一个工作表 * 打开Excel的时候会看到左下角默认有3个sheet、"sheet1、sheet2、sheet3"这样 * 代码中的"0"就是sheet1、其它的一一对应。 * createSheet(sheetName, 0)一个是工作表的名称,另一个是工作表在工作薄中的位置 */ WritableSheet ws = wwb.createSheet(sheetName, 0); SheetSettings ss = ws.getSettings(); ss.setVerticalFreeze(1);//冻结表头 WritableFont font1 =new WritableFont(WritableFont.createFont("宋体"),11 ,WritableFont.BOLD); WritableFont font2 =new WritableFont(WritableFont.createFont("宋体"),11 ,WritableFont.NO_BOLD); WritableCellFormat wcf = new WritableCellFormat(font1); WritableCellFormat wcf2 = new WritableCellFormat(font2); WritableCellFormat wcf3 = new WritableCellFormat(font2);//设置样式,字体 //创建单元格样式 //WritableCellFormat wcf = new WritableCellFormat(); //背景颜色 wcf.setBackground(jxl.format.Colour.LIGHT_GREEN); wcf.setAlignment(Alignment.CENTRE);//平行居中 wcf.setVerticalAlignment(VerticalAlignment.CENTRE);//垂直居中 wcf3.setAlignment(Alignment.CENTRE);//平行居中 wcf3.setVerticalAlignment(VerticalAlignment.CENTRE);//垂直居中 wcf3.setBackground(Colour.WHITE); wcf3.setBorder(Border.ALL, BorderLineStyle.THIN); wcf2.setAlignment(Alignment.CENTRE);//平行居中 wcf2.setVerticalAlignment(VerticalAlignment.CENTRE);//垂直居中 /* * 这个是单元格内容居中显示 * 还有很多很多样式 */ wcf.setAlignment(Alignment.CENTRE); //判断一下表头数组是否有数据 if (columns != null && columns.size() > 0) { //循环写入表头 for (int i = 0; i < columns.size(); i++) { /* * 添加单元格(Cell)内容addCell() * 添加Label对象Label() * 数据的类型有很多种、在这里你需要什么类型就导入什么类型 * 如:jxl.write.DateTime 、jxl.write.Number、jxl.write.Label * Label(i, 0, columns[i], wcf) * 其中i为列、0为行、columns[i]为数据、wcf为样式 * 合起来就是说将columns[i]添加到第一行(行、列下标都是从0开始)第i列、样式为什么"色"内容居中 */ ws.addCell(new Label(i, 0, columns.get(i), wcf)); } //判断表中是否有数据 if (objData != null && objData.size() > 0) { //循环写入表中数据 for (int i = 0; i < objData.size(); i++) { //转换成map集合{activyName:测试功能,count:2} Map<String, String> map = (Map<String, String>)objData.get(i); //循环输出map中的子集:既列值 int j=0; for(Object o:map.keySet()){ //ps:因为要“”通用”“导出功能,所以这里循环的时候不是get("Name"),而是通过map.get(o) ws.addCell(new Label(j,i+1,String.valueOf(map.get(o)),wcf3)); j++; } } }else{ flag = -1; } //写入Exel工作表 wwb.write(); //关闭Excel工作薄对象 wwb.close(); //关闭流 os.flush(); os.close(); os =null; } }catch (IllegalStateException e) { System.err.println(e.getMessage()); } catch (Exception ex) { flag = 0; ex.printStackTrace(); } return flag; }
/** * 下载excel * @author * @param response * @param filename 文件名 ,如:20110808.xls * @param listData 数据源 * @param sheetName 表头名称 * @param columns 列名称集合,如:{物品名称,数量,单价} */ public static void exportexcle(HttpServletResponse response,String filename,List<Map<String, String>> listData,String sheetName,List<String> columns) { //调用上面的方法、生成Excel文件 response.setContentType("application/vnd.ms-excel"); //response.setHeader("Content-Disposition", "attachment;filename="+filename); try { response.setHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("gb2312"), "ISO8859-1") + ".xls"); exportToExcel(response, listData, sheetName, columns); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } }
}
Direct course, detailed enough
I currently export via JS (Chrome), but there is a tool class that uses Java reflection to export Excel, which I would like to share with the subject~
Java POI export EXCEL classic implementation Java export ExcelL
poi
version.Hello World Example
poi Quick Guide
Just use jxl, there are many case demo cases on the Internet
For example:
Help class:
}
Direct course, detailed enough
I currently export via JS (Chrome), but there is a tool class that uses Java reflection to export Excel, which I would like to share with the subject~
Java POI export EXCEL classic implementation Java export ExcelL