0

私は次のExcelシートを持っています

id     JobId     Name      Dept        Add       Salary
101      41      Bob     Editing    New York     $ 5000 

$.ajax() メソッドから id,jobid をリクエスト パラメータとしてサーブレットに渡しています。id と jobid というリクエスト パラメータを Excel シートの内容と一致させて、Excel シートの給与セル データを取得し、それを別のテーブルに挿入したいと考えています。これを行う方法?

これが私のコードです...

   FileInputStream file = new FileInputStream(fileToBeRead);
   workbook = new HSSFWorkbook(file);
   int jobid = Integer.ParseInt(request.getParameter("jobid"));

          if (id == 101) {
             // get first sheet 
               HSSFSheet sheet = workbook.getSheetAt(0);
               Iterator<Row> rowIterator = sheet.iterator();
               statement = conn.createStatement() ;
               ResultSet resultset = statement.executeQuery("Select job_id,Job,Name, Deptname from Emp,Department where Department.job_id=" + jobid + " AND Emp.Id=" + id + " ");

                while (resultset.next()) { 

                   //how to match database result with excel records and save to other table



                }//resultset.next() ends here...

            resultset.close();
        }

こうやってみる……?たとえば、id = 101とAdd = New Yorkを一致させようとしていて、給与データを取得したいというエラーが発生します。if (data[i][j].equalsIgnoreCase("101"))条件を使用する場合は機能しますが、id と Address の両方に一致させたい場合、つまりif(data[i][j].equalsIgnoreCase("101") && data [i][j+5].equalsIgnoreCase("New York"))エラーが発生します

    int rowNum = sheet.getLastRowNum() + 1;
    int colNum = sheet.getRow(0).getLastCellNum();
    String[][] data = new String[rowNum][colNum];
   // System.out.println("Row No :"+rowNum +" \nCol no:"+colNum);

    for (int i = 1; i < rowNum; i++) {
        Row row = sheet.getRow(i);
        for (int j = 0; j < colNum; j++) {
            Cell cell = row.getCell(j);
            String value = null;
            double price;
           // int type = cell.getCellType();

            value = cell.getStringCellValue();

                    data[i][j] = value;
                    if(data[i][j].equalsIgnoreCase("101") && data[i][j+4].equalsIgnoreCase("New York"))
                        {
                            Cell lastCellInRow = row.getCell(row.getLastCellNum() - 1);
                            System.out.println(lastCellInRow.getStringCellValue());

                    }

        }
    }
4

1 に答える 1

2

行の最後のセルにアクセスしようとしているだけで、 がある場合はRow、次のことを試してください。

Cell lastCellInRow = row.getCell(row.getLastCellNum() - 1); // -1 because #s are 0-based

編集更新された質問と以下のコメントに対処するには。このコードは、スプレッドシート全体を 2D 配列に変換するという難題を経ずに、探していることを実行する必要があります。これは、指先ですべてのデータにアクセスできる場合、率直に言って非常に非効率的です。

for (int i = 1; i < rowNum; i++) {
  Row row = sheet.getRow(i);
  Cell cell1 = row.getCell(0);
  Cell cell2 = row.getCell(4);
  String id = cell1.getStringCellValue();
  String city = cell2.getStringCellValue();

  if(id.equalsIgnoreCase("101") && city.equalsIgnoreCase("New York")) {
    Cell lastCellInRow = row.getCell(row.getLastCellNum() - 1);
    System.out.println(lastCellInRow.getStringCellValue());
  }
}
于 2013-08-08T13:37:43.333 に答える