java poi excel 设置单元格富文本 粗体无效解决办法

//富文本样式(一个单元格含有的多种样式格式)设置粗体无效解决办法 //设置RichTextString 的时候,给 font 设置 setBold(true) ; setItalic(true) 粗体 斜体 ,发现在office有效果,在wps 看不到加粗斜体效果。 //原因是而程序生成的加粗是<b val="true"/>电脑的生成的xlsx的加粗是<b/>,所以解决办法是把 val="true"属性抹去。效果如下

 直接上代码

Row row0 = sheet1.getRow(0);
row0.setHeightInPoints(19.5f);//行高设置
Cell titleCellStyleCell = row0.createCell(1);

CellStyle titleCellStyle = workbook.createCellStyle();//样式
titleCellStyle.setAlignment(CellStyle.ALIGN_CENTER);//水平居中
titleCellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//垂直对齐

StringBuffer titleMsgSBF = new StringBuffer();
titleMsgSBF.append("下划线且加粗");
int title_length1 = titleMsgSBF.length();
titleMsgSBF.append("只加粗");
int title_length2 = titleMsgSBF.length();

//富文本样式(一个单元格含有的多种样式格式)
XSSFRichTextString hssfRichTextString = new XSSFRichTextString(titleMsgSBF.toString());
//设置单元格样式
Font title_length1_font = workbook.createFont(); // 创建字体样式
title_length1_font.setUnderline(Font.U_SINGLE);//下划线
title_length1_font.setBold(true); //字体加粗:true
title_length1_font.setFontName("Times New Roman"); // 设置字体类型
title_length1_font.setFontHeightInPoints((short) 15); // 设置字体大小
hssfRichTextString.applyFont(0, title_length1, title_length1_font);

//设置单元格样式
Font title_length2_font = workbook.createFont(); // 创建字体样式
title_length2_font.setBold(true); //字体加粗:true
title_length2_font.setFontName("宋体"); // 设置字体类型
title_length2_font.setFontHeightInPoints((short) 15); // 设置字体大小
hssfRichTextString.applyFont(title_length1, title_length2, title_length2_font);

//富文本样式(一个单元格含有的多种样式格式)设置粗体无效解决办法
//设置RichTextString 的时候,给 font 设置  setBold(true) ; setItalic(true)  粗体 斜体 ,发现在office有效果,在wps 看不到加粗斜体效果。
//原因是而程序生成的加粗是<b val="true"/>电脑的生成的xlsx的加粗是<b/>,所以解决办法是把 val="true"属性抹去
List<CTRElt> ctrEltList = hssfRichTextString.getCTRst().getRList();
if(ctrEltList != null && ctrEltList.size()>0){
    for(CTRElt ctrElt : ctrEltList){
        CTRPrElt ctrPrElt = ctrElt.getRPr();//获取属性元素
        if(ctrPrElt != null){
            List<CTBooleanProperty> bList = ctrPrElt.getBList();//获取<b/>元素
            if(bList != null && bList.size() > 0){
                bList.get(bList.size() - 1).unsetVal();//销毁设置的属性值
            }
        }
    }
}

titleCellStyleCell.setCellStyle(titleCellStyle);
titleCellStyleCell.setCellValue(hssfRichTextString);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java POI是一个用于操作Microsoft Office格式文件的开源库,在处理Excel文件时可以使用它来实现单元格的合并和数据读取。下面是一个使用Java POI来合并单元格并读取数据的示例: 1. 导入Java POI的相关库: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileInputStream; import java.io.IOException; ``` 2. 定义一个方法来读取Excel文件: ```java public static void readExcel(String filePath) { try { FileInputStream fileInputStream = new FileInputStream(filePath); Workbook workbook = new XSSFWorkbook(fileInputStream); Sheet sheet = workbook.getSheetAt(0); // 循环遍历每一行 for (Row row : sheet) { // 循环遍历每一列 for (Cell cell : row) { // 判断单元格的合并状态 if (cell.getCellType() == CellType.STRING && cell.getCellStyle().getAlignment() == HorizontalAlignment.CENTER) { // 获取合并区域的开始行、结束行、开始列、结束列 int firstRow = sheet.getMergedRegion(cell.getColumnIndex(), cell.getRowIndex()).getFirstRow(); int lastRow = sheet.getMergedRegion(cell.getColumnIndex(), cell.getRowIndex()).getLastRow(); int firstColumn = sheet.getMergedRegion(cell.getColumnIndex(), cell.getRowIndex()).getFirstColumn(); int lastColumn = sheet.getMergedRegion(cell.getColumnIndex(), cell.getRowIndex()).getLastColumn(); // 获取合并区域的数据 String mergedData = sheet.getRow(firstRow).getCell(firstColumn).getStringCellValue(); // 打印合并区域的数据 System.out.println(mergedData); } } } workbook.close(); fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } ``` 3. 调用readExcel方法来读取Excel文件: ```java public static void main(String[] args) { readExcel("excelFile.xlsx"); } ``` 以上就是使用Java POI来合并单元格并读取数据的一个简单示例。通过判断单元格的合并状态,可以获取到合并区域的数据。根据具体的需求可以进一步处理合并区域的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值