Używam Apache POI API
do generowania excel spreadsheet
danych.
Problem, z którym się spotykam, polega na tym, że po utworzeniu i otwarciu arkusza kalkulacyjnego kolumny nie są rozwinięte, więc na pierwszy rzut oka nie pojawia się jakiś długi tekst, taki jak tekst sformatowany w formacie daty.
Mógłbym po prostu dwukrotnie kliknąć obramowanie kolumny w programie Excel, aby rozwinąć lub przeciągnąć obramowanie, aby dostosować szerokość kolumny, ale może być ponad 20 kolumn i nie ma możliwości, aby robić to ręcznie za każdym razem, gdy otwieram arkusz kalkulacyjny :(
Dowiedziałem się (chociaż może to być zła metoda) groupRow()
i setColumnGroupCollapsed()
może uda mi się załatwić sprawę, ale bez powodzenia. Może używam go w niewłaściwy sposób.
Przykładowy fragment kodu
Workbook wb = new HSSFWorkbook();
CreationHelper createHelper = wb.getCreationHelper();
//create sheet
Sheet sheet = wb.createSheet("masatoSheet");
//not really working yet.... :(
//set group for expand/collapse
//sheet.groupRow(0, 10); //just random fromRow toRow argument values...
//sheet.setColumnGroupCollapsed(0, true);
//create row
Row row = sheet.createRow((short)0);
//put a cell in the row and store long text data
row.createCell(0).setCellValue("Loooooooong text not to show up first");
Po utworzeniu tego arkusza kalkulacyjnego w komórce znajduje się ciąg „Looooooong tekst, który nie jest wyświetlany jako pierwszy”, ale ponieważ kolumna nie jest rozwinięta, pojawia się tylko „Loooooooo”.
Jak mogę to skonfigurować, aby po otwarciu arkusza kalkulacyjnego kolumna była już rozwinięta ???
źródło
Odpowiedzi:
Po dodaniu wszystkich danych do arkusza możesz wywołać
autoSizeColumn(int column)
w arkuszu automatyczne dopasowanie kolumn do odpowiedniego rozmiaruOto link do interfejsu API .
Zobacz ten post, aby uzyskać więcej informacji. Problem z dopasowaniem rozmiaru komórki programu Excel do rozmiaru zawartości podczas korzystania z apache poi
źródło
autoSizeColumn
nie skaluje się dobrze i będzie bardzo powolny, jeśli masz wiele rzędów. Musiałem trochę się zepsuć i zrobić coś podobnego do tego, co zostało zasugerowane w tym pytaniu .Wskazówka: aby rozmiar automatyczny działał, wywołanie
sheet.autoSizeColumn(columnNumber)
należy wykonać po wypełnieniu danych w programie Excel.Wywołanie metody przed wypełnieniem danych nie przyniesie żadnego efektu.
źródło
(5 until row.lastCellNum).forEach { colNum -> val columnWidth = (row.getCell(colNum).toString().length * 0.44 + 2.24) * 768 reportSheet.setColumnWidth(colNum, columnWidth.toInt()) }
Jeśli chcesz automatycznie zmienić rozmiar wszystkich kolumn w skoroszycie, oto metoda, która może być przydatna:
źródło
NullPointerException
corow.cellIterator()
. Czy to dlatego, że nie mam wartości w jednej z komórek?Możesz spróbować czegoś takiego:
Tutaj parametry to: numer kolumny w arkuszu i jej szerokość Ale jednostki szerokości są dość małe, możesz na przykład spróbować 4000.
źródło
Dla Excel POI:
źródło
przykładowy kod poniżej
// to jest kluczowe
// argument musi być numerem komórki
Sprawdź wyjście i zwariuj :)
źródło
Jeśli znasz liczbę swoich kolumn (np. Jest to lista kolekcji). Możesz po prostu użyć tej jednej wkładki, aby dostosować wszystkie kolumny jednego arkusza (jeśli używasz przynajmniej Java 8):
źródło
Używam poniżej prostego rozwiązania:
Oto Twój skoroszyt i arkusz:
następnie dodaj dane do arkusza z kolumnami i wierszami. Po dodaniu danych do arkusza wpisz następujący kod do
autoSizeColumn
szerokości.Tutaj zamiast 15 dodajesz liczbę kolumn w arkuszu.
Mam nadzieję, że ktoś w tym pomoże.
źródło
Jest to bardzo proste, użyj tego jednowierszowego kodu dataSheet.autoSizeColumn (0)
lub podaj liczbę kolumn w nawiasie dataSheet.autoSizeColumn (numer komórki)
źródło
Możesz również zawinąć tekst. Przykładowy kod PFB:
źródło
Możesz użyć,
setColumnWidth()
jeśli chcesz bardziej rozszerzyć swoją komórkę.źródło