【发布时间】:2020-03-16 13:46:57
【问题描述】:
见下图,我正在尝试编写一个程序,它可以“扫描”给定行,不受从哪个单元格到哪个单元格的限制,然后找到所有相同的“字符串”。有可能这样做吗?谢谢。
举个例子,这样就不会很混乱,例如:在H行,你看到有客户的名字,有“Coresystem”,“Huawei”,“VIVO”等......现在问题是,如果名字没有组合在一起,它们都被拆分了,比如,在H5上是“华为”,在H9上是“VIVO”等等,就像提供的图片不同下面,在 H 行,所有名称都被拆分,我希望 apache POI 找到所有具有相同名称的客户,例如:如果用户输入“coReSysteM”,它应该能够找到所有.equalsIgnoreCase H行所有Coresystem(顺便说一句,用户应该能够输入他们想要输入的客户姓名和他们想要搜索的行),并从A5,B5,C5,D5,E5,F5,G5显示, H5 到 A14, B14, C14, D14, E14, F14, G14, H5, 可以吗?
我正在考虑设置一个公式来查找所有客户,例如:=CountIf
这些是我目前正在尝试做的代码,但后来我被它困住了:
package excel_reader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelReader2d {
ExcelReader link = new ExcelReader();
Scanner scan = new Scanner(System.in);
// instance data
private static int numberGrid[][] = null;
private static String stringGrid[][] = null;
// constructor
public ExcelReader2d(String desLink) {
}
// methods
public void ExeScan() throws FileNotFoundException, IOException {
Scanner scan = new Scanner(System.in);
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream("C:\\Users\\Sonic\\Desktop\\20191223 IMPORTS.xlsx"));
XSSFSheet sheet = workbook.getSheetAt(0);
final int rowStart = Math.min(15, sheet.getFirstRowNum()), rowEnd = Math.max(1400, sheet.getLastRowNum());
System.out.print("Enter the rows that you want to search for: (for ex. the rows that stores customer's name) ");
int searchRows = scan.nextInt();
System.out.print("Enter the customer's name that you are looking for: ");
String name = scan.nextLine();
//int rowNum;
// Search given row
XSSFRow row = sheet.getRow(searchRows);
try {
for (int j = 4; j < rowEnd; j++) {
Row r = sheet.getRow(j);
if (name.equalsIgnoreCase(name)) {
row.getCell(j).getStringCellValue();
}
// skip to next iterate if that specific cell is empty
if (r == null)
continue;
}
} catch (Exception e){
System.out.println("Something went wrong.");
}
}
}
ps。我知道这会很令人困惑,但请随时提出任何问题,以帮助您摆脱困惑并帮助我,因为这对我来说一直是个问题。非常感谢您,我将非常感谢您的帮助。目前使用apache poi、vscode、java。
【问题讨论】:
-
首先想到:什么是行?
-
你试过什么?我将遍历工作表中的行并从每一行获取单元格 7 (
H) 的字符串内容。如果该字符串满足要求,则该行是所需行之一,否则不是。可以在List<Row>中收集所需的行。顺便说一句:H不是一行而是一列。 -
@rioV8 行就像每一行,就像在 excel 上一样,A 行将是第一行的整行。
-
@FlashSonic526 : A 或 H 不是一行
-
阅读您现在提供的代码后,您首先应该尝试了解
Excel表中的行是什么。行是水平的。所以4、5、...、41是行。列是垂直的。所以A、B、...、H是列。列H包含每行的第八个单元格row.getCell(7)。如何遍历我已经链接的行。
标签: java excel apache-poi