私はPOIが初めてで、検索文字列が1回以上発生する2つの異なるExcelシートで特定の文字列リストを検索する必要があります。
ここで、Cell イテレータを使用してすべての行を反復処理し、文字列を検索します。
for (String searchString : SearchList){
List<Row> matchedRows = getMatchedRows(searchString);
}
public List<Row> getMatchedRows(String searchString)
List<Row> rowsMatched = new ArrayList();
(Row rowOfSheet : workSheet) {
if(rowOfSheet.getCell(index).getStringCellValue().equalsIgnoreCase(searchString)) {
rowsMatched.add(rowOfSheet)
}
}
}
しかし、ExcelSheetとsearchListに膨大なレコードがあるため、パフォーマンスが影響を受けます。そのため、「一致」式を使用して、エバリュエーターを使用して一致する行のインデックスを取得しようとしましたが、次を実行しようとすると、正しい構文を取得できませんでした:
"MATCH('C:\\Files\\[File1.xlsx]sheet1'!$A$2,'C:\\Files\\[File2.xlsx]sheet2'!$B$2:$B$741,0)"
これにより、次の例外が発生します。
Exception in thread "main" java.lang.IllegalArgumentException: Invalid sheetIndex: -1.
at org.apache.poi.ss.formula.SheetRefEvaluator.<init>(SheetRefEvaluator.java:39)
at org.apache.poi.ss.formula.OperationEvaluationContext.createExternSheetRefEvaluator(OperationEvaluationContext.java:97)
at org.apache.poi.ss.formula.OperationEvaluationContext.getRef3DEval(OperationEvaluationContext.java:249)
at org.apache.poi.ss.formula.WorkbookEvaluator.getEvalForPtg(WorkbookEvaluator.java:656)
at org.apache.poi.ss.formula.WorkbookEvaluator.evaluateFormula(WorkbookEvaluator.java:527)
at org.apache.poi.ss.formula.WorkbookEvaluator.evaluateAny(WorkbookEvaluator.java:288)
数式文字列で完全なファイル パスを指定する方法。私は次のように言いましたが、これはうまくいきません。
http://stackoverflow.com/questions/10915475/java-poi-xssf-formulaevaluator
これを解決する方法。提案と解決策は非常に役立ちます。前もって感謝します。どうしても必要な解決策をできるだけ早く教えてください。