使用Apache POI检测所需的打印方向

10

我正在使用Apache POI创建xls电子表格。有没有办法检测数据是否适合纵向模式,或者是否必须将工作表设置为横向模式?我知道如何设置模式,但是不知道如何找出数据是否适合当前的打印方向。

2个回答

6
   HSSFPrintSetup printSetup = sheet.getPrintSetup();
    sheet.getPrintSetup().setFitWidth((short) 1);
    sheet.getPrintSetup().setFitHeight((short) 0);
    sheet.setAutobreaks(true);
    printSetup .setLandscape(true);

   HSSFFooter footer = wygSheet.getFooter();
    footer.setCenter("Page " + HSSFFooter.page() + " of "+ HSSFFooter.numPages());

对我来说没有起作用,但是如果我将setFitHeight从0改为1,那么它就可以工作了。 - The Guest

4
我已经尝试过但无法找到方法使其工作。
当您创建工作簿时,poi默认将Fit Height和Width设置为1。
Fit Height是要适应表格的页面高度数量,
而Fit Width是要适应表格的页面宽度数量。
除非您将表格打印的高度和宽度设置为更高的值,例如:
sheet.getPrintSetup().setFitHeight((short)10);

System.out.println (sheet.getPrintSetup().getFitWidth());
System.out.println (sheet.getPrintSetup().getFitHeight());

始终返回1和1

问题是Excel将始终压缩数据(在缩放大小上)到10%,以适应1 x 1页面布局。[在MS_Excel中,这显示为打印预览>页面设置>缩放>缩小到实际大小的X%]

一旦缩放比例为10%,则会将数据溢出到第2页等。

我尝试了一个有大量数据的工作表,甚至发送了一个大型PrintArea

workBook.setPrintArea(
                    0, //sheet index
                    0, //start column
                    50, //end column
                    0, //start row
                    520  //end row
            );

以各种打印尺寸为准。

sheet.getPrintSetup().setPaperSize((short)11); // A5 

因此,除非您覆盖它们,否则默认的可打印区域/方向不会改变,因此我认为数据无法被检测到大于可打印区域 - 这就是您要获取的内容。
这可能是POI邮件列表之一。
已更新,包括链接到POI邮件列表上的讨论,正如OP所要求的那样。 http://mail-archives.apache.org/mod_mbox/poi-user/201010.mbox/%3c4CBDD258.80407@openforce.com>


我已经在POI邮件列表上提出了这个问题,但没有得到答案。嗯...也许答案是不可能的,就像你提到的那样。我会再等几天,看看是否有人能想出解决方案(虽然我怀疑)。 - black666

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接