hssfrow 单元格样式_POI实现上标下标和单元格部分样式修改
为啥还要写这个呢?
因为有上标下标的单元格 有些字体的样式没有变,所以有了部分样式修改。
核心代码
text.applyFont()用这个api 对不同位置的字体用不同的样式即可。
// 上标
HSSFFont ft = workbook.createFont();
ft.setTypeOffset(HSSFFont.SS_SUPER);
// 加粗
HSSFFont font = workbook.createFont();
font.setBold(true);
font.setFontHeightInPoints((short) 10);
for (int[] pair : sups) {
text.applyFont(pair[0], pair[1], ft);
text.applyFont(pair[1], title.length(), font);
}
例子
image.png
public static void main(String[] args) {
String title = "一种F-、Zn2+、B3+离子协同掺杂电解质,H2O是水";
List> tagIndexArr = null;
if (containSubSup(title)) {
tagIndexArr = new ArrayList<>();
title = getSubSupIndexs(title, tagIndexArr);
}
//TODO 文件路径自己改
File f = new File("C:test.xls");
try {
FileOutputStream fout = new FileOutputStream(f);
// 声明一个工作薄
@SuppressWarnings("resource")
HSSFWorkbook workbook = new HSSFWorkbook();
// 生成一个表格
HSSFSheet sheet = workbook.createSheet("sheet1");
int curRowIndex = 0;
HSSFRow row = sheet.createRow(curRowIndex);
HSSFCell cell = row.createCell(0);
if (tagIndexArr != null) {
HSSFRichTextString text = new HSSFRichTextString(title);
List subs = tagIndexArr.get(0);
List sups = tagIndexArr.get(1);
if (subs.size() > 0) {
HSSFFont ft = workbook.createFont();
ft.setTypeOffset(HSSFFont.SS_SUB);
for (int[] pair : subs) {
text.applyFont(pair[0], pair[1], ft);
}
}
if (sups.size() > 0) {
// 上标
HSSFFont ft = workbook.createFont();
ft.setTypeOffset(HSSFFont.SS_SUPER);
// 加粗
HSSFFont font = workbook.createFont();
font.setBold(true);
font.setFontHeightInPoints((short) 10);
for (int[] pair : sups) {
text.applyFont(pair[0], pair[1], ft);
text.applyFont(pair[1], title.length(), font);
}
}
cell.setCellValue(text);
} else {
cell.setCellValue(title);
}
try {
workbook.write(fout);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取下一对标签的index,不存在这些标签就返回null
* @param s
* @param tag SUB_START 或者SUP_START
* @return int[]中有两个元素,第一个是开始标签的index,第二个元素是结束标签的index
*/
private static int[] getNextSubsTagsIndex(String s, String tag) {
int firstSubStart = s.indexOf(tag);
if (firstSubStart > -1) {
int firstSubEnd = s.indexOf(tag.equals(SUB_START) ? SUB_END : SUP_END);
if (firstSubEnd > firstSubStart) {
return new int[] { firstSubStart, firstSubEnd };
}
}
return null;
}
/**移除下一对sub或者sup标签,返回移除后的字符串
* @param s
* @param tag SUB_START 或者SUP_START
* @return
*/
private static String removeNextSubTags(String s, String tag) {
s = s.replaceFirst(tag, "");
s = s.replaceFirst(tag.equals(SUB_START) ? SUB_END : SUP_END, "");
return s;
}
/**
* 判断是不是包含sub,sup标签
* @param s
* @return
*/
private static boolean containSubSup(String s) {
return (s.contains(SUB_START) && s.contains(SUB_END)) || (s.contains(SUP_START) && s.contains(SUP_END));
}
/**
* 处理字符串,得到每个sub,sup标签的开始和对应的结束的标签的index,方便后面根据这个标签做字体操作
* @param s
* @param tagIndexList 传一个新建的空list进来,方法结束的时候会存储好标签位置信息。
*
tagIndexList.get(0)存放的sub
*
tagIndexList.get(1)存放的是sup
*
* @return 返回sub,sup处理完之后的字符串
*/
private static String getSubSupIndexs(String s, List> tagIndexList) {
List subs = new ArrayList();
List sups = new ArrayList();
while (true) {
int[] subPair = getNextSubsTagsIndex(s, SUB_START);
int[] supPair = getNextSubsTagsIndex(s, SUP_START);
boolean subFirst = true;
boolean supFirst = true;
if(subPair != null && supPair != null) {
//两种标签都存在的时候要考虑到谁在前,在前的标签优先处理
//因为如果在后的标签处理完,index就定下来,再处理在前的,后面的index就会产生偏移量。从前开始处理不会存在这个问题
if(subPair[0] < supPair[0]) {
supFirst = false;
} else {
subFirst = false;
}
}
if (subPair != null && subFirst) {
s = removeNextSubTags(s, SUB_START);
//标签被去掉之后,结束标签需要相应往前移动
subPair[1] = subPair[1] - SUB_START.length();
subs.add(subPair);
continue;
}
if (supPair != null) {
s = removeNextSubTags(s, SUP_START);
//标签被去掉之后,结束标签需要相应往前移动
supPair[1] = supPair[1] - SUP_START.length();
sups.add(supPair);
continue;
}
break;
}
tagIndexList.add(subs);
tagIndexList.add(sups);
return s;
}
hssfrow 单元格样式_POI实现上标下标和单元格部分样式修改相关推荐
- hssfrow 单元格样式_poi的各种单元格样式以及一些常用的配置
之前我做过一个poi到处excel数据的博客,但是,后面使用起来发现,导出的数据单元格样式都不对. 很多没有居中对齐,很多单元格的格式不对,还有就是单元格的大小不对,导致数据显示异常,虽然功能可以使用 ...
- EasyExcel 设置字体样式(字体、字体大小、字体颜色、字体加粗、字体斜体、字体下划线、字体上标下标、字体删除线)
1 Maven配置 <!--hutool工具包--><dependency><groupId>cn.hutool</groupId><artifa ...
- vue导出excel表格,使用xlsx-style自定义字体样式,字体颜色,合并单元格,单元格填充色
一.需要依赖 npm install xlsx-style --save "^0.8.13" npm install xlsx --save "^0.18.5" ...
- poi设置word表格单元格宽度_poi导出word表格的操作讲解
一.效果如下 二.js代码 function export_word(){ //导出word var url = "czzsca/exportWord.do"; this.expo ...
- html上标下标标签 示例_带有示例HTML th表标题标签教程
html上标下标标签 示例 HTML provides table structure which consists of rows, columns or cells. During the cre ...
- 【openpyxl】操作单元格,获取单个或多个单元格并修改数据、合并单元格、删除行列、移动单元格
1.获取和修改单个单元格 from openpyxl import Workbook wb = Workbook() ws = wb.activecell = ws["a6"] # ...
- php单元格字体颜色,PHPExcel API接口用法大全,按模板导入excel,美化excel,导出图片,设置单元格字体颜色背景色边框,合并单元格,设置行高列宽...
PHPExcel API接口用法大全,按模板导入excel,美化excel,导出图片,设置单元格字体颜色背景色边框,合并单元格,设置行高列宽 2020-08-31 85 一:读取excel表模板$ph ...
- a上标3下标6算法_a上标3下标6算法_Word中同时设置上标下标
我们在使用Word文档的时候,经常要输入上下标,我们在这里总结一下,以后再遇到就不发愁咯. 0,瞒天过海 此方法不推荐,但是我遇到有人这样过,发出来让大家看一下. 猜猜看哪个是标准的,另个是怎么做出来 ...
- vue中使用xlsx导出Excel 并设置样式,解决未完全合并单元格框线的BUG
今天有需到一个需求,需要在前端直接导出表格,将了解发现了npm上用的比较多的 xlsx 这个包,但是在使用过程中发现很多问题,下边是我将发现问题进行的汇总以及相应的解决办法. 1.安装 首先说安装问题 ...
最新文章
- Linux命令——expr
- 互联网协议 — TCP — 拥塞控制(网络质量保障)
- 【AutoML】进化算法如何用于自动模型搜索(NAS)
- python算法与数据结构-冒泡排序算法
- 只使用了符号的Ruby程序
- C# 运行时通过鼠标拖动改变控件的大小
- ubuntu下安装phpredis的模块扩展
- Python笔记-使用U2滑动APP
- java se 8 新特性_javase8-sample
- jquery选择器之过滤选择器
- 基于SSM流浪宠物管理系统
- Python 高阶函数,匿名函数 思维导图
- 实现sqrt()平方根函数
- can收发器TJA1043
- 图像超分变率与分辨率
- java根据文件字符换行_java操作txt文本(一):遇到指定字符换行
- 首届百度Apollo生态大会为什么选择长沙?
- 微信公众平台菜单编辑php,Vue.js实现微信公众号菜单编辑器步骤详解(上)
- 华为部分通知气泡显示_华为P50已在路上,目前不受美国影响 | PS5价格曝光!
- (div,p)等标签之间“分割线”的两种实现方式
热门文章
- ubantu 安装显卡
- 开放大学建筑构造计算机考试试题,精编最新国家开放大学电大《建筑构造》形考任务2试题及答案...
- The Geodetic Set Problem UVA - 1198
- 中冠百年|上班族如何增加自己的收入
- ChatGPT中文网
- (8.1.5.5)Android Testing Support Library翻译之Espresso 意图
- STC8A,STC8G,STC8H系列的IRC内部振荡源频率调节
- ESP8266-Arduino编程实例-APDS-9930环境光和趋近感器驱动
- python绘制横向柱状图 妈妈再也不用担心我不会画图了
- Java实现调用默认浏览器打开网址