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