我需要在java apache poi中追加到2个HSSFRichTextStrings。我怎样才能做到这一点?
究竟在干什么IM是即时得到丰富的文本字符串已经存在于细胞中,并试图附加的富文本字符串追加到它,并把它写回小区。
请告诉我如何做到这一点。请..是否可以附加2个富文本字符串?
回答
可以附加两个HSSFRichTextStrings
,但你必须自己完成大部分工作。您需要在HSSFRichTextString
采取以下方法的优点:
- numFormattingRuns() - 返回
HSFFRichTextString
格式运行次数。 - getFontOfFormattingRun(int) - 返回本
short
字体索引处的指定位置的字符串 - applyFont(int, int, short)在 - 应用由给定的起始索引(含)之间的
short
字体索引所指的字体和结束索引(不包括)。
首先,创建一个小的类存储格式运行统计:
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
。
如果你想连接XSSFRichTextStrings
,在.XLSX文件发现,这个过程是非常相似的。一个区别是,XSSFRichTextString#getFontOfFormattingRun
将返回XSSFFont
而不是short
字体索引。这没关系,因为上XSSFRichTextString
调用applyFont
需要一个XSSFFont
反正。另一个区别是,getFontOfFormattingRun
可能抛出NullPointerException
如果没有申请的格式运行,当存在比已经存在的CellStyle
整个Cell
的字体没有施加不同的字体发生字体。
你绕过XSSFRichTextStrings的NullPointerException? – user1007895 2013-10-01 03:19:43
@ user1007895捕获'getFontOfFormattingRun'抛出的'NullPointerException';那就是在该索引处没有格式化运行的情况。不要在没有应用字体的情况下为那个空白创建一个'FormattingRun'。然后,你不会在新的'XSSFRichTextString'中调用'applyFont'作为相应的空白。 – rgettman 2013-10-01 17:58:28
如果您使用XSSFRichTextStrings,你不能直接连接两个RichTextString。
但是,您可以间接地通过查找第二个RichTextString的文本值,然后使用append方法将该字符串值与应用字体(本质上为RichText)附加在一起。
XSSFRichTextString rt1 = new XSSFRichTextString("Apache POI is");
rt1.applyFont(plainArial);
XSSFRichTextString rt2 = new XSSFRichTextString(" great!");
rt2.applyFont(boldArial);
String text = rt2.getString();
cell1.setCellValue(rt1.append(text, boldArial));
来源:
- 1. 是否可以'git diff'2字符串?
- 2. 富文本json字符串
- 3. 在textarea的第一个字符后附加文本字符串
- 4. 是否可以在JSESSIONID中追加/预先添加文本字符串?
- 5. 是否可以附加2个jQuery对象?
- 6. Eclipse是否可以在字符串文本中查找结果?
- 7. 是否可以从文本框插入字符串到列中?
- 8. 如何在富文本框C#中的光标位置附加字符串?
- 9. 是否可以增加Java中的字符串或字符?
- 10. PDFSharp解析富文本字符串
- 11. INSTR与长字符串(富文本)
- 12. 转换富文本字符串到Excel
- 13. OpenSSL:是否可以附加额外的字符串进行身份验证?
- 14. 默认情况下,字符串数组是否可以附加到ListView?
- 15. 是否可以将字符串附加到Android活动标题栏?
- 16. 是否可以从base64字符串创建一个pdf文件?
- 17. utf8decode是否可以选择字符串?
- 18. DDD是否可以解释字符串?
- 19. 是否可以normalizr字符串?
- 20. java 1.4 -sql server2000:是否可以将文本追加到字符串中的大小在gbs中的字符串
- 21. 附加字符串
- 22. 附加字符串
- 23. 是否可以定义一个返回文本字符串的CAPL函数?
- 24. 是否可以使用没有CMS的富文本编辑器?
- 25. 富文本框字符集
- 26. 从2个富文本字段中的1个获取附件名
- 27. 是否可以在IE8中附加多个文件?
- 28. 将文字字符串(纯文本)附加到XPath结果
- 29. 是否可以在字符串中包含数字附近添加一些字符?
- 30. 我可以确定一个字符串是否是MongoDB ObjectID?
看着它似乎没有可能的Javadoc。您可以一直创建一个新的HSSFRichTextStrings与串联的字符串,并重新应用格式... – assylias 2012-03-14 09:35:46
但我不能肯定地说,格式化已应用于已存在于单元格中的富文本字符串。那怎么办呢?是否有可能获得丰富的文本字符串的字体? – 2012-03-14 09:41:01
我不知道HSSFRichTextStrings是如何工作的,我只是看着javadoc。它具有逐字符读写格式的方法 - 所以我原以为你可以使用它们......(http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFRichTextString.html #applyFont%28int,%20int,%20short%29)和(http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFRichTextString.html#getFontAtIndex%28int%29) – assylias 2012-03-14 09:47:34