因为在工作中,可能因为不同的原因遇到不同的问题,本人就分享遇到的一个大坑

因为我要将数据库中的一部分字段的名称作为Excel中的列名,所以需要导出汉字,然后在对应的汉字下面填充数据.

正是因为这部分汉字,在使用的过程中.导出的表格,所有的汉字都挤在了一起,

并没有达到我们想要的效果所以我在这里进行了以下设置:

引入的依赖为:

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>

测试的代码为:

package exercise.demo;

import org.apache.poi.hssf.usermodel.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import java.io.FileOutputStream; @RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests { @Test
public void excelUtils() {
/**
* @see <a href="http://poi.apache.org/hssf/quick-guide.html#NewWorkbook">For more</a>
*/
// 创建新的Excel 工作簿
HSSFWorkbook workbook = new HSSFWorkbook(); // 在Excel工作簿中建一工作表,其名为缺省值, 也可以指定Sheet名称
HSSFSheet sheet = workbook.createSheet();
//HSSFSheet sheet = workbook.createSheet("SheetName"); // 用于格式化单元格的数据
HSSFDataFormat format = workbook.createDataFormat(); // 创建新行(row),并将单元格(cell)放入其中. 行号从0开始计算.
HSSFRow row = sheet.createRow((short) 1); // 设置字体
HSSFFont font = workbook.createFont();
font.setFontHeightInPoints((short) 20); //字体高度
font.setColor(HSSFFont.COLOR_RED); //字体颜色
font.setFontName("黑体"); //字体
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //宽度
font.setItalic(true); //是否使用斜体
// font.setStrikeout(true); //是否使用划线 // 设置单元格类型
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFont(font);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平布局:居中
cellStyle.setWrapText(true); // 添加单元格注释
// 创建HSSFPatriarch对象,HSSFPatriarch是所有注释的容器.
HSSFPatriarch patr = sheet.createDrawingPatriarch();
// 定义注释的大小和位置,详见文档
HSSFComment comment = patr.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short)4, 2, (short) 6, 5));
// 设置注释内容
comment.setString(new HSSFRichTextString("可以在POI中添加注释!"));
// 设置注释作者. 当鼠标移动到单元格上是可以在状态栏中看到该内容.
comment.setAuthor("Xuys."); // // 创建单元格
HSSFCell cell = row.createCell((short) 1);
String[] columMethodNms = new String[]{"*户主姓名", "*门牌号"}; for (int j = 0; j < columMethodNms.length; j++) {
cell = row.createCell(j);
// cell.setCellStyle();
cell.setCellValue(columMethodNms[j]); 这里这部分代码可以改变汉字的行宽
sheet.setColumnWidth(j,columMethodNms[j].getBytes().length*256);
} try {
FileOutputStream fileOut = new FileOutputStream("G:/3.xls");
workbook.write(fileOut);
fileOut.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
}

这部分代码经过本人测试,是可以正常运行工的.

或者你也试试将这个方法引入到这个类中.

 private static void reformatSheetWidth(XSSFSheet sheet, String[] columMethodNms) {
for (int columnNum = 0; columnNum < columMethodNms.length; columnNum++) {
int columnWidth = sheet.getColumnWidth(columnNum) / 256;
for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
XSSFRow currentRow;
//当前行未被使用过
if (sheet.getRow(rowNum) == null) {
currentRow = sheet.createRow(rowNum);
} else {
currentRow = sheet.getRow(rowNum);
} if (currentRow.getCell(columnNum) != null) {
XSSFCell currentCell = currentRow.getCell(columnNum);
if (currentCell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
int length = currentCell.getStringCellValue().getBytes().length;
if (columnWidth < length) {
columnWidth = length;
}
}
}
}
sheet.setColumnWidth(columnNum, columnWidth * 256);
}
}

这两个方法都可以用来进行测试,本人在项目中用过这样的方法.

