我想在poi的特定位置插入一個表,但會生成該表,但我發現該表不可見。HWPF-POI:插入到poi hwpf文檔中的表不可見
使用macOS及其文本工具預覽或編輯此文檔時,doc中生成的表格可見,POI也可以讀取表格和內容。我計劃上傳4張照片來顯示該過程,但我只能張貼2張圖片,對此抱歉。
@Test
public void exportDoc() throws Exception {
FileInputStream readFile = new FileInputStream(new File(readDoc));
FileOutputStream replaceFile = new FileOutputStream(new File(replaceDoc));
HWPFDocument document = new HWPFDocument(readFile);
Table table = WordUtil.insertNewTable(document,"${table}");
insertTableInDoc(table);
document.write(replaceFile);
readFile.close();
replaceFile.close();
}
private Table insertNewTable(HWPFDocument doc, String sourceValue) {
Range range = doc.getRange();
Table table = null;
for (int i = 0; i < range.numSections(); ++i) {
Section s = range.getSection(i);
for (int x = 0; x < s.numParagraphs(); x++) {
Paragraph p = s.getParagraph(x);
if (p.text().contains(sourceValue)) {
//remove target text
range.replaceText(sourceValue, "");
table = p.insertTableBefore((short) 3, 3);
return table;
}
}
}
return table;
}
private void insertTableInDoc(Table table) {
int count = 1;
for (int rowNum = 0; rowNum < table.numRows(); rowNum++) {
TableRow tableRow = table.getRow(rowNum);
for (int colNum = 0; colNum < tableRow.numCells(); colNum++) {
TableCell cell = tableRow.getCell(colNum);
Paragraph paragraph = cell.getParagraph(0);
CharacterRun characterRun = paragraph.getCharacterRun(0);
characterRun.insertBefore("number: " + count++);
}
}
}
PS:
我確定這不是microsoft for mac的問題,windows平臺的doc中的生成表也是不可見的。
(第一時間問問題,如果有什麼錯誤或我的表達是不明確的,請讓我知道,我會修改,而不會延遲。謝謝)
供您參考:我可以重現您的問題。好像添加了insertTableBefore的表的固定寬度爲0.甚至Word GUI也無法修復此問題。但我不會再用HWPF(二進制Word格式)。此格式自2007年起已過時.XWPF(Office OpenXML)是當前的格式。由於沒有人回答,我相信我不是唯一有此意見的人。 –
非常感謝您的關注和答覆。我之前向我的產品經理解釋了doc和docx之間的區別,但她堅持支持doc類型。看來我們必須改變我們的策略,只允許用戶在docx類型的表中輸出帶有表格的單詞。 –