SXSSFWorkbook 表格内换行
起因
导出的excel需要在表格内换行,但搜索到的方法都实现不了我的需求,经同事搜查得知,这是POI的一个bug,已经在17年八月后被解决。
生成方式
pom依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-excelant</artifactId>
<version>4.0.0</version>
</dependency>
生成excel换行代码
@Test
public void test() throws IOException { Workbook wb = new SXSSFWorkbook(); //or new HSSFWorkbook();
Sheet sheet = wb.createSheet(); Row row = sheet.createRow(2);
Cell cell = row.createCell(3);
XSSFRichTextString rich = new XSSFRichTextString("测试\r" + "换行");
cell.setCellValue(rich); CellStyle cellStyle = wb.createCellStyle();
cellStyle.setWrapText(true); cell.setCellStyle(cellStyle); try (OutputStream fileOut = new FileOutputStream("ooxml-newlines.xlsx")) {
wb.write(fileOut);
}
}
代码解析
SXSSFWorkbook是先将数据生成xml存储在本地,转化的时候会对表格内数据进行转义,具体代码见org.apache.poi.xssf.streaming.SheetDataWriter#outputQuotedString()
方法,内部代码为:
String codepoint = (String)var2.next();
byte var5 = -1;
switch(codepoint.hashCode()) {
case 9:
if (codepoint.equals("\t")) {
var5 = 6;
}
break;
case 10:
if (codepoint.equals("\n")) {
var5 = 4;
}
break;
case 13:
if (codepoint.equals("\r")) {
var5 = 5;
}
break;
case 34:
if (codepoint.equals("\"")) {
var5 = 3;
}
break;
case 38:
if (codepoint.equals("&")) {
var5 = 2;
}
break;
case 60:
if (codepoint.equals("<")) {
var5 = 0;
}
break;
case 62:
if (codepoint.equals(">")) {
var5 = 1;
}
break;
case 160:
if (codepoint.equals(" ")) {
var5 = 7;
}
} switch(var5) {
case 0:
this._out.write("<");
break;
case 1:
this._out.write(">");
break;
case 2:
this._out.write("&");
break;
case 3:
this._out.write(""");
break;
case 4:
this._out.write(" ");
break;
case 5:
this._out.write(" ");
break;
case 6:
this._out.write(" ");
break;
case 7:
this._out.write(" ");
break;
default:
if (codepoint.length() == 1) {
char c = codepoint.charAt(0);
if (replaceWithQuestionMark(c)) {
this._out.write(63);
} else {
this._out.write(c);
}
} else {
this._out.write(codepoint);
}
}
由上可见,\r
会被解析成
,这个字符会被excel解析成换行,以此来达到换行的目的。而我之前使用的是3.9的版本,那个版本里会将\r
和 \n
都解析成
,这个字符会被excel解析成空格,而不是换行。
转载:https://blog.csdn.net/Evelyn_Jone/article/details/85253776
SXSSFWorkbook 表格内换行的更多相关文章
- markdown如何在表格内换行?
答:使用<br>即可在表格内换行
- Latex 表格内公式换行方法
Latex 表格内的公式实现换行的方法 简单的两步走: 1.先将下面的语句放在latex正文的导言区: \newcommand{\tabincell}[2]{\begin{tabula ...
- Excel自文本导入内容时如何做到单元格内换行
前言:今天在处理数据的时候,在数据库中用到了\n换行符号,目的是在同表格内做到数据多行显示,比如 字段名1 字段名2 字段名3 1 数据一行 数据二行 数据三行 例子是在sql查询后的结果 ...
- excel单元格内换行的方法
方法一:调整单元格格式换行 选定单元格,选择“格式→单元格”,在弹出的对话框中单击“对齐”,选中“自动换行”,单击[确定]按钮即可. 方法二:Alt+Enter键(使用强行换行时,系统会同时选择自动换 ...
- table表格在设置文字垂直居中后,在表格显示相同排列的数据(比如:testtesttesttsttesttesstestse很多的test)时此表格不能换行
table设置了垂直居中后在表格显示相同排列的数据(比如:testtesttesttsttesttesstestse很多的test)时此表格不能换行, 此时会导致table会把页面撑的很宽,导致表格后 ...
- 怎么把excel表格内的数据导入数据库?
第一种方法: 思路:想要把excel表格内的数据直接导入数据库不是那么容易,可以把excel表格另存为.csv格式的文档(特点:内容以逗号分割):然后通过一系列的文档操作函数处理成为一个二维数组,然后 ...
- Excel 2007表格内输入http取消自动加上超链接的功能
经常使用Excel表格工作的也许会发现,当我们在表格内输入http://XXXX时,默认情况下都会自动加上超链接,如下: 当我们点击域名准备编辑修改时,往往都会调用浏览器转到该域名之下,达不到编辑修改 ...
- Linqpad使用(调试Linq、结合linq调试业务场景、表格内编辑数据)
linqpad是一款linq语句调试工具,功能如下: 1.直接执行linq语句并查看生成的原生sql语句 2.可结合linq+C#代码进行业务场景调试 3.表格内直接新增.修改.删除数据 4.直接 ...
- C#使用Command将dataGrideView表格内数据与数据库交互
本文主要介绍通过Command类使用SQL插入指令insert与查询指令select将dataGrideView表格内添加至数据库,与从数据库读出数据存放在dataGrideView表格中. C#制作 ...
- <HTML>在一个表格内嵌套另一个表格时,如何居中?
在一个表格内嵌套另一个表格时,如何居中? 假设大表格为: <table id="tableRow"> <tr> <th>City</th& ...
随机推荐
- mixup: BEYOND EMPIRICAL RISK MINIMIZATION概述
参考简书,github 0.前言 相关资料: arxiv github 论文解读 论文基本信息: 领域:数据增强 发表时间:arxiv 2022(2022.5.1) 1.针对的问题 大型的深度神经网络 ...
- pytorch中 model.cuda的作用
在pytorch中,即使是有GPU的机器,它也不会自动使用GPU,而是需要在程序中显示指定.调用model.cuda(),可以将模型加载到GPU上去.这种方法不被提倡,而建议使用model.to(de ...
- LP1-3:一支钢笔的测试
UI: 长.宽 .高 钢笔:笔身.笔尖.笔帽 功能: 写字:出水量比较合适 笔帽能扣上,不容易掉 钢笔笔夹 打水 笔尖的粗细程度 容错性: 不能漏水 易用性: 是否光滑 笔尖是否可以换 笔囊是否可以换 ...
- MySQL(1): 基本操作
MySQL 是流行的关系型数据库管理系统之一,特别是在WEB应用方面.推荐用5.6版本. My Sql客户端有很多 还有PHP MyAdmin, 是以web形式控制和操作MySQL数据库的管理工具.是 ...
- git reset 加不加 --hard的区别
通常我们提交代码一般都是 git add ,git commit -m, git push的这么个流程.添加到暂存区,提交到git库生成版本号,push到远程仓库以供他人可以使用.这是一个完整的且 ...
- memoのVIM
必须给今天看到的vim相关的东西记录一下! vim文档中文化 https://github.com/yianwillis/vimcdoc 速查表 https://github.com/skywind3 ...
- python写入sqlserver中文乱码问题
需求是python3开发,数据库是sqlserver,第一次用python操作sqlserver,写入数据时,中文全部变成了?? 试了pyodbc,但缺少sqlserver驱动 试了sqlStr.en ...
- NavicatPremium16破解!!!!!亲测可用!!!!!!!!!!!!!!!!!
前言 Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL.SQLite.Oracle 及 PostgreSQL 资料库,让 ...
- 从redis中取出数据并转成java对象
1.//数据存入redis中 redisTemplate.opsForValue().set(loginame, JSON.toJSONString(users),1000,TimeUnit.SECO ...
- ZSTUOJ刷题⑨:Problem H.--尖兵
Problem H: 尖兵 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 4691 Solved: 2112 Description 星光人已经出发了 ...