2016-12-14 416 views
1

我現在正在使用Apache POI從Java創建一個excel,我需要在導出的excel中展開/摺疊全部。請在展開之前和之後找到我想要的下面的圖像,以及我嘗試的下面的代碼。 (如果你在嘗試結束,它可能需要jar)。任何人都可以請幫忙。Apache POI - 全部展開/全部摺疊

enter image description here enter image description here

代碼:

package com.skumar.excel; 

import java.io.FileOutputStream; 
import java.util.Set; 
import java.util.TreeSet; 

import org.apache.poi.xssf.usermodel.XSSFCellStyle; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.CellStyle; 
import org.apache.poi.ss.usermodel.Font; 
import org.apache.poi.ss.usermodel.IndexedColors; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Workbook; 

public class ExcelGroupData { 


    public static void main(String[] args) 
    { 

     String excelFilename = null; 

     ExcelGroupData myExcel = new ExcelGroupData(); 
     /* if (args.length < 1) 
     { 
      System.err.println("Usage: java "+ myExcel.getClass().getName()+ 
      " Excel_Filename"); 
      System.exit(1); 
     } 

     excelFilename = args[0].trim();*/ 
     excelFilename = "C:\\aaa\\excel.xls"; 
     myExcel.generateExcel(excelFilename); 

    } 

    public void generateExcel(String excelFilename){ 

     try { 

      //New Workbook 
      Workbook wb = new XSSFWorkbook(); 

      Cell c = null; 

      //Cell style for header row 
      CellStyle cs = wb.createCellStyle(); 
      cs.setFillForegroundColor(IndexedColors.LIME.getIndex()); 
      cs.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); 
      Font f = wb.createFont(); 
      f.setBoldweight(Font.BOLDWEIGHT_BOLD); 
      f.setFontHeightInPoints((short) 12); 
      cs.setFont(f); 

      //Cell style for summary row 
      CellStyle css = wb.createCellStyle(); 
      f = wb.createFont(); 
      f.setBoldweight(Font.BOLDWEIGHT_BOLD); 
      f.setFontHeightInPoints((short) 10); 
      css.setFont(f); 

      //New Sheet 
      XSSFSheet sheet1 = null; 
      sheet1 = (XSSFSheet) wb.createSheet("myData"); 

      // Row and column indexes 
      int idx = 0; 
      int idy = 0; 

      //Generate column headings 
      Row row = sheet1.createRow(idx); 
      c = row.createCell(idy); 
      c.setCellValue("Customer"); 
      c.setCellStyle(cs); 
      sheet1.setColumnWidth(idy, 10 * 500); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue("Order Number"); 
      c.setCellStyle(cs); 
      sheet1.setColumnWidth(idy, 10 * 500); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue("Order Total"); 
      c.setCellStyle(cs); 
      sheet1.setColumnWidth(idy, 10 * 500); 
      idy++; 



      //Next row and reset column 
      idx = idx + 1; 
      idy = 0; // reset column 



      //Header of First Group 
      int firstRow = idx + 1; 
      row = sheet1.createRow(idx); 
      c = row.createCell(idy); 
      c.setCellValue("ABC"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue("101"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue(10.99); 
      idy++; 

      //1st row of 1st Group 
      idx = idx + 1; 
      idy = 0; // reset column 
      row = sheet1.createRow(idx); 
      c = row.createCell(idy); 
      c.setCellValue("ABC1"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue("102"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue(22.23); 
      idy++; 

      //2nd row of 1st Group 
      idx = idx + 1; 
      idy = 0; // reset column 
      row = sheet1.createRow(idx); 
      c = row.createCell(idy); 
      c.setCellValue("ABC2"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue("105"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue(25.23); 
      idy++; 

      //3rd row of 1st Group 
      idx = idx + 1; 
      idy = 0; // reset column 
      int lastRow = idx + 1; 
      row = sheet1.createRow(idx); 
      c = row.createCell(idy); 
      c.setCellValue("ABC3"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue("103"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue(100.33); 
      idy++; 

      // Second Group: Populate detail row data 

      //Header of 2nd Group 
      idx = idx + 1; 
      idy = 0; // reset column 
      row = sheet1.createRow(idx); 
      c = row.createCell(idy); 
      c.setCellValue("XYZ"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue("103"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue(100.33); 
      idy++; 

      //1st row of 2nd Group 
      idx = idx + 1; 
      idy = 0; 
      row = sheet1.createRow(idx); 
      c = row.createCell(idy); 
      c.setCellValue("XYZ1"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue("103"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue(100.33); 
      idy++; 

      //2nd row of 2nd Group 
      idx = idx + 1; 
      idy = 0; // reset column 
      row = sheet1.createRow(idx); 
      c = row.createCell(idy); 
      c.setCellValue("XYZ2"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue("103"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue(100.33); 
      idy++; 

      //3rd row of 2nd Group 
      idx = idx + 1; 
      idy = 0; // reset column 
      int lastOfSecondGroup = idx+1; 
      row = sheet1.createRow(idx); 
      c = row.createCell(idy); 
      c.setCellValue("XYZ3"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue("103"); 
      idy++; 
      c = row.createCell(idy); 
      c.setCellValue(100.33); 
      idy++; 
      System.out.println(firstRow + " " + lastRow); 
      //Group the Rows together 
      sheet1.groupRow(1, lastOfSecondGroup-1); 
      sheet1.setRowGroupCollapsed(firstRow, true); 
      sheet1.setRowSumsBelow(false); 

      FileOutputStream fileOut = new FileOutputStream(excelFilename.trim()); 

      wb.write(fileOut); 
      fileOut.close(); 

     } 
     catch (Exception e) { 
      System.out.println(e); 
     } 

    } 

    private String getColumnName(int columnNumber) { 

     String columnName = ""; 
     int dividend = columnNumber + 1; 
     int modulus; 

     while (dividend > 0){ 
      modulus = (dividend - 1) % 26; 
      columnName = (char)(65 + modulus) + columnName; 
      dividend = (int)((dividend - modulus)/26); 
     } 
     return columnName; 
    } 
} 

回答

0

按照第一形象,你不能創建一個組實現這一結果。您需要兩組 - 一個從行2至5秒,從6行9

代碼應該是 -

 sheet1.groupRow(1, 4); 
     sheet1.setRowGroupCollapsed(1, true); 
     sheet1.groupRow(5, 8); 
     sheet1.setRowGroupCollapsed(5, true); 

我想,而不是這些硬編碼的行不行,會有一些邏輯分組。根據邏輯,您可以指定分組的起始行和結束行

+0

是的,我已經有了。但是,我正在尋找只有一個展開/摺疊圖標。我認爲如果我們可以轉移的話,它是可行的。沒有一個好例子。但非常感謝你的回覆 – SKumar