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

bla*_*666 9 java apache-poi

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

小智 5

   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());
Run Code Online (Sandbox Code Playgroud)


Jos*_*seK 4

我已经尝试过,但找不到办法让它发挥作用。

创建工作簿时,poi 默认“适合高度”和“宽度”均为 1。

适合高度是适合纸张的页数高度

适合宽度是适合纸张的页数

除非您将纸张打印高度和宽度设置为更高的值,如下所示,

sheet.getPrintSetup().setFitHeight((short)10);

System.out.println (sheet.getPrintSetup().getFitWidth());
System.out.println (sheet.getPrintSetup().getFitHeight());
Run Code Online (Sandbox Code Playgroud)

总是返回 1 和 1

问题是 Excel 总是将数据(以缩放大小)压缩至 10% 以适应 1 x 1 页面布局。[在 MS_Excel 中,这显示为Print Preview > Page Setup > Scaling > Down to X% of actual size ]

一旦缩放达到 10%,数据就会溢出到第 2 页,依此类推。

我尝试过一张包含大量数据的工作表,甚至发送了一个大的 PrintArea

workBook.setPrintArea(
                    0, //sheet index
                    0, //start column
                    50, //end column
                    0, //start row
                    520  //end row
            );
Run Code Online (Sandbox Code Playgroud)

各种打印尺寸。

sheet.getPrintSetup().setPaperSize((short)11); // A5 
Run Code Online (Sandbox Code Playgroud)

因此,默认的可打印区域/方向不会更改,除非您覆盖它们,所以我认为无法检测到数据大于可打印区域 - 这就是您想要获得的。

这可能是 POI 邮件列表之一。

按照 OP 的要求,已更新以包含 POI 邮件列表上此讨论的链接。

http://mail-archives.apache.org/mod_mbox/poi-user/201010.mbox/%3c4CBDD258.80407@openforce.com%3e