2017-11-13 13 views
-1
  • 私は、Java(ApacheのPOI)を使用してのxlsxファイルを読んでいます。
  • 私はDocumentクラスを作成しました(すべてExcelの見出しを変数として持つ)
  • Excelの各行を読み込んで、Documentクラスのコレクションを作成してDocumentクラスにマップする必要があります。
  • 私が直面しています問題は、私は、列35行2から、およびカラム7から読み取りを開始し、文書クラスに対応する値をマッピングしなければならないことです。Excelシートから特定の行と列を取り出す方法は?

  • コードがどうあるべきかを正確に把握することができませんか?

  • 私は、次のコード行を書かれています。

List sheetData = new ArrayList(); 
     InputStream excelFile = new BufferedInputStream(new FileInputStream("D:\\Excel file\\data.xlsx")); 
     Workbook workBook = new XSSFWorkbook(excelFile); // Creates Workbook 
     XSSFSheet sheet = (XSSFSheet) workBook.getSheet("Daily"); 
     DataFormatter formatter = new DataFormatter(); 
     for (int i = 7; i <= 35; i++) { 
      XSSFRow row = sheet.getRow(i); 
      Cell cell = row.getCell(i); 
      String val = formatter.formatCellValue(cell); 
      sheetData.add(val); 
     } 

+0

あなたのコードが正常に動作しません。 – Gagravarr

+0

Excelから1行しか取得できません。エクセルシートには400行と30列があります。私は行番号からデータを取得する必要があります。 2およびカラムno。最後まで7。どうすればそれをコード化することができますか?どんな種類の助けにも感謝します。 – Sambit

+0

私の質問が正しいですか? – Sambit

答えて

0

もあります私はあなたの質問を正しく理解している、私はあなたがファイルの最後まで2行目以降に存在するすべての行を処理したいと思うと、それらの行のそれぞれについてc列7〜35のセルをオンサイダーにします。私はあなたもそれらの値を処理する必要があるかもしれないと信じていますが、この例では文字列のリストに入れてベストを願っています。 。

これは、空白行とセルを処理するためのロジックに入れて、あなたのビジネス要件に応じて、Apache POI documentation for iterating over rows and cells

File excelFile = new File("D:\\Excel file\\data.xlsx"); 
Workbook workBook = WorkbookFactory.create(excelFile); 
Sheet sheet = workBook.getSheet("Daily"); 
DataFormatter formatter = new DataFormatter(); 

// Start from the 2nd row, processing all to the end 
// Note - Rows and Columns in Apache POI are 0-based not 1-based 
for (int rn=1; rn<=sheet.getLastRowNum(); rn++) { 
    Row row = sheet.getRow(rn); 
    if (row == null) { 
     // Whole row is empty. Handle as required here 
     continue; 
    } 
    List<String> values = new ArrayList<String>(); 
    for (int cn=6; cn<35; cn++) { 
     Cell cell = row.getCell(cn); 
     String val = null; 
     if (cell != null) { val = formatter.formatCellValue(cell); } 
     if (val == null || val.isEmpty()) { 
     // Cell is empty. Handle as required here 
     } 
     // Save the value to list. Save to an object instead if required 
     values.append(val); 
    } 
} 
workBook.close(); 

に基づいています。そして、あなたのビジネス要件に応じて、あなたが見つけた価値を何とかする必要がありますか?

+0

コード@Gagravarrをありがとう値をフェッチした後、Excelの各行のセル値を、作成したJavaクラスにマップし、データをmongo dbにプッシュする必要があります。ここで私が直面している問題は、取得した文字列の値をクラスの変数に設定していますが、値は1つだけで、すべてのフィールドで同じ値に設定されています。 – Sambit

+0

文字列をmongodbラッパーに変換することについて新しい質問をしたいと思うかもしれません – Gagravarr

+0

はい...どうすればいいですか? – Sambit

0

あなたは文書のイテレータで反復できましたが、想定すると機能 "のgetRow()とgetcellを()"

Workbook workbook = new XSSFWorkbook(excelFile); 

    // defines the standard pointer in document in the first Sheet 
    XSSFSheet data = this.workbook.getSheetAt(0); 
    // you could iterate the document with an iterator 
    Iterator<Cell> iterator = this.data.iterator(); 

    // x/y pointer at the document 
    Row row = data.getRow(y); 
    Cell pointingCell = row.getCell(x); 

    String pointingString = pointingCell.getStringCellValue(); 
+0

イテレータは使用できません。私はDataFormatterしか使用できません。どんな種類の助けにも感謝します。 – Sambit

+1

イテレータを使用できないのはなぜですか? –

+0

イテレータを使用すると、ここにコード行が無駄になります。 – Sambit

関連する問題