在经过Jxls或者POI导出数据至excel中后,发现有的单元格内容太多,既没有自动换行,也没有自动增大行高。那如何通过Java代码来实现呢?请看下面步骤:

(一)首先,将excel设置为最合适的行高,通过CTRow对象的setCustomHeight(false)函数实现,具体的代码如下:

XSSFWorkbook workbook = new XSSFWorkbook(文件路径或者文件流);

XSSFSheet sheet = workbook.getSheet(sheetIndex);

XSSFRow xssfRow = sheet.getRow(rowIndex);

CTRow ctRow = xssfRow.getCTRow();

ctRow.setCustomHeight(false);

(二)然后,循环每个sheet页的行,通过XSSFCell的setWrapText(true),就可以设置单元格自动换行,并且自动调整行高,将单元格内容全部显示出来;

(三)最后,对于合并的单元格,只能是通过XSSFRow的setHeight(行高值)来设置,这里说一下思路:

(1)通过sheet获取当前sheet页总共有哪些合并的单元格,例如List listCombineCell = sheet.getMergedRegions();

(2)计算合并单于格的高度和宽度,采用循环的方式求的每一行的高度之和或者是每一列的宽度之和;

(3)获取合并单元格的内容,首先统计中文字符的个数,然后使用String的getByte().length获取字节数,加上中文字符的个数,最后将这两者之和乘以256(为何要乘以256,可以看POI中获取列宽的源码,在里面除以列256),这样得到了内容的长度;

(4)若内容的长度小于合并单元格的宽度,就不需要进行行高设置了;若内容的长度大于合并单元格的宽度,那么通过合并单元格的宽度除以内容的长度,计算内容需要多少行才能全部显示出来,这里采用取比商大的最小整数,考虑到单元格有padding和margin距离,最好是再加上一行量;这里需要注意如何计算单元格中内容的宽度了,首先将字符串形式的内容按换行符转换成字符数组,接着计算字符数组中每一个元素的宽度,将它们的宽带和单元格实际宽度相除,这样就可以统计字符数组每个元素需要多少行来显示,最终将这些行数累加起来,最后还加上字符数组大小值,这样就得到了单元格内容需要的行数。

(5)计算合并单元格字体的高度,然后乘以内容需要的行数(第4步中求得的行数),得到内容需要的总高度;

(6)判断合并单元格是否是行合并(通过起始行号和终止行号是否相等来判断,若相等就不是行合并,否则就是行合并),若是行合并的情况,那么就需要计算是由多少行合并的(终止行号减去起始行号,再加一),接着计算每一行需要的平均高度(单元格内容的总高度除以行合并的单元格的行数),然后通过循环设置行合并的单元格区域的每一行所需要的平均高度。若不是行合并的单元格,那么直接将行高设置为单元格内容所需的总高度即可。

(四)备注:若不想对所有导出数据的样式做修改,那么可以这样设置好模板,在需要修改行高的单元格中设置自定换行的属性,这样可以避免修改不需要调整样式的单元格。

20191012闪

