- 浏览: 138766 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
zheng_zhimeng:
这个版本在linux的版本下有问题,亲们用的没有问题么
文档展示:IcePDF 将PDF转换为图片 -
yuming.xiao:
转换的某些图片,有些模糊。不知道楼主遇到这个问题没有
文档展示:IcePDF 将PDF转换为图片 -
zenghongqing:
您好,请教您一个问题://cell内容字符串总宽度 doub ...
Java POI Excel 行高自适应 -
xiang37:
http://xiva.iteye.com/blog/2066 ...
视频分割项目预研 -
I白I:
怎么还配置数据库了?
视频分割项目预研
在Excel处理的过程中,可能有需要用到行高自适应的时候。
下面贴出用POI实现Excel行高自适应的代码。
该代码可以处理一行Excel按内容自适应高度。可以处理合并单元格。
上代码:
下面贴出用POI实现Excel行高自适应的代码。
该代码可以处理一行Excel按内容自适应高度。可以处理合并单元格。
上代码:
/** * 根据行内容重新计算行高 * @param row */ public static void calcAndSetRowHeigt(HSSFRow sourceRow) { for (int cellIndex = sourceRow.getFirstCellNum(); cellIndex <= sourceRow.getPhysicalNumberOfCells(); cellIndex++) { //行高 double maxHeight = sourceRow.getHeight(); HSSFCell sourceCell = sourceRow.getCell(cellIndex); //单元格的内容 String cellContent = getCellContentAsString(sourceCell); if(null == cellContent || "".equals(cellContent)){ continue; } //单元格的宽高及单元格信息 Map<String, Object> cellInfoMap = getCellInfo(sourceCell); Integer cellWidth = (Integer)cellInfoMap.get("width"); Integer cellHeight = (Integer)cellInfoMap.get("height"); if(cellHeight > maxHeight){ maxHeight = cellHeight; } System.out.println("单元格的宽度 : " + cellWidth + " 单元格的高度 : " + maxHeight + ", 单元格的内容 : " + cellContent); HSSFCellStyle cellStyle = sourceCell.getCellStyle(); HSSFFont font = cellStyle.getFont(sourceRow.getSheet().getWorkbook()); //字体的高度 short fontHeight = font.getFontHeight(); //cell内容字符串总宽度 double cellContentWidth = cellContent.getBytes().length * 2 * 256; //字符串需要的行数 不做四舍五入之类的操作 double stringNeedsRows =(double)cellContentWidth / cellWidth; //小于一行补足一行 if(stringNeedsRows < 1.0){ stringNeedsRows = 1.0; } //需要的高度 (Math.floor(stringNeedsRows) - 1) * 40 为两行之间空白高度 double stringNeedsHeight = (double)fontHeight * stringNeedsRows; //需要重设行高 if(stringNeedsHeight > maxHeight){ maxHeight = stringNeedsHeight; //超过原行高三倍 则为5倍 实际应用中可做参数配置 if(maxHeight/cellHeight > 5){ maxHeight = 5 * cellHeight; } //最后取天花板防止高度不够 maxHeight = Math.ceil(maxHeight); //重新设置行高 同时处理多行合并单元格的情况 Boolean isPartOfRowsRegion = (Boolean)cellInfoMap.get("isPartOfRowsRegion"); if(isPartOfRowsRegion){ Integer firstRow = (Integer)cellInfoMap.get("firstRow"); Integer lastRow = (Integer)cellInfoMap.get("lastRow"); //平均每行需要增加的行高 double addHeight = (maxHeight - cellHeight)/(lastRow - firstRow + 1); for (int i = firstRow; i <= lastRow; i++) { double rowsRegionHeight =sourceRow.getSheet().getRow(i).getHeight() + addHeight; sourceRow.getSheet().getRow(i).setHeight((short)rowsRegionHeight); } }else{ sourceRow.setHeight((short)maxHeight); } } System.out.println("字体高度 : " + fontHeight + ", 字符串宽度 : " + cellContentWidth + ", 字符串需要的行数 : " + stringNeedsRows + ", 需要的高度 : " + stringNeedsHeight + ", 现在的行高 : " + maxHeight); System.out.println(); } } /** * 解析一个单元格得到数据 * @param cell * @return */ private static String getCellContentAsString(HSSFCell cell) { if(null == cell){ return ""; } String result = ""; switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: String s = String.valueOf(cell.getNumericCellValue()); if (s != null) { if (s.endsWith(".0")) { s = s.substring(0, s.length() - 2); } } result = s; break; case Cell.CELL_TYPE_STRING: result = ToolKits.nulltoempty(String.valueOf(cell.getStringCellValue())).trim(); break; case Cell.CELL_TYPE_BLANK: break; case Cell.CELL_TYPE_BOOLEAN: result = String.valueOf(cell.getBooleanCellValue()); break; case Cell.CELL_TYPE_ERROR: break; default: break; } return result; } /** * 获取单元格及合并单元格的宽度 * @param cell * @return */ private static Map<String, Object> getCellInfo(HSSFCell cell) { HSSFSheet sheet = cell.getSheet(); int rowIndex = cell.getRowIndex(); int columnIndex = cell.getColumnIndex(); boolean isPartOfRegion = false; int firstColumn = 0; int lastColumn = 0; int firstRow = 0; int lastRow = 0; int sheetMergeCount = sheet.getNumMergedRegions(); for (int i = 0; i < sheetMergeCount; i++) { Region ca = sheet.getMergedRegionAt(i); firstColumn = ca.getColumnFrom(); lastColumn = ca.getColumnTo(); firstRow = ca.getRowFrom(); lastRow = ca.getRowTo(); if (rowIndex >= firstRow && rowIndex <= lastRow) { if (columnIndex >= firstColumn && columnIndex <= lastColumn) { isPartOfRegion = true; break; } } } Map<String, Object> map = new HashMap<String, Object>(); Integer width = 0; Integer height = 0; boolean isPartOfRowsRegion = false; if(isPartOfRegion){ for (int i = firstColumn; i <= lastColumn; i++) { width += sheet.getColumnWidth(i); } for (int i = firstRow; i <= lastRow; i++) { height += sheet.getRow(i).getHeight(); } if(lastRow > firstRow){ isPartOfRowsRegion = true; } }else{ width = sheet.getColumnWidth(columnIndex); height += cell.getRow().getHeight(); } map.put("isPartOfRowsRegion", isPartOfRowsRegion); map.put("firstRow", firstRow); map.put("lastRow", lastRow); map.put("width", width); map.put("height", height); return map; }
评论
1 楼
zenghongqing
2015-01-19
您好,请教您一个问题:
//cell内容字符串总宽度
double cellContentWidth = cellContent.getBytes().length * 2 * 256;
这一段代码为什么要乘以256?这个算字符串的宽度必须要乘256吗?为什么不是乘一个别的数?
//cell内容字符串总宽度
double cellContentWidth = cellContent.getBytes().length * 2 * 256;
这一段代码为什么要乘以256?这个算字符串的宽度必须要乘256吗?为什么不是乘一个别的数?
发表评论
-
oracle按照某一字段里的数字排序
2014-10-21 19:59 1088select * from LSK_SBCAJ t ord ... -
JS onkeydown onenter
2014-10-20 16:53 1003html中 onenter不是一个标准的事件。 js 中仿o ... -
Java数组删除指定元素
2014-09-18 11:30 2252package com.zas.util; impo ... -
sql 去重
2014-09-18 10:43 637delete from table t1 where t1.i ... -
linux 干掉所有java进程
2014-08-07 12:31 1031ps -ef|grep java|grep -v grep|c ... -
Oracle自带连接池使用(转载收录)
2014-07-31 10:01 1410最近在搞数据迁移:从sql server 迁数据到oracle ... -
html dom jsoup httpclient
2014-07-10 21:45 1113xml dom 对大多数java程序员来说并不陌生,但是htm ... -
Oracle 清库脚本
2014-07-08 22:40 1314清库脚本一份 表dossier_group 的字段Dossi ... -
Java 对象存储到oracle Blob字段
2014-07-08 14:52 1100Java 数据对象在没有持久存储到业务表时,可能需要临时存 ... -
Java 科学计数法数字转字符串
2014-07-08 14:30 1509科学计数法数字转字符串,记录代码,留后使用 double ... -
突破tomcat jsp编译65535行的限制
2014-07-04 17:16 4791使用tomcat时有可能会遇到其对jsp编译行数的限制, ... -
oracle 函数中游标及递归的应用
2014-06-19 17:13 1420在代码中使用递归可能大部分程序员都不陌生,但是在存储过程或 ... -
视频操作类
2014-06-19 17:04 1135接 视频分割项目预研 http://zhuyufufu.i ... -
视频分割项目预研
2014-06-11 16:12 2271由于工作需要,研究下视频切割。 现在的情况:视频切割是重中之 ... -
Java POI Excel sheet 合并遇到的问题解决2
2014-03-25 18:03 3247上接 Java POI Excel sheet 合并 http ... -
文档展示:使用iText转换各种图片为PDF
2014-03-23 12:38 2907如题: 下面这段代码可以处理各种格式的图片,代码的出处忘记了 ... -
Java 进程执行外部程序,造成外部程序阻塞的一种原因
2014-03-23 12:06 1466前一阵子在研究文档展示时使用了java进程直接调用外部程序 ... -
Java POI Excel sheet 合并遇到的问题解决
2014-03-23 11:30 5123上接 Java POI Excel sheet http:// ... -
Java POI Excel sheet合并
2014-03-19 10:59 6628由于工作上的需要,特地研究了下Excel合并的问题,现贴出来, ... -
文档展示:IcePDF 将PDF转换为图片
2014-02-11 16:35 4943上接 文档展示:PDFRender 将PDF转换为图片 htt ...
相关推荐
JAVA POI Excel转Html,代码和所需的jar都在压缩包,项目在线预览需求,实现后分享下
Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...
Apache POI项目提供了一系列用于读写Microsoft Office格式文件的Java API,其中包括对Excel的支持。本文将详细介绍如何使用Apache POI实现Excel的导出功能,并在此基础上实现自动换行。 #### 一、Apache POI简介 ...
Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出...
在Java开发中,Apache POI库是处理Microsoft Office文件(如Word、Excel)的强大工具。本文将深入探讨如何使用Java POI生成带有货币格式的Excel文件,这在财务报告和其他需要精确货币显示的应用场景中尤为关键。 ##...
Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)
Java的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,尤其是Excel(.xlsx)文档。在本示例中,我们将深入探讨如何利用POI库来生成Excel中的图表曲线,这对于数据可视化和报告生成...
Java POI导出图片到Excel示例代码详解 Java POI是Java开发中常用的开源库,用于读写Microsoft Office文件格式,包括Excel、Word、PowerPoint等。今天,我们将介绍如何使用Java POI将图片导出到Excel中。 标题解释 ...
在Java开发中,Apache POI库是一个非常实用的工具,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel。本篇文章主要探讨如何利用POI在Excel单元格中添加超链接,并设置字体颜色。 首先,为了使用...
Java POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,尤其是Excel。它提供了丰富的API,使得在Java环境中操作Excel文件变得极其便捷。本文将深入探讨Java POI的使用,包括其核心功能、API使用示例...
在Java编程环境中,Apache POI库是一个非常实用的工具,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel(.xlsx 和 .xls)文件。本教程将详细介绍如何使用JAVA POI库来创建一个包含图片的完整Excel...
Java POI Excel封装例子 public class ExcelUtils
Java POI 操作 Excel 是一个常见的任务,在许多业务场景中都需要用到,比如数据导入导出、数据分析等。Apache POI 是一个流行的开源库,它允许开发者使用 Java 来读写 Microsoft Office 格式的文件,其中包括 Excel ...
Java POI库是Apache软件基金会开发的一个开源项目,专门用于读写Microsoft Office格式的文件,包括Excel。在Java中,如果你需要导出Excel文件,Java POI是一个非常实用的工具。下面将详细介绍如何使用Java POI来实现...
Apache POI库是Java领域中广泛使用的工具,它允许开发者读写Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。本篇文章将深入讲解如何使用POI库在Java中实现Excel的导出功能,以及涉及到的相关jar包及其作用...
Java Poi库是Apache软件基金会开发的一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel、Word和PowerPoint等。在Java世界中,Poi是解析和操作这些文件的首选工具,尤其在数据导入导出、自动化测试、...
在Java编程环境中,Apache POI库是一个非常重要的工具,它允许开发者读取、写入和修改Microsoft Office格式的文件,尤其是Excel(.xlsx 和 .xls)文件。本教程将深入探讨如何利用Java POI库来实现Excel的导入与导出...
Apache POI是一个开源项目,它允许Java开发者处理Microsoft Office格式的文件,如Excel(.xlsx或.xls)和Word(.docx)。 首先,我们需要导入Apache POI的相关依赖。在Maven项目中,可以在pom.xml文件中添加以下...
Java POI 是一个开源库,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在Java中,利用Apache POI库可以方便地进行Excel文件的读写操作,从而实现Excel数据的上传和下载功能。这个项目提供的...