可以附加两个HSSFRichTextStrings,但您必须自己完成大部分工作。您将需要利用HSSFRichTextString 中的以下方法:
首先,创建一个小类来存储格式化运行统计信息:
public class FormattingRun {
private int beginIdx;
private int length;
private short fontIdx;
public FormattingRun(int beginIdx, int length, short fontIdx) {
this.beginIdx = beginIdx;
this.length = length;
this.fontIdx = fontIdx;
}
public int getBegin() { return beginIdx; }
public int getLength() { return length; }
public short getFontIndex { return fontIdx; }
}
接下来,收集两个字符串中每一个的所有格式化运行统计信息。您必须自己遍历字符串以确定每次格式化运行的持续时间。
List<FormattingRun> formattingRuns = new ArrayList<FormattingRun>();
int numFormattingRuns = richTextString.numFormattingRuns();
for (int fmtIdx = 0; fmtIdx < numFormattingRuns; fmtIdx)
{
int begin = richTextString.getIndexOfFormattingRun(fmtIdx);
short fontIndex = richTextString.getFontOfFormattingRun(fmtIdx);
// Walk the string to determine the length of the formatting run.
int length = 0;
for (int j = begin; j < richTextString.length(); j++)
{
short currFontIndex = richTextString.getFontAtIndex(j);
if (currFontIndex == fontIndex)
length++;
else
break;
}
formattingRuns.add(new FormattingRun(begin, length, fontIndex));
}
接下来,自己连接两个String 值并创建结果HSSFRichTextString。
HSSFRichTextString result = new HSSFRichTextString(
richTextString1.getString() + richTextString2.getString());
最后,应用两组格式化运行,第二组运行偏移第一个字符串的长度。
for (FormattingRun run1 : formattingRuns1)
{
int begin = run1.getBegin();
int end = begin + run1.getLength();
short fontIdx = run1.getFontIndex();
result.applyFont(begin, end, fontIdx);
}
for (FormattingRun run2 : formattingRuns2)
{
// offset by string length 1
int begin = run2.getBegin() + richTextString1.length();
int end = begin + run2.getLength();
short fontIdx = run2.getFontIndex();
result.applyFont(begin, end, fontIdx);
}
这应该可以连接HSSFRichTextStrings。
如果您想连接 .xlsx 文件中的 XSSFRichTextStrings,过程非常相似。一个区别是XSSFRichTextString#getFontOfFormattingRun 将返回XSSFFont 而不是short 字体索引。没关系,因为在XSSFRichTextString 上调用applyFont 无论如何都需要XSSFFont。另一个区别是,如果没有为格式化运行应用字体,getFontOfFormattingRun 可能会抛出 NullPointerException,当没有应用与整个 CellStyle 的现有字体不同的字体时会发生这种情况 @987654346 @。