Java 从单元格值ApachePOI获取单元格索引
如果在excel中有上述数据,如何使用文本访问PatchNumber的cellNumberJava 从单元格值ApachePOI获取单元格索引,java,excel,apache-poi,Java,Excel,Apache Poi,如果在excel中有上述数据,如何使用文本访问PatchNumber的cellNumber XSSFRow行=(XSSFRow)行。下一步() 我想访问row.getCellNumber(“PatchNumber”)//注意,Apache POI中不存在此方法。这不是您想要的吗 Environment Status Version PatchNumber Windows Live 1.0 2 Unix Live
XSSFRow行=(XSSFRow)行。下一步()代码>
我想访问row.getCellNumber(“PatchNumber”)代码>//注意,Apache POI中不存在此方法。这不是您想要的吗
Environment Status Version PatchNumber
Windows Live 1.0 2
Unix Live 2.0 4
Mac Live 1.3 8
public XSSFCell getCell(int cellnum)返回给定(0)位置的单元格
基于)索引,使用父工作簿中的Row.MissingCellPolicy
如果您想准确地按名称访问-“PatchNumber”,您可以读取标题行并保存PatchNumber的索引。我认为表模型只定义对单元格的访问,但不提供按列名关联的访问。在模型中所有行都是相等的,我认为:-)
获取列索引。我将迭代标题行并构建列名称列表columns
,然后您可以使用columns.indexOf(“PatchNumber”)
)我想我明白你的意思-你想知道哪列第一行包含“补丁”一词吗?如果是这样,您需要做的就是:
row.getCell(3)
Sheet s=wb.getSheetAt(0);
行r=s.getRow(0);
int patchColumn=-1;
for(int cn=0;cnpublic CellAddress searchStringInXslx(字符串)引发IOException{
FileInputStream inputStream=新的FileInputStream(“Books.xlsx”);
工作簿=新XSSF工作簿(inputStream);
Sheet firstSheet=工作簿。getSheetAt(0);
迭代器迭代器=firstSheet.Iterator();
CellAddress columnNumber=null;
while(iterator.hasNext()){
行nextRow=iterator.next();
迭代器cellIterator=nextRow.cellIterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
如果(cell.getCellType()==cell.cell\u TYPE\u字符串){
String text=cell.getStringCellValue();
if(string.equals(text)){
columnNumber=cell.getAddress();
打破
}
}
}
}
workbook.close();
返回列号;
}
getcell(int x)是返回单元格。我想要单元格号,在我的例子中,patchNumber今天位于第4列,明天可能会移动到第5列或第3列,所以我想知道是否可以通过列文本获取列的索引。这显然是不可能的。该行不知道标题行。是否尝试读取标题行?我找不到任何API,也没有w因为@Vladimir说这是不可能的,我假设Apache POI中不存在这样的API。@SDS,正确。Apache POI只提供对行和单元格进行迭代的API。但是获取列索引是一种逻辑,这取决于您的文档。因此,您必须迭代标题行以获得所需的结果。这现在回答了您的问题吗?是的,我最终编写了代码以获得相同的结果。感谢您的输入。我在代码中也使用了相同的技术,只是想知道Apache POI是否提供了API来实现同样的目的。感谢您的输入。不。每个人在工作表中查找内容的要求都会有所不同,并且第一行没有什么特别之处,因此有没有任何通用的方法对每个人都有效。最好的方法是自己编写几行代码,涵盖您的特定需求!此方法将返回搜索字符串的单元格地址。
Sheet s = wb.getSheetAt(0);
Row r = s.getRow(0);
int patchColumn = -1;
for (int cn=0; cn<r.getLastCellNum(); cn++) {
Cell c = r.getCell(cn);
if (c == null || c.getCellType() == Cell.CELL_TYPE_BLANK) {
// Can't be this cell - it's empty
continue;
}
if (c.getCellType() == Cell.CELL_TYPE_STRING) {
String text = c.getStringCellValue();
if ("Patch".equals(text)) {
patchColumn = cn;
break;
}
}
}
if (patchColumn == -1) {
throw new Exception("None of the cells in the first row were Patch");
}
public CellAddress searchStringInXslx(String string) throws IOException{
FileInputStream inputStream = new FileInputStream("Books.xlsx");
Workbook workbook = new XSSFWorkbook(inputStream);
Sheet firstSheet = workbook.getSheetAt(0);
Iterator<Row> iterator = firstSheet.iterator();
CellAddress columnNumber=null;
while(iterator.hasNext()){
Row nextRow = iterator.next();
Iterator<Cell> cellIterator = nextRow.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
if(cell.getCellType()==Cell.CELL_TYPE_STRING){
String text = cell.getStringCellValue();
if (string.equals(text)) {
columnNumber=cell.getAddress();
break;
}
}
}
}
workbook.close();
return columnNumber;
}