我需要在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