使用 Apache poi 在 Excel 工作表的单个单元格中插入多个 para 标签

Insert Multi para tags in a single cell in Excel sheet using Apache poi

提问人:user2755407 提问时间:11/13/2023 更新时间:11/14/2023 访问量:32

问:

我有一个输入如下:

<p style="font-family:Caveat;">This is Caveat</p><p style="font-family:Arial;">This is Arial text</p>

我想使用 apache poi 在单个单元格中插入两个 para 标签元素,如下所示。enter image description here

.我从网上尝试了几个例子,但我可以找到任何合适的解决方案。谁能帮我解决它?

java apache-poi java-17

评论


答:

1赞 Axel Richter 11/13/2023 #1

Excel 单元格不包含文本段落。单元格只能包含具有不同文本格式的单个文本运行。为此,您将需要单元格中的 RichTextString 内容。

单元格内容也可能包含换行符。但是,只有当单元格样式设置为换行文本时,换行符才会生效。

使用 XSSFRichTextString,可以使用方法 XSSFRichTextString.append 使用不同的字体附加不同的字符串。

需要在工作簿级别创建不同的字体。单元格样式相同。

完整示例:

import org.apache.poi.xssf.usermodel.*;
import java.io.FileOutputStream;

class RichTextTest {

 public static void main(String[] args) throws Exception {
  XSSFWorkbook wb = new XSSFWorkbook();
  
  XSSFCellStyle wrapTextCellStyle = wb.createCellStyle();
  wrapTextCellStyle.setWrapText(true);
  
  XSSFFont fontTNR = wb.createFont();
  fontTNR.setFontName("Times New Roman");
   
  XSSFFont fontArial = wb.createFont();
  fontArial.setFontName("Arial");
  
  XSSFRichTextString richString = new XSSFRichTextString();
  richString.append("This is Times New Roman", fontTNR);
  richString.append("\n");
  richString.append("This is Arial", fontArial);
  
  XSSFSheet sheet = wb.createSheet("Sheet1");
  XSSFRow row = sheet.createRow(0);
  XSSFCell cell = row.createCell(0);

  cell.setCellValue(richString);
  cell.setCellStyle(wrapTextCellStyle);
  
  sheet.setColumnWidth(0, 25*256);

  try ( FileOutputStream fileOut = new FileOutputStream("./workbook.xlsx"); ) {
   wb.write(fileOut);
  }

 }
}

评论

0赞 user2755407 11/14/2023
如果我有一个带有 <br> 标签的文本,例如 <p style=“font-family:Caveat;”>这是 <br>Caveat</p><p style=“font-family:Arial;”>这是Arial文本</p>??我们是否也需要为此附加 \n?
1赞 Axel Richter 11/14/2023
@user2755407:Excel单元格内容与HTML完全无关。Excel 单元格内容中没有段落。所以换行的唯一方法是换行。\n