2017-12-21 29 views
0

私が明確でない場合は、私にごめんなさい。英語は私の母国語ではありません。Apache POIで作業するときにインデックスを使用してExcelファイルをトラバースできますか?

「コメント」というラベルが付いた列が見つかるまで、Excelファイルの最初の行を通過できるコードを作成しようとしています。その列のテキストに対して何らかのアクションを実行し、その結果をファイルの最後の新しい列に保存したいとします。インデックスと同様にxlsxファイルをトラバースできますか?もしそうなら、どうすればそのセルの座標を使ってセルにまっすぐジャンプできますか?

public static void main(String[] args) throws IOException { 

    File myFile = new File("temp.xlsx"); 
    FileInputStream fis = null; 
    try { 
     fis = new FileInputStream(myFile); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    @SuppressWarnings("resource") 
    XSSFWorkbook myWorkBook = new XSSFWorkbook (fis); 
    XSSFSheet mySheet = myWorkBook.getSheetAt(0); 
    Iterator<Row> rowIterator = mySheet.iterator(); 


    Row row = rowIterator.next(); 
    Iterator<Cell> cellIterator = row.cellIterator(); 

    while (cellIterator.hasNext()) { 

     Cell cell = cellIterator.next(); 

     String comment = cell.toString(); 

     if (comment.equals("Comments")) 
     { 
      System.out.println("Hello"); 
     } 



    } 


} 

}

答えて

1

「私は(3、2)のような座標を使用することができます第二のカラムの3行目に行きたいですか?」:

はい、これはCellUtilを使用して可能です。 Sheetとのメソッドの利点は、すでに存在する場合はまたはのセルがまだ存在しない場合は、CellUtilメソッドがセルを取得できるということです。だから、既存の細胞は新しい細胞を作成して上書きするだけでなく、尊重されます。

例:

import java.io.FileOutputStream; 

import org.apache.poi.ss.usermodel.*; 
import org.apache.poi.xssf.usermodel.*; 

import org.apache.poi.ss.util.CellUtil; 

import java.util.concurrent.ThreadLocalRandom; 

public class CreateExcelCellsByIndex { 

public static void main(String[] args) throws Exception { 

    Workbook workbook = new XSSFWorkbook(); 
    Sheet sheet = workbook.createSheet(); 

    //put content in R3C2: 
    Cell cell = CellUtil.getCell(CellUtil.getRow(3-1, sheet), 2-1); //-1 because apache poi's row and cell indexes are 0 based 
    cell.setCellValue("R3C2"); 

    //put content in 10 random cells: 
    for (int i = 1; i < 11; i++) { 

    int r = ThreadLocalRandom.current().nextInt(4, 11); 
    int c = ThreadLocalRandom.current().nextInt(1, 6); 
    cell = CellUtil.getCell(CellUtil.getRow(r-1, sheet), c-1); 
    String cellcontent = ""; 
    if (cell.getCellTypeEnum() == CellType.STRING) { 
    cellcontent = cell.getStringCellValue() + " "; 
    } 
    cell.setCellValue(cellcontent + i + ":R"+r+"C"+c); 
    } 

    workbook.write(new FileOutputStream("CreateExcelCellsByIndex.xlsx")); 
    workbook.close(); 

} 

} 
+0

ありがとうございます。これは素晴らしいです! –

0

私はあなたが2Dインデックスによって何を意味するかわからないんだけど、Cellは、それはので、このような何かが動作するはず属する列を知っている:同様

... 
Cell cell = cellIterator.next(); 

String comment = cell.toString(); 

int sourceColumnIndex = -1; 
if (comment.equals("Comments")) { 
    System.out.println("Hello"); 
    sourceColumnIndex = cell.getColumnIndex(); 
} 
.... 

、定義sourceColumnIndex列のすべてのセルを処理した結果の列を表すには、int targetColumnIndexのようなものを使用します。質問については

+0

はあまり、これは素晴らしいです、ありがとうございました。はい、申し訳ありませんが、私はそれをもっと明確にするつもりです。私が意味していたのは、セルの座標を使って、セルにまっすぐジャンプすることができますか?私が2番目の列の3行目に行きたければ、(3,2)のような座標を使うことができます。 –

+0

私が知っているApache POIの直接の方法はありません。しかし 'Row r = sheet.getRow(rowIndex)'を指定すると、 'Cell c = r.createCell(columnIndex)'を実行できます。 –

関連する問題