1. 总体介绍
- 该方法是解析
xlsx
单元格中的富文本,注意不是 xls
,xls
的 api 不一样,试了很久没成功。 - 只实现了解析
斜体字
、上下标
,其它的实现方式应该类似。
2. 具体实现
2.1 代码
package util;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelItalic {
public static void cell(XSSFCell cell) {
XSSFRichTextString rts = cell.getRichStringCellValue();
String value = rts.getString();
int size = rts.numFormattingRuns();
for (int i = 0; i < size; i++) {
XSSFFont font = rts.getFontOfFormattingRun(i);
if (font == null) {
continue;
}
if (font.getItalic()) {
int start = rts.getIndexOfFormattingRun(i);
int length = rts.getLengthOfFormattingRun(i);
if (length > 0) {
System.out.println("斜体内容为:" + value.substring(start, start + length));
}
}
short tos = font.getTypeOffset();
if (Font.SS_SUPER == tos) {
int start = rts.getIndexOfFormattingRun(i);
int length = rts.getLengthOfFormattingRun(i);
if (length > 0) {
System.out.println("上标内容为:" + value.substring(start, start + length));
}
}
if (Font.SS_SUB == tos) {
int start = rts.getIndexOfFormattingRun(i);
int length = rts.getLengthOfFormattingRun(i);
if (length > 0) {
System.out.println("下标内容为:" + value.substring(start, start + length));
}
}
}
}
public static void wb(String path) {
XSSFWorkbook wb = null;
InputStream input = null;
try {
input = new FileInputStream(path);
wb = new XSSFWorkbook(input);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
}
}
}
XSSFSheet sheet = wb.getSheetAt(0);
for (int i = 0; i <= sheet.getLastRowNum(); i++) {
System.out.println("\n-----第" + (i + 1) + "行-----");
XSSFRow row = sheet.getRow(i);
for(int j = 0; j < row.getLastCellNum(); j++){
cell(row.getCell(j));
}
}
}
public static void main(String[] args) {
wb("D:\\test\\1.xlsx");
}
}
2.2 依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.12</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.12</version>
</dependency>
2.3 excel内容

2.4 输出
-----第1行-----
斜体内容为:猛虎
斜体内容为:蔷薇
-----第2行-----
上标内容为:-2
-----第3行-----
斜体内容为:U
斜体内容为:k
-----第4行-----
斜体内容为:U
斜体内容为:rel
下标内容为:rel
斜体内容为:k