2011-01-06 16 views
68

Używam Apache POI API do generowania excel spreadsheet, aby wyprowadzić niektóre dane.Apache POI Excel - jak skonfigurować kolumny do rozwinięcia?

Problem, przed którym stoję, to tworzenie i otwieranie arkusza kalkulacyjnego, kolumny nie są rozwijane, więc na pierwszy rzut oka nie wyświetla się jakiś długi tekst, taki jak tekst sformatowany w formacie Data.

Mogę tylko dwukrotnie kliknąć krawędź kolumny w programie Excel, aby rozwinąć lub przeciągnąć krawędź, aby dostosować szerokość kolumny, ale może być ponad 20 kolumn i nie ma możliwości, aby to zrobić ręcznie przy każdym otwarciu arkusza kalkulacyjnego: (

i okazało się (choć może być niewłaściwy sposób) groupRow() i setColumnGroupCollapsed() może być w stanie załatwić sprawę, ale bez powodzenia. może używam go w niewłaściwy sposób.

Kod Przykładowy fragment

 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 tekst "tekst Looooooong nie wyświetla się pierwszy" znajduje się w komórce, ale ponieważ kolumna nie jest rozwinięta, wyświetla się tylko "Loooooooo".

Jak mogę to skonfigurować, aby po otwarciu arkusza kalkulacyjnego kolumna była już rozszerzona?

+0

http://stackoverflow.com/questions/20190317/apache-poi-excel-big- auto-column-width – gavenkoa

+0

Wygląda na to, że szukasz sposobu na wykorzystanie punktów POI, aby to osiągnąć. Ale aby to zrobić, wystarczy w Excelu wybrać cały arkusz i dwukrotnie kliknąć granicę nagłówka kolumny A-B. Jeśli chcesz to zrobić na kilku arkuszach, zakodowane rozwiązanie może ci lepiej służyć. – avg

Odpowiedz

126

Po dodaniu wszystkich danych do arkusza, można zadzwonić autoSizeColumn(int column) na arkuszu do AutoFit kolumny do właściwego rozmiaru

Tu jest link do API.

Zobacz ten post dla więcej odniesienie Problem in fitting the excel cell size to the size of the content when using apache poi

+3

Chciałem tylko podkreślić, że 'autoSizeColumn' nie skaluje się dobrze i będzie * super * wolne, jeśli masz dużo wierszy. Musiałem trochę zhakować i zrobić coś podobnego do tego, co zasugerowano [w tym pytaniu] (http://stackoverflow.com/questions/18983203/how-to-speed-up-autosizing-columns-in-apache-poi). – lbstr

+3

** Ostrzeżenie dotyczące ** * autoSizeColumn *, wymaga dostępności czcionki Java. To nie jest część bezgłowego Java Jre używanego na serwerach i rzuci wyjątek NullPointerException. –

5

Można spróbować czegoś takiego:

HSSFSheet summarySheet = wb.createSheet(); 
summarySheet.setColumnWidth(short column, short width); 

Tutaj params są: numer kolumny w arkuszu, a jej szerokość Ale jednostki szerokości są dość małe, można spróbować 4000 na przykład.

+0

Dobrze wiedzieć dzięki! Myślę, że dla mojego celu, w którym ciąg kolumnowy może być generowany dynamicznie, metoda automatycznego rozmiaru zmieściłaby się w tej sprawie. –

36

Wskazówka: Aby uczynić pracę rozmiarze Auto, wywołanie sheet.autoSizeColumn(columnNumber) należy po wypełniania danych do Excela.

Wywołanie metody przed zapełnieniem danych nie przyniesie efektu.

8

Dla Excel POI:

sheetName.autoSizeColumn(cellnum); 
4

przykładowy kod poniżej

HSSFWorkbook wb = new HSSFWorkbook(); 
HSSFSheet sheet = wb.createSheet("your sheet name"); 
HSSFRow row = sheet.createRow(0); 

cell = row.createCell(0); 
cell.setCellValue("A BIG NAME WITH AUTO SIZE FEATURE ENABLED"); 

// to jest kluczowa

sheet.autoSizeColumn(0); 

// argument musi być numer komórkowy

cell = row.createCell(1); 
cell.setCellValue("a big name without auto size feature enabled"); 

Sprawdź wyjście i zwariować :)

+2

sheet.setColumnWidth (kolumnaIndex, szerokość) to również metoda, którą chcesz obejrzeć – Mateen

18

Jeśli chcesz auto rozmiar wszystkich kolumn w skoroszycie, tutaj jest to metoda, która może być przydatna:

public void autoSizeColumns(Workbook workbook) { 
    int numberOfSheets = workbook.getNumberOfSheets(); 
    for (int i = 0; i < numberOfSheets; i++) { 
     Sheet sheet = workbook.getSheetAt(i); 
     if (sheet.getPhysicalNumberOfRows() > 0) { 
      Row row = sheet.getRow(0); 
      Iterator<Cell> cellIterator = row.cellIterator(); 
      while (cellIterator.hasNext()) { 
       Cell cell = cellIterator.next(); 
       int columnIndex = cell.getColumnIndex(); 
       sheet.autoSizeColumn(columnIndex); 
      } 
     } 
    } 
} 
-1

Można użyć setColumnWidth() jeśli chcesz aby powiększyć swoją komórkę.

0

Jego bardzo prosty, użyj tego kodu w jednej linijce dataSheet.autoSizeColumn (0)

lub podać numer kolumny w uchwycie dataSheet.autoSizeColumn (numer komórki)

0

Jeśli znasz liczbę Twoje kolumny (np. równa się lista kolekcji). Można po prostu skorzystać z tej jednej wkładki, aby dostosować wszystkie kolumny jednym arkuszu (jeśli używasz przynajmniej Java 8):

IntStream.range(0, columnCount).forEach((columnIndex) -> sheet.autoSizeColumn(columnIndex)); 
Powiązane problemy