2016-12-14 62 views
1

Apache POIを使用してJavaからExcelを作成しています。ここでは、エクスポートされたExcelでExpand/Collapse Allが必要です。私が望む以下のイメージを展開してみてください。以下のコードはこれまでに試してみました。 (あなたが最後にしようとするなら、必要な瓶が必要かもしれません)。誰でもこれで助けてもらえますか?Apache POI - すべてを展開/すべて折りたたむ

enter image description here enter image description here

コード:最初の画像を1として

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

、あなたは、単一のグループを作成することによって、この結果を達成することはできません。 5行2から1と第二列6からのコード

9にする必要があります - - 私が代わりにノーこれらのハードコードされた行の、いくつかのロジックがあるだろうと思います

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

次の2つのグループが必要グループ化。論理に基づいて、グループ化のための開始行と終了行を指定できます。

+0

はい、私は既にそれを持っています。ただし、展開/折りたたみアイコンは1つのみを探しています。ピボット可能なのであれば、それが可能だと思います。良い例が得られていない。しかし、お返事いただきありがとうございます – SKumar

関連する問題