欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java实现excel的生成,利用poi jar包实现excel的生成

程序员文章站 2022-04-30 14:01:41
...

利用工具就是站在牛人的肩膀上。现在看看利用poi jar包达成的效果吧

java实现excel的生成,利用poi jar包实现excel的生成

内容给注释掉了,简单的实现了标题以及表格标题和内容的实现(包括不一样的格式)

 

直接上传代码吧

/**
	 * 生成excel 包括订单细节
	 * @param path excel路径(所在的目录)
	 * @param ids  id的字符串,用逗号隔开。
	 */
	private static void createExcelTwo(String path,AList list){
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd-HHmmss");
		String date="_"+sdf.format(new Date());
		String fileTwoName="OrderDetails"+date+".xls";
		String excelTwo=path+"\\"+fileTwoName;
		try {
			File fileOne = new File(excelTwo);// 创建第一个excel文件对象
			FileOutputStream fOut = null;
			// 创建一个新的HSSFWorkbook对象
			HSSFWorkbook workbook = new HSSFWorkbook();
			// 创建一个Excel的工作表,可以指定工作表的名字
			HSSFSheet sheet = workbook.createSheet("订单明细");
			workbook.setSheetName(0, "订单明细",(short)1);//解决sheet名中文乱码问题
			// 创建字体,红色、粗体
			HSSFFont font = workbook.createFont();
			font.setColor(HSSFFont.COLOR_NORMAL);
			font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
			
			font.setFontHeight((short)5);;
			font.setFontName("宋体");
	        font.setFontHeightInPoints((short) 20);
			// 创建单元格的格式,如居中、左对齐等(标题样式)
		   HSSFCellStyle style = workbook.createCellStyle(); // 样式对象   
	       style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直   
	       style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平   
	       style.setFont(font);
	       //表头字体
	       HSSFFont fontContent = workbook.createFont();
	       fontContent.setColor(HSSFFont.COLOR_NORMAL);
	       fontContent.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
	       fontContent.setFontHeight((short)5);;
	       fontContent.setFontName("宋体");
	       fontContent.setFontHeightInPoints((short) 10);
	        //表格内容字体
	       HSSFFont fontSubstance = workbook.createFont();
	       fontSubstance.setColor(HSSFFont.COLOR_NORMAL);
	       fontSubstance.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
	       fontSubstance.setFontHeight((short)5);;
	       fontSubstance.setFontName("宋体");
	       fontSubstance.setFontHeightInPoints((short) 10);
	       
	       //表格外部样式
	       HSSFCellStyle styleContent = workbook.createCellStyle(); // 样式对象   
	       styleContent.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直   
	       styleContent.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平   
	       styleContent.setFont(fontContent);
	       
	       //表格内容样式
	       HSSFCellStyle styleSubstance = workbook.createCellStyle(); // 样式对象   
	       styleSubstance.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直   
	       styleSubstance.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平   
	       styleSubstance.setFont(fontSubstance);
	       HSSFRow row = sheet.createRow((short) 0); 
	       //合并单元格,前提是单元格要有(前3行10列合并)
           sheet.addMergedRegion(new Region(0, (short) 0, 2, (short) 9));   
           HSSFCell ce = row.createCell((short) 0);   
           ce.setEncoding(HSSFCell.ENCODING_UTF_16);// 中文处理   
           ce.setCellValue("订单明细"); // 表格的第一行第一列显示的数据   
           ce.setCellStyle(style); // 样式,居中   
           HSSFRow row2 = sheet.createRow((short) 3); //表格第4行
           ImpApiReturn.createExcelCell(row2,0,1,styleContent,"订单ID");
           ImpApiReturn.createExcelCell(row2,1,1,styleContent,"订单编号");
           ImpApiReturn.createExcelCell(row2,2,1,styleContent,"客户ID");
           ImpApiReturn.createExcelCell(row2,3,1,styleContent,"客户名称");
           ImpApiReturn.createExcelCell(row2,4,1,styleContent,"部门名称");
           ImpApiReturn.createExcelCell(row2,5,1,styleContent,"产品名称");
           ImpApiReturn.createExcelCell(row2,6,1,styleContent,"销售日期");
           ImpApiReturn.createExcelCell(row2,7,1,styleContent,"合同金额");
           ImpApiReturn.createExcelCell(row2,8,1,styleContent,"税率");
           ImpApiReturn.createExcelCell(row2,9,1,styleContent,"税后金额");
           for(int i=0;i<list.length();i++){
        	   HSSFRow rows = sheet.createRow((short) i+4);//表格内容是从第5行开始,每循环一次增加一行
        	    //订单id
        	   ImpApiReturn.createExcelCell(rows,0,1,styleSubstance,list.get(i).get("id")+"");
        	   //订单编号
        	   ImpApiReturn.createExcelCell(rows,1,1,styleSubstance,list.get(i).get("order_no")+"");
        	   //客户ID
        	   ImpApiReturn.createExcelCell(rows,2,1,styleSubstance,list.get(i).get("customer_id")+"");
        	   //客户名称
        	   ImpApiReturn.createExcelCell(rows,3,1,styleSubstance,list.get(i).get("customerName")+"");
        	   //部门名称
        	   ImpApiReturn.createExcelCell(rows,4,1,styleSubstance,list.get(i).get("deptname")+"");
        	   //产品名称
        	   ImpApiReturn.createExcelCell(rows,5,1,styleSubstance,list.get(i).get("product")+"");
        	   //销售日期
        	   ImpApiReturn.createExcelCell(rows,6,1,styleSubstance,list.get(i).get("order_date")+"");
        	   //合同金额
        	   ImpApiReturn.createExcelCell(rows,7,1,styleSubstance,list.get(i).get("contract_money")+"");
        	   //税率
        	   ImpApiReturn.createExcelCell(rows,8,1,styleSubstance,list.get(i).get("customer_rate")+"");
        	   //税后金额
        	   ImpApiReturn.createExcelCell(rows,9,1,styleSubstance,"税后金额:8.88");
        	   
        	   //更新订单的导出状态 改为已导出
        	   DataHelper.Execute(LoadUtil.LoadTable("oms_order"),"update ds_oms_order set import_state=2 where id=%s", list.get(i).get("id"));
           }
		fOut = new FileOutputStream(fileOne);
		workbook.write(fOut);
		fOut.flush();
		fOut.close();// 操作结束,关闭文件
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
/**
	 * 创建excel单元格
	 * 
	 * @param rows
	 * @param col
	 * @param code
	 * @param style
	 * @param contents
	 */
	public static void createExcelCell(HSSFRow rows, int col, int code,
			HSSFCellStyle style, String contents) {
		HSSFCell cell1 = rows.createCell((short) col);
		cell1.setEncoding((short)code);
		cell1.setCellValue(contents);
		cell1.setCellStyle(style);
	}

 

代码里的注释写的也比较详细了。

下面简单讲解下:

 一:excel里面有三种不同的格式。1.订单明细 2.一排标题3.表格内容。所以要设置三种不同的字体。也就有不同的三种样式。

二:创建excel步骤:1.创建输出流,将内容输出到excel文件中:File fileOne = new File(excelTwo);// 创建第一个excel文件对象
                                                                                       FileOutputStream fOut = null;

                            2.创建excel实体    HSSFWorkbook workbook = new HSSFWorkbook();

                           3.创建sheet实体    HSSFSheet sheet = workbook.createSheet("订单明细");

                              解决sheet 中文乱码问题:  workbook.setSheetName(0, "订单明细",(short)1);//解决sheet名中文乱码问题

                           4.然后创建行row       HSSFRow row = sheet.createRow((short) 0); //第一行

                           5.由行来创建该行的列(即单元格)   HSSFCell ce = row.createCell((short) 0);   //第一行的第一列

                          6.比如你想合并n个单元格 :sheet.addMergedRegion(new Region(0, (short) 0, 2, (short) 9));

                                  sheet为sheet实体,四个参数解释下:0从0行开始,//参数为int

                                                                                             (short)0从0列开始//类型为short

                                                                                           2 到第三行//参数为int

                                                                                          (short)9为到第10列//参数为short

                                  上述就是将0到三行,0到10列合并为一个单元格。就是我的"订单明细"

                         7,设置好单元格后,接下来就是给单元格设置样式,设置内容等。可以参照代码里面

                        8.将该excel对象用流输出到excel文件中去 fOut = new FileOutputStream(fileOne);
                                                                                           workbook.write(fOut);
                                                                                           fOut.flush();
                                                                                           fOut.close();// 操作结束,关闭流

Ok,基本就这些了。如有错误或者不够好的地方,欢迎讨论

关于poi jar包下载地址:

https://download.csdn.net/download/echohuangshihuxue/10613610