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

在经过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<CellRangeAddress> listCombineCell = sheet.getMergedRegions();

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

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

(4)若内容的长度小于合并单元格的宽度,就不需要进行行高设置了;若内容的长度大于合并单元格的宽度,那么通过合并单元格的宽度除以内容的长度,计算内容需要多少行才能全部显示出来,这里采用取比商大的最小整数;

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

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

原文地址:https://www.cnblogs.com/bien94/p/11664397.html

时间: 2024-10-14 01:41:26

20191012——POI设置单元格自动行高(思路)的相关文章

C# 解决EXCEL单元格合并,行高无法自适应问题

解决方法:根据单元格内容长度,设置单元格所在行的行高 public static float getExcelCellAutoHeight(string strtest, float fontCountInline) { float defaultRowHeight = 18.00f;//每一行的高度指定 float defaultCount = 0.00f; for (int i = 0; i <strtest.Length; i++) { float ff = getRegex(strtes

【web开发】☆★之利用POI操作Excel表格系列教程【8】设置单元格对其方式

[web开发]☆★之利用POI操作Excel表格系列教程[8]设置单元格对其方式 package csg.xiaoye.poidemo; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HS

apache poi 合并单元格 设置边框

HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); //创建一个样式 HSSFCellStyle styleBorderThin= wb.createCellStyle(); setBorder.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框 setBorder.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左

用NPOI创建Excel、合并单元格、设置单元格样式、边框的方法

今天在做项目中,遇到使用代码生成具有一定样式的Excel,找了很多资料,最后终于解决了,Excel中格式的设置,以及单元格的合并等等.下面就介绍下,使用NPOI类库操作Excel的方法. 1.首先我们先在内存中生成一个Excel文件,代码如下:   HSSFWorkbook book = new HSSFWorkbook();        ISheet sheet = book.CreateSheet("Sheet1"); 2.然后在新创建的sheet里面,创建我们的行和列,代码如下

设置单元格的宽度和高度

NPOI官方网站:http://npoi.codeplex.com/ 在Excel中,单元格的宽度其实就是列的宽度,因为Excel假设这一列的单元格的宽度肯定一致.所以要设置单元格的宽度,我们就得从列的宽度下手,HSSFSheet有个方法叫SetColumnWidth,共有两个参数:一个是列的索引(从0开始),一个是宽度. 现在假设你要设置B列的宽度,就可以用下面的代码: HSSFWorkbook hssfworkbook = new HSSFWorkbook(); HSSFSheet shee

15.13DataGridView单元格自动填充

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace _15._13DataGridView单元格自动填充

poi合并单元格同时导出excel

poi合并单元格同时导出excel POI进行跨行需要用到对象HSSFSheet对象,现在就当我们程序已经定义了一个HSSFSheet对象sheet. 跨第1行第1个到第2个单元格的操作为 sheet.addMergedRegion(new Region(0,(short)0,0,(short)1)); 跨第1行第1个到第2行第1个单元格的操作为 sheet.addMergedRegion(new Region(0,(short)0,1,(short)0)); 重点注意事项: 1.单元格CELL

Android给GridView设置单元格分割线

给GridView设置单元格分割线有两种方法,一种是设置背景图片设置分割线,另外一种是自定义GridView重绘视图设置分割线.重绘方法代码如下: public class LineGridView extends GridView{ public LineGridView(Context context) { super(context); // TODO Auto-generated constructor stub } public LineGridView(Context context

NX二次开发-UFUN工程图表格注释设置单元格首选项UF_TABNOT_set_cell_prefs

1 NX9+VS2012 2 3 4 #include <uf.h> 5 #include <uf_tabnot.h> 6 #include <NXOpen/Part.hxx> 7 #include <NXOpen/PartCollection.hxx> 8 #include <NXOpen/Session.hxx> 9 #include <NXOpen/Annotations_TableSectionCollection.hxx>