Ich habe ein vorhandenes Word-Dokument mit einer Tabelle. Die erste Zeile der Tabelle hat zwei Zellen, aber alle anderen Zeilen haben vier Zellen und jede Zelle hat eine andere Breite.Apache POI - Wie richtige Spaltenbreite in Word-Tabelle
Ich muss neue Zeilen über POI einfügen, die auch vier Zellen mit Breiten haben, die mit denen der vorhandenen 4-Zellen-Zeilen übereinstimmen.
Der Grundcode ist:
XWPFTable table = doc.getTableArray(0);
XWPFTableRow oldRow = table.getRow(2);
table.insertNewTableRow(3);
XWPFTableRow newRow = table.getRow(3);
XWPFTableCell cell;
for (int i = 0; i < oldRow.getTableCells().size(); i++) {
cell = newRow.createCell();
CTTblWidth cellWidth = cell.getCTTc().addNewTcPr().addNewTcW();
BigInteger width = oldRow.getCell(i).getCTTc().getTcPr().getTcW().getW();
cellWidth.setW(width); // sets width
XWPFRun run = cell.getParagraphs().get(0).createRun();
run.setText("NewRow C" + i);
}
Das Ergebnis davon ist, dass die Reihe 3 vier Zellen aufweist, aber ihre Breiten als die nicht gleich sind die die Reihe 2. Die Gesamtbreite neue Zeile endet überein Gesamtbreite der ersten drei Zellen der Zeile 2. (Tut mir leid, ich weiß nicht, wie Sie die Word-Tabelle hier einfügen).
Wenn ich jedoch zuerst das Quelldokument manuell bearbeiten, so dass die erste Tabellenzeile auch vier Zellen hat, dann funktioniert alles perfekt. Wenn ich eine Referenz auf eine bestehende Zeile bekomme und sie zur Tabelle hinzufüge, sind die Zellbreiten ebenfalls korrekt (aber ich habe das gleiche Zeilenobjekt zweimal und kann es daher nicht ändern).
Es scheint, dass die Anzahl der Zellen in der ersten Zeile beeinflusst, wie andere Zeilen eingefügt werden. Macht das irgendjemanden Sinn und können Sie vorschlagen, wie man es überschreibt? Gibt es irgendwo ein Dokument, das ich studieren kann, um zu verstehen, wie das funktioniert? Vielen Dank.
Der Tabellencode ein wenig flippig jetzt ist. Es fügt Zellen mit leeren Absätzen für Sie hinzu, so dass Ihr Code am Ende der Zeile, die von 'table.insertNewTableRow (3)' erstellt wurde, hinzugefügt wird. Diese Zeile enthält eine Zelle, die einen Absatz enthält, mit dem Sie beginnen können. Sie werden derzeit Code suchen müssen.Du könntest die neueste Version ausprobieren, die vielleicht etwas besser funktioniert, aber ich denke nicht, dass es noch Korrekturen für den Tabellencode gibt. Am besten ist es, durch sie zu debuggen, um festzustellen, was passiert. – jmarkmurphy