java/poi 调整Excel 列宽支持自适应中文字符宽度 您所在的位置:网站首页 poi导出Excel设置列宽 java/poi 调整Excel 列宽支持自适应中文字符宽度

java/poi 调整Excel 列宽支持自适应中文字符宽度

2023-12-09 18:41| 来源: 网络整理| 查看: 265

apache/poi是apache旗下用于读写Microsoft Office 二进制文件和OOXML 格式文件的开源库。用它来进行excel文件的导出是很趁手的。 一般来说可以直接使用 Sheet.autoSizeColumn方法自动调整每列的宽度。但是遇到包含中文的列,autoSizeColumn方法计算的列宽是不正确的,算出的宽度不能完整显示中文内容。最近项目中就遇到了这个问题,于是参考网上的各类文章,自己实现了自动适应中文字符宽度的方法

代码如下:

/** * 自动调整列表宽度适应中文字符串 * @param sheet * @param startColumnNum 要调整的起始列表号 * @param size 要调整的列表数量 */ public static void autoColumnWidthForChineseChar(Sheet sheet, int startColumnNum, int size) { for (int columnNum = 0; columnNum /** 列宽已经超过最大列宽则放弃当前列遍历 */ continue; } /** 新的列宽 */ int newWidth = columnWidth; /** 遍历所有的行,查找有汉字的列计算新的最大列宽 */ for (int rowNum = 0; rowNum continue; } else { currentRow = sheet.getRow(rowNum); } if (currentRow.getCell(columnNum) != null) { Cell currentCell = currentRow.getCell(columnNum); if (currentCell.getCellType() == CellType.STRING) { String value = currentCell.getStringCellValue(); /** 计算字符串中中文字符的数量 */ int count = chineseCharCountOf(value); /**在该列字符长度的基础上加上汉字个数计算列宽 */ int length = value.length()*256+count*256*2; /** 使用字符串的字节长度计算列宽 */ // int length = value.getBytes().length*256; if (newWidth //设置列宽 sheet.setColumnWidth(columnNum, newWidth); } } } /** * 计算字符串中中文字符的数量 * 参见 《汉字unicode编码范围》 * @param input * @return */ private static int chineseCharCountOf(String input){ int count = 0;//汉字数量 if(null != input){ String regEx = "[\\u4e00-\\u9fa5]"; Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(input); int len = m.groupCount(); //获取汉字个数 while (m.find()) { for (int i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有