9

我正在尝试使用适用于 Java 的 Apache POI 库创建一些 xlsx 文件,并且创建文件的一切工作正常。

当我想使用物理打印机打印这些文件时,问题就来了。我想让我的工作簿中的每张纸都适合单页。我查看了文档,下面的代码应该可以工作:

       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();

但它没有......当我尝试打印它时,它会打印到三张纸上(如果我不使用 PrintSetup 部分,它实际上应该打印的内容)。所以代码根本不做任何事情。

谁能告诉我该代码有什么问题?

另外,我还有一个关于打印 xlsx 文件的问题:我想知道是否有一种方法可以从我的 Java 程序中打印 xlsx 文件,而无需实际打开文件并单击打印?像wb.printAllSheetsInWorkbook(); 或类似的东西。

4

2 回答 2

20

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

采用

sheet.setFitToPage(true);
于 2012-09-11T18:30:26.297 回答
0

不适用于 poi-3.8 和使用 xls 格式的 office 2013

如果我从 poi 创建工作表,则设置不起作用。如果我在 office excel 中打开/创建工作表,并从 office excel 设置页面高度(例如,设置为 2 页),然后保存,然后运行程序以读取此工作表并设置高度/宽度(例如,设置为 1页),然后它工作。

如果我们从 poi 生成工作表,似乎记录不会被写入。如果记录已经存在,那么 poi 可以更新它。

Another weird thing - generate xls from poi - 6kb. open the excel in office and save - 22 kb. open the excel in office, adjust height/width and save - 30 kb. definitely poi isn't writing out the record when it generates the file. probably other info is also missing (22 )

于 2014-04-01T12:51:31.227 回答