Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从单元格值ApachePOI获取单元格索引_Java_Excel_Apache Poi - Fatal编程技术网

Java 从单元格值ApachePOI获取单元格索引

Java 从单元格值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

如果在excel中有上述数据,如何使用文本访问PatchNumber的cellNumber

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;cn
public 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;
     }