2013-02-15 223 views
1

我正在嘗試開發一個複雜的報告,並且需要爲excel文件設置打印區域。我必須將xls文件分成三部分,但如果我執行setPrintArea(..),則新區域會訂閱舊的文件,結果是我只能在打印預覽中查看最後一頁。我如何設置多個打印區域?這是代碼:Apache poi - 打印佈局,在同一張紙上有多個打印區域

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

我也試圖添加破行,但它不工作..

任何想法?

回答

6

Excel只爲電子表格維護一個print area。所以Apache POI的Excel API提供了set one print area的功能。

這聽起來像你可能試圖定義報告的不同頁面。如果是這樣,您需要在每張工作表中設置行和/或列中斷。使用的Sheet下面的方法,假設sheet是您的Sheet實例:

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

你可以叫各的那最後2種方法多次以建立多休息。

+0

我試過用行和列中斷,也許出了什麼問題。我會再試一次,但在Excel中,我看到了「添加到printArea」的機會,並且我在apache poi文檔中沒有找到任何有關此內容的信息 – Vargan 2013-02-15 18:46:00

+0

您的回答很好,我需要將其添加到我的工作表中它被setScale – Vargan 2013-02-19 11:33:08

+0

@Vargan你可以更具體的如何使用setScale()? – 2015-11-22 16:08:16

0

可以設置多個打印範圍是這樣的:

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")); 
} 
+0

不,你不能! – amdev 2016-06-21 08:11:23

0

這是我如何設置打印區域對我的牀單。

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