2016-10-27 7 views
0

私は出力の最後に特定のセルをマージしようとしているところでapache poiを使ってブックを作成しています。私はmergeRegion関数を使用していますが、セルはマージしていますが、行の最後にマージされていない、それは常に前に1行、poiの最後の行にセルをマージする方法

私がここで画面Iは、細胞が正常にマージしたいmerged cell

を添付していますが終了されて、私はここで

を自分のコードを投稿しています
for(MarshActiveUser marshActiveUser : listOfMarshUser){ 

      /***/ 
      sheet.addMergedRegion(new CellRangeAddress(
        j, //first row (0-based) 
        j, //last row (0-based) 
        18, //first column (0-based) 
        20 //last column (0-based) 
        )); 
      /***/ 

      int columnNo = 0; 
      row = sheet.createRow(j+1); 
      cell = row.createCell(columnNo); 
      cell.setCellValue(new HSSFRichTextString(String.valueOf(row.getRowNum()))); 
      lockedCellStyle.setFont(hSSFFont); 
      sheet.autoSizeColumn(0); 
      cell.setCellStyle(lockedCellStyle); 
      columnNo = 1; 
      cell = row.createCell(columnNo); 

      if(null != marshActiveUser.getFistName()){ 

       cell.setCellValue(new HSSFRichTextString(marshActiveUser.getFistName())); 
       lockedCellStyle.setFont(hSSFFont); 
       sheet.autoSizeColumn(1); 
       cell.setCellStyle(lockedCellStyle); 

      }else{ 
       cell.setCellValue(new HSSFRichTextString(" ")); 
       cell.setCellStyle(lockedCellStyle); 
      } 

私はrowCount +1しかし、コードで許可されていません、私を助けてください。事前におかげで。

+0

あなたはポストインクリメントJ ++の代わりに、行のJ + 1 = sheet.createRow(J + 1)とのコードの上にしようとしました。 ?? – Khuzi

+0

@Khuzi私はしましたが、それは1行をスキップしています – storyteller

答えて

2

rowCountインクリメントに問題があります。行カウントをインクリメントすると、最後の行がスキップされてマージされます。増分rowcount++とそれが期待どおりに機能するように変更しました。

import java.io.FileOutputStream; 
import java.io.IOException; 

import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.hssf.util.CellRangeAddress; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.Row; 

public class SimpleExcelWriterExample { 

public static void main(String[] args) throws IOException { 
    HSSFWorkbook workbook = new HSSFWorkbook(); 
    HSSFSheet sheet = workbook.createSheet("Java Books"); 

     Object[][] bookData = { 
       {"Head First Java", "Kathy Serria", 79}, 
       {"Effective Java", "Joshua Bloch", 36}, 
       {"Clean Code", "Robert martin", 42}, 
       {"Thinking in Java", "Bruce Eckel", 35}, 
     }; 

     int rowCount = 1; 

     for (Object[] aBook : bookData) { 

      /***/ 
      sheet.addMergedRegion(new CellRangeAddress(
        rowCount, //first row (0-based) 
        rowCount, //last row (0-based) 
         3, //first column (0-based) 
         5 //last column (0-based) 
        )); 
      /***/ 
      Row row = sheet.createRow(rowCount++); 

      int columnCount = 0; 

      for (Object field : aBook) { 
       Cell cell = row.createCell(++columnCount); 
       if (field instanceof String) { 
        cell.setCellValue((String) field); 
       } else if (field instanceof Integer) { 
        cell.setCellValue((Integer) field); 
       } 
      } 

     } 


     try{ 
      FileOutputStream outputStream = new FileOutputStream("D://JavaBooks.xls"); 
      workbook.write(outputStream); 
     }catch(Exception e){} 

}} 

出力:

enter image description here

+0

あなたのソリューションは、このコードのために疲れましたが、私はあなたのソリューションを動作していない別のコードに適用しています。 – storyteller

関連する問題