Tworzenie tabeli w poi było dość łatwe, ale ma bardzo ograniczone samouczki i nie mogę znaleźć takiego, który może utworzyć prostą scaloną komórkę w tabeli podczas generowania pliku docx.Jak scalić komórki (lub zastosować colspan) za pomocą XWPFTable w POI w Javie?
Odpowiedz
Jeśli utworzono tabelę, wiersz wewnątrz tabeli i komórki w środku rzędu, można dodać gridSpan do właściwości komórek:
if (cell.getCTTc().getTcPr() == null) cell.getCTTc().addNewTcPr();
if (cell.getCTTc().getTcPr().getGridSpan() == null) cell.getCTTc().getTcPr().addNewGridSpan();
cell.getCTTc().getTcPr().getGridSpan().setVal(2);
Uwaga: komórka jest org.apache.poi.xwpf.usermodel.XWPFTableCell .
Tworzenie oddzielnego XWPFTable
dla każdego wiersza tabeli będzie działało i powinno być idealnie dokładne. Wszystkie tabele są scalane za kulisami do jednej tabeli w ostatecznym dokumencie tekstowym. trzeba będzie wszystkie te słoiki poi-3.9.jar
, poi-ooxml-3.9.jar
i poi-ooxml-schemas-3.9.jar
XWPFTable table1 = document.createTable(1,1); // This is your row 1
XWPFTable table2 = document.createTable(1,3); // This is your row 2
// Now it's time to span each column of table1 and table2 to a span of your choice
// lets say 6 is the total span required assuming there's some row with 6 columns.
spanCellsAcrossRow(table1, 0, 0, 6);
spanCellsAcrossRow(table2, 0, 0, 2);
spanCellsAcrossRow(table2, 0, 1, 2);
spanCellsAcrossRow(table2, 0, 2, 2);
private void spanCellsAcrossRow(XWPFTable table, int rowNum, int colNum, int span) {
XWPFTableCell cell = table.getRow(rowNum).getCell(colNum);
cell.getCTTc().getTcPr().addNewGridSpan();
cell.getCTTc().getTcPr().getGridSpan().setVal(BigInteger.valueOf((long)span));
}
Aby połączyć poziomo/pionowo trzeba utworzyć 2 CTHMerge i użyć SETVAL:
- jeden dla komórek, które będą pozostawać (STMerge.RESTART);
- druga dla scalonych komórek (STMerge.CONTINUE);
a) Przykładem poziomej scalania tabeli 2x2 (image with example):
| ___________ | ___________ | -> | ___________ ___________ |
| ___________ | ___________ | -> | ___________ ___________ |
// First Row
CTHMerge hMerge = CTHMerge.Factory.newInstance();
vmerge.setVal(STMerge.RESTART);
table.getRow(0).getCell(0).getCTTc().getTcPr().setHMerge(hMerge);
table.getRow(1).getCell(0).getCTTc().getTcPr().setHMerge(hMerge);
// Secound Row cell will be merged/"deleted"
CTHMerge hMerge1 = CTHMerge.Factory.newInstance();
hMerge.setVal(STMerge.CONTINUE);
table.getRow(0).getCell(1).getCTTc().getTcPr().setHMerge(hMerge1);
table.getRow(1).getCell(1).getCTTc().getTcPr().setHMerge(hMerge1);
b) Przykład pionowej połączyć (image with example)
// First Row
CTVMerge vmerge = CTVMerge.Factory.newInstance();
vmerge.setVal(STMerge.RESTART);
table.getRow(0).getCell(0).getCTTc().getTcPr().setVMerge(vmerge);
table.getRow(0).getCell(1).getCTTc().getTcPr().setVMerge(vmerge);
// Secound Row cell will be merged
CTVMerge vmerge1 = CTVMerge.Factory.newInstance();
vmerge.setVal(STMerge.CONTINUE);
table.getRow(1).getCell(0).getCTTc().getTcPr().setVMerge(vmerge1);
table.getRow(1).getCell(1).getCTTc().getTcPr().setVMerge(vmerge1);
Twoje rozwiązanie sprawdziło się, ale dodałem, aby nieco zmodyfikować je, dodając: 'if (cell.getCTTc(). GetTcPr() == null) cell.getCTTc(). AddNewTcPr();' – IronRabbit
- 1. za pomocą poi, Jak ustawić typ komórki jako numer
- 2. Ustaw dynamicznie colspan za pomocą jquery
- 3. Ustawienie części zawartości komórki pogrubioną za pomocą apache poi?
- 4. Otrzymuj identyfikator referencyjnej komórki Cell za pomocą Apache POI
- 5. Jak scalić dwie komórki w układzie tabeli
- 6. Zestaw colspan/rowspan dla komórki
- 7. Jak zastosować styl komórki do DataGrid komórki
- 8. Wymiana colspan = "2" z colspan = "4" za pomocą Jquery
- 9. TStringGrid scalić rysunek komórki
- 10. Jak zastosować kolor tła dla wierszy w arkuszu programu Excel za pomocą Apache POI?
- 11. jak odczytać wartość wszystkich komórek za pomocą Apache POI?
- 12. XSSF POI jest datą komórki
- 13. Jak scalić dwie komórki wiersza qtable?
- 14. Jak uzyskać wartość pustej komórki programu Excel w apache POI?
- 15. Jak scalić dwie listy za pomocą LINQ?
- 16. jak ustawić tytuły wydruku w arkuszu Excel za pomocą POI?
- 17. Przeczytaj excel fie w java za pomocą poi
- 18. jak scalić komórki dynamicznie JXLS API w przekształconej szablonu
- 19. Jak scalić wideo za pomocą AVMutableComposition w iPhone sdk
- 20. Jak scalić kolumnę w Excelu za pomocą PHPExcel
- 21. Jak scalić dwie tabele w jedną za pomocą mongify
- 22. Wyodrębnianie komórki tabeli MS Word jako obrazu?
- 23. Ustawianie formatu daty za pomocą Apache POI
- 24. Jak edytować komórki w rzadkiej macierzy za pomocą scipy?
- 25. Jak zmienić kolor tekstu w tej samej komórce arkusza programu Excel za pomocą apache poi?
- 26. Jak zmienić kolor czcionki konkretnej komórki apache poi 3.9
- 27. Jak zastosować poprawkę wygenerowaną za pomocą łatki w formacie git?
- 28. Kopiowanie arkusza kalkulacyjnego za pomocą Apache POI
- 29. Automatyczne przeliczanie komentarzy za pomocą apache-poi
- 30. Odśwież tabelę przestawną za pomocą Apache POI
Dzięki !! Pracował cudownie. –
Oczywiście, głosowałem na tę odpowiedź. Nie sądzę, że istnieje sposób, który mogę zaakceptować jako odpowiedź, ponieważ nie zadałem pierwotnego pytania. Daj mi znać, jeśli to rzeczywiście możliwe. –
Witam, próbowałem tego użyć i poprawnie ustawiono rozpiętość komórki, ale pozostawiam komórki poza tabelą (po prawej) równe rozmiarowi rozpiętości. Próbowałem je przyciąć, usuwając je za pomocą XWPFTableRow.removeCell (pos). Potwierdziłem, że są one usuwane w obiekcie wiersza Java, ale gdy tabela renderuje się i jest wyświetlana w programie Word, wciąż tam są. Czy wiesz, jak usunąć te nadmiarowe komórki? –