2012-04-09 28 views
8

Próbuję utworzyć niektóre pliki xlsx przy użyciu biblioteki punktów Apache dla Javy i wszystko, co trzeba, aby utworzyć pliki, działa poprawnie.Problemy z dopasowaniem arkusza do pojedynczej strony w plikach xlsx przy użyciu biblioteki Apache POI

Problem pojawia się, gdy chcę wydrukować te pliki przy użyciu fizycznej drukarki. Chcę, aby każdy arkusz w moich skoroszytach pasował do jednej strony. Rozejrzałem się w dokumentacji i następujący kod będzie miał działać:

 XSSFWorkbook wb = new XSSFWorkbook(); 
     XSSFSheet sheet = wb.createSheet("format sheet"); 

     PrintSetup ps = sheet.getPrintSetup(); 

     sheet.setAutobreaks(true); 

     ps.setFitHeight((short)1); 
     ps.setFitWidth((short)1); 

     for(int i = 0; i < 100; ++i){ 
      sheet.createRow(i); 
      sheet.getRow(i).createCell(0).setCellValue("Test " + i); 
     } 

     FileOutputStream output = new FileOutputStream("Test.xlsx"); 
     wb.write(output); 
     output.close(); 

Ale to nie ... Kiedy próbuję go wydrukować, drukuje do trzech arkuszy (co byłoby rzeczywiście rzekomych wydrukować, jeśli nie korzystałem z części PrintSetup). Tak więc kod po prostu nic nie robi.

Czy ktoś może mi powiedzieć, co jest nie tak z tym kodem?

Mam również inne pytanie dotyczące drukowania plików xlsx: Chcę wiedzieć, czy istnieje sposób drukowania plików Xlsx z mojego programu Java bez faktycznego otwierania plików i klikania na wydruku? Podobnie jak wb.printAllSheetsInWorkbook(); lub coś w tym stylu.

Odpowiedz

19

Po

ps.setFitHeight((short)1); 
ps.setFitWidth((short)1); 

Zastosowanie

sheet.setFitToPage(true); 
+0

Znalazłem to podczas lokowania dla podobnego problemu, ale używając NPOI (.NET Port of POI) i podążałem za równoważnymi akcjami, o których wspomniałeś przy najmniejszej zmianie; Ustawiłem FitHeight = 0, aby program Excel zrobił "Dopasuj wszystkie kolumny na jednej stronie". Pracował jak urok! Dzięki! – Rynkadink

+0

Pomaga mi (http://stackoverflow.com/a/12072291/3587592). – 0x5a4d

+2

Dodawanie pliku sheet.setAutobreaks (true); before sheet.setFitToPage (true); pracował dla mnie. –

0

nie działa z poi-3,8-biurowy 2013 pracuje w formacie xls

jeśli utworzyć arkusz z poi, ustawienia don nie działa. Jeśli otworzę/utworzę arkusz w programie Excel Office i ustawię wysokość strony z programu Excel Excel (na 2 strony) i zapiszę, a następnie uruchom program, aby przeczytać ten arkusz i ustawić wysokość/szerokość (np. 1 strona), to działa.

Wygląda na to, że rekord nie zostanie zapisany, jeśli wygenerujemy arkusz z pliku POV. jeśli rekord już istnieje, to poi jest w stanie go zaktualizować.

Kolejna dziwna rzecz - wygeneruj xls z poi - 6kb. otwórz program Excel w biurze i zapisz - 22 kb. otwórz program Excel w biurze, dostosuj wysokość/szerokość i zapisz - 30 kb. zdecydowanie poi nie zapisuje rekordu podczas generowania pliku. prawdopodobnie inne informacje również są nieobecne (22)

+1

Ha! dlaczego szukasz odpowiedzi na kilka dni, a potem, gdy publikujesz pytanie, sam dostajesz odpowiedź w kilka sekund! ** sheet.setAutobreaks (true); ** jest potrzebne, aby ustawienie zadziałało. – user3485166

Powiązane problemy