Apache poi - 打印布局,同一张表中的多个打印区域

时间:2013-02-15 16:42:58

标签: java apache-poi

我正在尝试开发一个复杂的报告,我需要为excel文件设置打印区域。我必须将xls文件分成3部分,但如果我执行setPrintArea(..),新区域会订阅旧的,结果是我在打印预览中只有最后一页。如何设置多个打印区域?这是代码:

protected void createCustomerSheet(String label) {
    createSheet(label);
    getCurrentSheet().getPrintSetup().setPaperSize(PrintSetup.A4_PAPERSIZE);
    getCurrentSheet().getPrintSetup().setFitHeight((short)1);
    getCurrentSheet().getPrintSetup().setFitWidth((short)1);
    getCurrentSheet().setAutobreaks(true);
    getCurrentSheet().setFitToPage(true);
}

然后我打了3次

 wb.setPrintArea(activeSheetIndex, startColumn, endColumn, startRow, endRow);

我也尝试添加中断行,但它不起作用..

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

Excel只为电子表格维护一个print area。因此,Apache POI的Excel API提供了set one print area的能力。

听起来您可能正在尝试定义报告的不同页面。如果是这样,您需要在每个工作表中设置要完成此操作的行和/或列分隔符。使用Sheet的以下方法,假设sheetSheet个实例:

sheet.setAutobreaks(false);
sheet.setRowBreak(rowIndex);
sheet.setColumnBreak(columnIndex);

您可以多次调用最后两种方法中的每一种来建立多个中断。

答案 1 :(得分:1)

您可以设置多个打印范围:

try (final Workbook wb = new HSSFWorkbook(new FileInputStream("in.xls"))) {
    wb.setPrintArea(0,  "$E$6:$F$12,$H$16:$I$25,$J$18:$L$26");
    wb.write(new FileOutputStream("out.xls"));
}

答案 2 :(得分:1)

这就是我为纸张设置打印区域的方法。

// set print area
workbook.setPrintArea(
    workbook.getSheetIndex(sheet.getSheetName()), //sheet index
    0, //start column
    x, //end column
    0, //start row
    i  //end row
);