java poi 自动行高_POI设置单元格自动行高(思路)相关推荐

  1. java 自动行高,20191012——POI设置单元格自动行高(思路)

    在经过Jxls或者POI导出数据至excel中后,发现有的单元格内容太多,既没有自动换行,也没有自动增大行高.那如何通过Java代码来实现呢?请看下面步骤: (一)首先,将excel设置为最合适的行高 ...

  2. POI设置单元格自动行高的思路

    在经过Jxls或者POI导出数据至excel中后,发现有的单元格内容太多,既没有自动换行,也没有自动增大行高.那如何通过Java代码来实现呢?请看下面步骤: (一)首先,将excel设置为最合适的行高 ...

  3. 20191012——POI设置单元格自动行高(思路)

    在经过Jxls或者POI导出数据至excel中后,发现有的单元格内容太多,既没有自动换行,也没有自动增大行高.那如何通过Java代码来实现呢?请看下面步骤: (一)首先,将excel设置为最合适的行高 ...

  4. Java POI导出Excel时,合并单元格没有边框的问题

    今天用POI导出Excel的时候,发现导出的单元格确少边框,最后发现有2个方案可以解决. 方案一 CellRangeAddress的4个参数分别表示:起始行号,终止行号, 起始列号,终止列号 // 使 ...

  5. NPOI设置单元格宽和高

    1.设置单元格宽 1.1 Excel中单元格的宽实际就是列宽,HSSFSheet有个方法叫SetColumnWidth,共有两个参数:一个是列的索引(从0开始),一个是宽度. 示例: HSSFWork ...

  6. java 修改表格颜色代码_workBook设置单元格颜色方法

    背景介绍: 使用Java开发信息系统项目,项目中往往会涉及到报表管理部分,而Excel表格首当其冲称为最合适的选择,但是对单元格操作时对于设置单元格的背景颜色却很少提及,本文旨在方便单元格背景颜色设计 ...

  7. 三位数自动递增编号函数_Excel单元格自动填充编号、序列、18位长数字与数字+字母+数字...

    在 Excel 中,用拖动的办法可以实现单元格自动填充编号,即数字会自动递增,既可以向下拖也可以向右拖,向那里拖,数字往那递增:这个方法适用于自动填充短编号,如果要自动填充长序列,再用此方法就不好实现 ...

  8. java poi导出Excel表,合并单元格

    其他参考文章: http://www.cnblogs.com/bmbm/archive/2011/12/08/2342261.html http://www.cnblogs.com/xuyuanjia ...

  9. JAVA poi合并任意列 相同数据单元格

    以下为poi合并单元格 所需要jar如下 commons-collections poi java 1.8 版本 以下为代码 import java.io.FileNotFoundException; ...

  10. java通过itext生成PDF,设置单元格cell的最大高度 以及 itext7初尝

    网上百度java生成pdf都是很老的代码,使用的是itext5,找遍了大江南北都找不到设置表格或单元格最大高度,或者绝对定位表格的实现,最后对table和cell的方法一个一个找,找到了满足要求的方法 ...

最新文章

  1. 九度 1408 寻找表达式 (中缀转后缀)
  2. SQL Server 2005 学习笔记系列文章
  3. JSP/Servlet Web 学习笔记 DayFour —— 实现一个简单的JSP/Servlet交互
  4. 基于LSTM的电商评论情感分析-TensorFlow2实现(内附源码)【自然语言处理NLP-100例】
  5. win7可以安装sqlserver2008 企业版吗_MYSQLServer2008R2详细的图文安装教程
  6. MVC5 + EF6 + Bootstrap3
  7. Win11任务栏如何设置在顶部
  8. 【CCF】201709-2公共钥匙盒
  9. Atitit 规范标准化的艺术 -----java jsr的实现 目录 1. Atitit jsr规范有多少个 407个。Jsr规范大全 1 2. Atitit jsr规范化分类 attilax总
  10. Lightbox滚轮缩放功能
  11. java web调用海康威视摄像头
  12. STM32的USART1用DMA方式发送数据
  13. python算程序员吗_2019为什么有人说Python程序员是假的程序员?
  14. linux 查看 操作系统位数
  15. Java将html转换成pdf、html转换成图片
  16. jude(java建模软件)_JUDE(JAVA建模软件)
  17. 白话解读“中台”技术
  18. eclipse因jdk打不开解决
  19. 浙江理工大学校园网DNS性能测试脚本
  20. 读书寄语之春天该很好,你若尚在场

热门文章

  1. html5表单提交触发js,JS表单提交中onsubmit事件return的作用
  2. zen-cart修改 zencart 模板修改
  3. MATLAB求分段函数最大值,如何用MATLAB求分段函数的最小值和最大值?
  4. matlab求函数在区间内最大值与最小值
  5. 笔记本触摸板手势使用
  6. 实习测试的一个月总结与心得
  7. 范浩强平衡树(FHQ_Treap)介绍
  8. Python_乌龟和鱼游戏
  9. PyTorch实例:用ResNet进行交通标志分类
  10. 在 isilon 中使用 ldap 登录 ftp 服务