java - 如何根据 Apache POI 中的 "Name Box"值查找列索引号

标签 java excel apache-poi

我需要根据命名单元格处理 Excel 列(而不是 A1、A2,单元格被重命名为独立检索,无论列位置如何) 我尝试获取命名范围,但无法获取列索引。

最佳答案

如果您有 Name命名范围的对象,可以得到RefersToFormula由此而来。

有了这个,您就可以获得引用公式的第一个单元格的单元格引用。这是棘手的部分,因为 RefersToFormula 也可以是 AreaReference。所以我首先尝试将其设为 CellReference 。如果失败,请尝试将其获取为 AreaReference 。如果成功,则通过 AreaReference.getFirstCell 获取 CellReference

有了CellReference,您可以通过CellReference.getCol获取列索引。

示例:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.ss.util.AreaReference;

import java.io.FileInputStream;

class ExcelGetNamedCells {

 public static void main(String[] args) throws Exception {
  //Workbook workbook = WorkbookFactory.create(new FileInputStream("Workbook.xls"));
  Workbook workbook = WorkbookFactory.create(new FileInputStream("Workbook.xlsx"));

  String nameName = "";
  String nameRefersTo = "";
  CellReference nameFirstCellReference = null;
  AreaReference nameAreaReference = null;
  short nameFirstColumn = -1;

  for (Name name : workbook.getAllNames()) {

   nameName = name.getNameName();
   System.out.println("Name of named range is: " + nameName);

   nameRefersTo = name.getRefersToFormula();
   System.out.println("Named range refers to : " + nameRefersTo);

   // get cell reference of first cell in refers to formula
   nameFirstCellReference = null;
   try {
    nameFirstCellReference = new CellReference(nameRefersTo);
   } catch (Exception ex) {
    // do nothing. nameFirstCellReference stays null
   }
   if (nameFirstCellReference == null) {
    nameAreaReference = null;
    try {
     nameAreaReference = new AreaReference(nameRefersTo, workbook.getSpreadsheetVersion());
    } catch (Exception ex) {
     // do nothing. nameAreaReference stays null
    }
    if (nameAreaReference != null) {
     System.out.println("Area reference of named range is : " + nameAreaReference);
     nameFirstCellReference = nameAreaReference.getFirstCell();
    }
   }

   if (nameFirstCellReference != null) {
    System.out.println("First cell reference of named range is : " + nameFirstCellReference);
    nameFirstColumn = nameFirstCellReference.getCol();
    System.out.println("First column of named range is: " + nameFirstColumn);
   }
  }

  workbook.close();

 }
}

关于java - 如何根据 Apache POI 中的 "Name Box"值查找列索引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60843530/

相关文章:

java - 按字段分组并计算 java 8 中的非空字段

java - 无法导入 Map.Entry

java mail API的传输功能不起作用

java - 是否可以通过客户端漏洞查看 HttpSession 属性?

jquery - 如何使用 VBA 触发更新网页的事件?

java - java中将数据写入excel的问题

java - 如何将 xlsx 文件转换为 csv?

java - 从 Apache poi java 读取 Excel

r - 如何将回归分析的系数导出到电子表格或 csv 文件?

vba - excel工作表比较两个不同的列,如果匹配,则将其接下来的两个单元格复制到新列中