`
月亮不懂夜的黑
  • 浏览: 155980 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用POI导出Excel自适应列宽的实现

阅读更多

使用POI导出Excel时,涉及到如何自适应列宽的问题。方法如下

/**
	 * 下载excel文件,内容使用MAP存放
	 * 
	 * @param response
	 * @param headName
	 * @param tableHead
	 * @param tableBody
	 * @throws IOException
	 */
	public static void downloadExcelMap(HttpServletResponse response, String headName, List<String> tableHead,
			List<Map<Object, Object>> tableBody) throws IOException {
		headName=StringUtils.replaceAllSpecial(headName);
		// 1:创建一个workbook
		HSSFWorkbook workbook = new HSSFWorkbook();

		// 创建样式
		HSSFCellStyle style = workbook.createCellStyle();
		Font font = workbook.createFont();
		font.setBoldweight(Font.BOLDWEIGHT_BOLD); // 粗体
		style.setFont(font);
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
		style.setBorderTop((short) 1);
		style.setBorderBottom((short) 1);
		style.setBorderLeft((short) 1);
		style.setBorderRight((short) 1);
		style.setWrapText(true);

		// 设置合计样式
		HSSFCellStyle style1 = workbook.createCellStyle();
		style1.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
		style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
		style1.setBorderTop((short) 1);
		style1.setBorderBottom((short) 1);
		style1.setBorderLeft((short) 1);
		style1.setBorderRight((short) 1);
		style.setWrapText(true);

		HSSFSheet sheet = (HSSFSheet) workbook.createSheet(headName);
		// 2:合并单元格,表头。并设置值
		CellRangeAddress cra = new CellRangeAddress(0, 0, 0, tableHead.size() - 1);
		sheet.addMergedRegion(cra);
		HSSFRow row = sheet.createRow(0);
		HSSFCell tableName = row.createCell(0);
		tableName.setCellStyle(style);
		tableName.setCellValue(headName);

		//存储最大列宽
		Map<Integer,Integer> maxWidth = new HashMap<Integer,Integer>();
		
		// 3:设置表head
		HSSFRow row1 = sheet.createRow(1);
		for (int i = 0; i < tableHead.size(); i++) {
			Cell createCell = row1.createCell(i);
			createCell.setCellValue(tableHead.get(i));
			createCell.setCellStyle(style);
			maxWidth.put(i,createCell.getStringCellValue().getBytes().length  * 256 + 200);
		}
		// 4:表格内容
		for (int i = 0; i < tableBody.size(); i++) {
			HSSFRow rows = sheet.createRow(i + 2);
			int j = 0;
			for (Map.Entry<Object, Object> entry : tableBody.get(i).entrySet()) {
				HSSFCell createCell = rows.createCell(j);
				if(PropertyUtil.objectNotEmpty(entry.getValue())){
					createCell.setCellValue(entry.getValue().toString());
				}else{
					createCell.setCellValue("");
				}
				int length = createCell.getStringCellValue().getBytes().length  * 256 + 200;
		        //这里把宽度最大限制到15000
		        if (length>15000){
		            length = 15000;
		        }
				maxWidth.put(j,Math.max(length,maxWidth.get(j)));
				j++;
				createCell.setCellStyle(style1);
			}
		}
		
		// 列宽自适应
		for (int i = 0; i < tableHead.size(); i++) {
			sheet.setColumnWidth(i,maxWidth.get(i));
		}

		// 5:设置头
		response.setHeader("Content-disposition",
				"attachment; filename=" + new String(headName.getBytes("GB2312"), "ISO8859-1") + ".xls");
		// 6:设置头类型
		response.setContentType("application/vnd.ms-excel");
		
		// 7:写出
		OutputStream toClient = response.getOutputStream();
		workbook.write(toClient);
		toClient.flush();
		toClient.close();

	}

 

注意:以上代码有15000的限制,原因是Excel限制最大宽度为15000。所以,在这里我们除了这个宽度处理外,还需要设置单元格自动换行

style.setWrapText(true);

 

 简书相关

分享到:
评论

相关推荐

    java使用POI导出 Excel工具类

    java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。

    POI导出Excel文件

    以下是一个简化的示例,演示了如何使用POI导出Excel: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io....

    java_poi实现excel导入导出

    在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java POI Java POI 是一个开源的 Java 库,由 Apache 软件基金会维护。它提供了一系列的 API,用于处理 Microsoft Office 文件...

    POI的EXCEL导出,自动换行

    本文将详细介绍如何使用Apache POI实现Excel的导出功能,并在此基础上实现自动换行。 #### 一、Apache POI简介 Apache POI是一个流行的Java库,用于创建和维护Microsoft Office文档。它包括对Word(DOCX),Excel...

    java 使用poi导出excel工具类

    java的poi的导入工具类,只需要传入两个arrayList,一个是execl的标题,一个是ececl的数据,就可以直接导出到execl里面,支持最新的execl,全新封装的,让每一个人都会使用poi导出execl!

    POI导出Excel表格

    在这个“POI导出Excel表格”的实例中,我们将深入探讨如何利用Apache POI进行Excel文件的导入与导出操作。 首先,我们需要在项目中集成Apache POI库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```...

    使用POI,实现excel文件导出,图片url导出文件,图片和excel文件导出压缩包

    本文将深入探讨如何使用POI库来实现Excel文件的导出,以及如何将图片URL转换为图片文件并与其他文件一起打包成压缩包。 首先,让我们了解一下Apache POI。POI是Java开发者的开源API,它允许程序创建、修改和显示...

    poi导出根据模板导出excel和简单列表导出excel源码

    总结来说,"poi-excel-handler" 是一个使用 Apache POI 实现的工具,它提供了根据模板导出和简单列表导出 Excel 的功能。通过利用 POI 的 API,它能够有效地处理大量数据,同时保持代码的可读性。在实际项目中,这样...

    poi导出excel参考方法

    在上面的代码中,我们可以看到使用POI导出Excel文档的方法。首先,我们需要创建一个Workbook对象,然后使用Workbook对象创建一个Sheet对象。接着,我们可以使用Sheet对象将数据写入Excel文档中。最后,我们可以使用...

    poi导出excel生成下拉列表

    poi作为导出excel常用的工具,方便快捷。对于excel指定下拉列表的列,如何生成呢?本文提供如何生成下拉列表的excel列

    使用poi方式导出excel(分多个sheet导出)

    本教程将详细介绍如何利用Apache POI库来实现使用多个Sheet(工作簿)导出一个Excel文件的功能。 一、Apache POI简介 Apache POI 是一个开源项目,提供API来读取、写入和修改Microsoft Office文件格式,如Word(DOC...

    springboot+poi导出指定格式Excel模板

    springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式...

    java poi导出excel

    下面将详细介绍如何使用Java POI来实现Excel的导出。 1. **引入依赖** 在Java项目中使用POI,首先需要在项目的构建文件(如Maven的pom.xml或Gradle的build.gradle)中添加对应的依赖。对于Maven用户,可以在pom....

    使用poi从数据库导出excel表的示例

    在本示例中,我们将探讨如何使用Apache POI库从数据库导出数据到Excel表格,这在数据分析、报告生成或批量数据处理场景中非常常见。Apache POI是一个开源项目,它允许Java开发者创建、修改和显示Microsoft Office...

    Java实现POI导出Excel

    Java实现POI导出Excel是Java开发者常用的一种技术,用于生成和操作Microsoft Office Excel文件。在Java中,Apache POI库提供了对微软Office文档格式的支持,包括读取和写入Excel文件。这篇博客文章...

    POI使用Excel模板文件循环输出行并导出Excel

    在这个特定的例子中,我们将讨论如何使用POI库基于一个Excel模板文件循环输出数据行,并将结果导出为新的Excel文件。 首先,我们需要理解POI库的基本概念。POI提供了HSSF(Horizontally SpreadSheet Format)和XSSF...

    poi导出excel需要的jar

    首先,要实现POI导出Excel的功能,你需要下载Apache POI相关的JAR文件。这些文件通常包括以下核心组件: 1. **poi-ooxml-schemas**: 包含了与Office Open XML(OOXML)格式相关的XML架构定义,是处理OOXML文档格式...

    java导出excel POI jar包

    本篇文章将深入讲解如何使用POI库在Java中实现Excel的导出功能,以及涉及到的相关jar包及其作用。 首先,`poi-ooxml-schemas-3.15-beta1.jar`是POI库中的XML schema定义,用于解析和创建符合Office Open XML标准的...

    POI导出 POI导出 POI导出

    POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI...

    Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)

    Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)

Global site tag (gtag.js) - Google Analytics