使用poi导出固定excel的模板,出现汉字不能自动设置行宽的更多相关文章

  1. poi导出的excel的数字小数位过多?

    最近在使用Apache的POI组件对Excel进行操作,在对excel导出的时候,导出的数字本来只有两位小数,得到的结果就变成了很多位小数.如下面的图所示: 虽然对单元格使用了setCellStyle ...

  2. 将eChart图片利用POI导出到Excel

    在使用POI进行将数据导出到Excel时, 若要将eChart在前端生成的统计图(如柱状图.折线图.饼图等)一并导出,使用POI在后台构建数据图比较复杂,因此我选择将eChart在前端的统计图的bas ...

  3. POI导出复杂Excel,合并单元格(1)

    /** * 导出复杂excel 合并单元格 (HSSFWorkbook) */ @GetMapping("/testHSSFWorkbook.do") public void te ...

  4. poi导出到excel步骤分析

    在没用过poi之前感觉poi是很高大上的样子, 项目中用了发现poi的代码重复性很高类似于jdbc的模板代码, 项目中如果大量使用最好封装起来; 总结一下归结为6步 1 打开或新创建一个工作薄(使用H ...

  5. POI导出复杂Excel,合并单元格(2)

    /** * 导出excel (HSSFWorkbook) */ @GetMapping("/testExport") public void testExport1(HttpSer ...

  6. 使用apache的poi来实现数据导出到excel的功能——方式二

    此次,介绍利用poi与layui table结合导出excel.这次不需要从数据库中查询出来的数据进行每一行的拼接那么麻烦,我们这次将标题定义一个id值,对应从数据库中查找出来的字段名即可. 1.po ...

  7. Apache POI组件操作Excel,制作报表(二)

    本文接上一篇继续探究POI组件的使用.     现在来看看Excel的基本设置问题,以2007为例,先从工作簿来说,设置列宽,因为生成表格列应该固定,而行是遍历生成的,所以可以在工作簿级别来设置列宽, ...

  8. .Net数据集导出到Excel样式细节---------------摘自别人的

    .Net数据集导出到Excel样式细节 本文的目的是总结一些在做Excel导出功能时需要注意的样式细节.使用环境是Asp.Net,数据集的形式是Html Table,Excel还是识别一些CSS代码的 ...

  9. Magic xpa 3.x很容易将数据导出到Excel中

    Magic xpa 3.x很方便的将表中数据导出到Excel文件中,还可以自动将表中数据生成各种图表. 通过使用自带的打印数据内部事即可实现. 1.首先将打印数据任务属性设置为“是”. 2.可使用主程 ...

随机推荐

  1. phar缓存 编译缓存 提高phar文件包加载速度

    phar文件可以把用到的PHP文件全部打包在一个文件中,十分方便网站部署.但是单个的PHP文件可以使用opcache缓存(字节码缓存),以提升PHP的运行速度.那么PHAR文件包如何使用缓存呢. 这里 ...

  2. dockerui 安装

    meiya@meiya:~$ docker pull abh1nav/dockerui Using default tag: latest latest: Pulling from abh1nav/d ...

  3. python线程池ThreadPoolExecutor(上)(38)

    在前面的文章中我们已经介绍了很多关于python线程相关的知识点,比如 线程互斥锁Lock / 线程事件Event / 线程条件变量Condition 等等,而今天给大家讲解的是 线程池ThreadP ...

  4. linux中matlab的中文乱码问题

    ref:http://hi.baidu.com/36470902/item/47f3b133c419d989f5e4ade1 将系统的jre拷贝到matlab去 . sudo mv $MATLAB/s ...

  5. conda创建、删除、重命名环境

    链接:https://www.jianshu.com/p/7265011ba3f2 创建新环境 conda create -n rcnn python=3.6 删除环境 conda remove -n ...

  6. Mysql 千万数据快速导入

    最近碰到个项目,需要 千万条数据入库的问题,有原本的 类 csv 文件导入, 统计了下  数据行大概有 1400W 行之多 二话不说, 建表,直接 load LOAD DATA LOCAL INFIL ...

  7. gensim中word2vec

    from gensim.models import Word2Vec Word2Vec(self, sentences=None, size=100, alpha=0.025, window=5, m ...

  8. Git操作入门

    生成ssh key: ​ ssh-keygen -t rsa -C "lkt@temp.com" ​ 按三次回车,最后在.ssh文件夹下得到id_rsa和id_rsa.pub两个文 ...

  9. 微信公众号h5页面自定义分享

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  10. 使用 react 的 hooks 进行全局的状态管理

    使用 react 的 hooks 进行全局的状态管理 React 最新正式版已经支持了 Hooks API,先快速过一下新的 API 和大概的用法. // useState,简单粗暴,setState ...