ライブラリの並べ替えプロジェクトのJavaコードを書いています。特定の列内のすべてのセルにわたって文字列を検索し、指定された部分文字列を含むセルを出力することです。書籍に関する各情報(著者、タイトル、ISBN)の列があるので、これを行う方法はありますか?これまでに次のコードを記述しました(ただし、インポートステートメントは使用していません)。これは、部分文字列を含む本の行全体を印刷するだけです。行を選択した後、その行から特定のセルを印刷するだけです。
public class testf {
static List<Row> getRows(Sheet sheet, DataFormatter formatter, FormulaEvaluator evaluator, String searchValue) {
List<Row> result = new ArrayList<Row>();
String cellValue = "";
for (Row row : sheet) {
for (Cell cell : row) {
cellValue = formatter.formatCellValue(cell, evaluator);
if (cellValue.contains(searchValue)) {
result.add(row);
break;
}
}
}
return result;
}
public static void main(String[] args) throws IOException, InvalidFormatException {
try
{
FileInputStream file = new FileInputStream(new File("C:\\\\Users\\\\abdul\\\\Desktop\\\\University Files\\\\Object-Oriented Programming\\\\Project files\\\\Book class\\\\Books & DDC.xlsx"));
//Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook(file);
//Get first/desired sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
DataFormatter formatter = new DataFormatter();
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Scanner a = new Scanner(System.in);
List<Row> filteredRows = getRows(sheet, formatter, evaluator, "y");
for (Row row : filteredRows) {
for (Cell cell : row) {
System.out.print(formatter.formatCellValue(cell, evaluator));
System.out.print("\t \t");
}
System.out.println();
}
file.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}}
これは、メソッドgetRowsが、必要な基準を持つセルが存在するすべての行を返すが、どのセルを正確に通知しないかを示しているため、必要なのはセルを返すことです。
getRows-> getCells
そしてそのメソッドのコードは次のようになります:
static List<Cell> getCells(Sheet sheet, DataFormatter formatter, FormulaEvaluator evaluator, String searchValue) {
List<Cell> result = new ArrayList<>();
String cellValue = "";
for (Row row : sheet) {
for (Cell cell : row) {
cellValue = formatter.formatCellValue(cell, evaluator);
if (cellValue.contains(searchValue)) {
result.add(cell);
break;
}
}
}
return result;
}
印刷に関しては、セルのリストをループして通常どおりに印刷し、何らかの理由で特定のセルの行が必要な場合は、cell.getRow()を呼び出すだけです。
List<Cell> filteredCells = getCells(sheet, formatter, evaluator, "whatever");
for (Cell cell : filteredCells) {
System.out.print(formatter.formatCellValue(cell, evaluator));
System.out.print("\t \t");
Row cellsRow = cell.getRow();// if you need the full row
}
ところで、私はあなたが持っている仕様については知りませんが、フィルタリング方法にあるブレークは、行に必要な値を持つ複数のセルがある場合、最初のセルのみを取得することを意味しますので、それについて注意してください、それがあなたがまさに望んでいるものでない限り、私はその休憩を取り除くことをお勧めします
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加