利用poi导出excel,并自动生成表头

之前导出excel大量重复代码,自己输入excel表头,一行一行写入太麻烦了。最新发现只要配置查询的sql语句,其他代码无需改动。废话不说了,贴代码。

注:使用原生的jdbc查询。

		Workbook wb = new SXSSFWorkbook(100);// 声明一个工作薄
		CellStyle style = wb.createCellStyle();  // 一个样式  
		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);    //设置垂直居中 
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平居中
		Font headerFont = wb.createFont(); //创建字体样式
		headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//字体加粗
		headerFont.setFontName("Times New Roman");  //设置字体类型  
		headerFont.setFontHeightInPoints((short) 8);    //设置字体大小  
		style.setFont(headerFont);    //为标题样式设置字体样式  
		/*    style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框  
        	style.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框  
        	style.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框  
        	style.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框 
		 */       
		 style.setWrapText(true);
		 Sheet sheet = wb.createSheet(sheetName);//声明工作薄里中一个工作表的名字
		 sheet.setDefaultColumnWidth(20);//给工作一个默认长度
		 Row row = sheet.createRow(0); //创建第一行(也可以称为表头)
		 //通过传过来的sql获得数据
		 RowSet rowSet = //执行原生sql,是为了获得列的信息ResultSetMetaData
		 ResultSetMetaData  columnNames =  rowSet.getMetaData();
		 int columnValues =  columnNames.getColumnCount();
		 for(int i=0;i<columnValues;i++){
			 Cell cell = row.createCell(i);
			 cell.setCellStyle(style);
			 cell.setCellValue(columnNames.getColumnName(i+1));
		 }
		 int rowNo=1;
		 /*   HSSFFont contextFont = (HSSFFont) wb.createFont(); //创建字体样式
        		contextFont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//字体加粗
        	   style.setFont(contextFont);*/
		 while(rowSet.next()) {
			 row = sheet.createRow(rowNo);
			 for(int columnNo=0;columnNo<columnValues;columnNo++){
				 Cell cell = row.createCell(columnNo);
				 // cell.setCellStyle(style);
				 Object columnValue = rowSet.getObject(columnNo+1);
				 if(columnValue==null){
					 continue;
				 }
				 if(columnValue instanceof String){
					 cell.setCellValue(rowSet.getString(columnNo+1));
				 }else if(columnValue instanceof Integer){
					 cell.setCellValue(rowSet.getInt(columnNo+1));
				 }else if(columnValue instanceof Double){
					 cell.setCellValue(rowSet.getDouble(columnNo+1));
				 }else if(columnValue instanceof Date){
					 cell.setCellValue(DateUtils.Date2String(rowSet.getDate(columnNo+1), "yyyy-MM-dd"));
				 }else if(columnValue instanceof TIMESTAMP){
					 cell.setCellValue(rowSet.getTimestamp(columnNo+1));
				 }else if(columnValue instanceof BigDecimal){
					 cell.setCellValue(rowSet.getBigDecimal(columnNo+1).doubleValue());
				 }
			 }
			 rowNo++;
		 }
		 File dstFile = File.createTempFile(String.valueOf(System.currentTimeMillis()), ".xlsx");
		 dstFile.deleteOnExit();//程序退出时删除文件
		 OutputStream output=new FileOutputStream(dstFile);
		 wb.write(output);//写入文件
		 output.flush();
		 output.close();//关闭流


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值