POI导出案例

  1. 引用POI依赖
	<!-- 导出为Excel所需依赖 -->
      <dependency>
          <groupId>org.apache.poi</groupId>
          <artifactId>poi</artifactId>
          <version>3.9</version>
      </dependency>
      <dependency>
          <groupId>org.apache.poi</groupId>
          <artifactId>poi-ooxml</artifactId>
          <version>3.9</version>
      </dependency>

  2. 具体的实现

 

	/**
	 * POI方式导出
	 * @param list 数据
	 * @param exportFields 绑定列数组,0: 表头,1: 数据key
	 * @param response
	 */
	public static void exportExcel(List list,String[] exportFields,HttpServletResponse response) {


		Workbook wb = new XSSFWorkbook();
		//设置单元格式
		Font font = wb.createFont();
		font.setColor(Font.COLOR_NORMAL);
		CellStyle cellStyle = wb.createCellStyle();
		cellStyle.setFont(font);
		Sheet sheet = wb.createSheet("测试数据");
		// 首行冻结
		sheet.createFreezePane( 0, 1, 0, 1 );

		String[]headers = exportFields[0].split(",");
		// 创建标题行
		Row titleRow = sheet.createRow(0);

		for (int i = 0; i < headers.length; i++) {
			Cell cell = titleRow.createCell(i);
			cell.setCellValue(headers[i]);
		}
		String[]keys = exportFields[1].split(",");
		for (int i = 0; i < list.size(); i++) {
			Row currentRow = sheet.createRow(i+1);
			// 获取当前行的数据
			Object o = list.get(i);
			for (int j = 0; j < keys.length; j++) {
				// 设置列宽
				// sheet.setColumnWidth(j, 4100);
				Cell cell = currentRow.createCell(j);
				cell.setCellStyle(cellStyle);
				//每个单元格的值目前做 String 处理
				// cell.setCellType(CellType.STRING);
				// cell.setCellValue(ReflectUtil.getFieldValue(o, keys[j]).toString());
				Object fieldValue = ReflectUtil.getFieldValue(o, keys[j]);
				if (ObjectUtil.isNotEmpty(fieldValue)){
					cell.setCellValue(fieldValue.toString());
				}

			}
		}
		// writeToExcel(response, wb, "导出数据列表");

		// 生成Excel文件
		try (FileOutputStream outputStream = new FileOutputStream("E:\\项目\\work\\宁波\\工作\\2024\\7\\导出\\data.xlsx")) {
			wb.write(outputStream);
			outputStream.flush();
		}catch (Exception e) {
			logger.error(e);
		}


	}

	public void writeToExcel(HttpServletResponse response, Workbook wb, String fileName) {
		OutputStream os = null;
		try {
			response.setContentType("application/vnd.ms-excel");
			response.setCharacterEncoding("UTF-8");
			response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
			response.setHeader("Content-Disposition", String.format("attachment; filename=%s", new String(URLEncoder.encode(fileName + ".xlsx" , "UTF-8")
					.getBytes("UTF-8"), "UTF-8")));
			os = response.getOutputStream();
			wb.write(os);
			os.flush();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (os != null) {
				try {
					os.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	public static void main(String[] args) {
		List<RegulatorySettlementReport> items = new ArrayList<>();
		// 表头+数据key对应,利用反射赋值
		String[] exportFields = {
				"结单状态,监管结算单号,结算发起时间,入库日期,出库日期,在库状态,仓库,货主,客户方,入库重量,入库金额,出库重量,出库金额,采销差价,铝拓服务费率,铝拓服务收益,采购付款日期,销售回款日期,入库码单号,出库单号,入库批号,品名,牌号,规格,厂家,重量,数量单位,重量单位,货物编号",
				"goodsAlledName,regulatorySettlementNo,settlementLaunchDate,inWhsDate,outWhsDate,stockStatusName,whsName,goodsOwnerName,customerName,inWhsAmount,inWhsMoney,outAmount,invyOutMoney,purchaseSalesPriceDiff,serviceRateName,serviceRevenue,purchasePaymentDate,salesCollectionDate,inWhsMdNo,outWhsNo,inWhsLotNo,brandName,texture,specification,producingName,invyOutAmount,quantityUnitName,weightUnitName,packageNo"
		};
		RegulatorySettlementReport report1 = new RegulatorySettlementReport();
		report1.setGoodsAlledName("未结单");
		report1.setRegulatorySettlementNo("001");
		items.add(report1);

		RegulatorySettlementReport report2 = new RegulatorySettlementReport();
		report2.setGoodsAlledName("已结单");
		report2.setRegulatorySettlementNo("002");
		items.add(report2);

		exportExcel(items,exportFields,null);
	}
	
  

  

 

posted @ 2024-07-10 13:59  泡沫幻影  阅读(15)  评论(0编辑  收藏  举报