java - 如何获取 HSSFCell apache POI API 的 Excel 范围名称?

标签 java apache-poi excellibrary

如标题所示,我这里遇到了一点麻烦。 我可以从单元格获取字体

HSSFFont font =
    cell.getRow().getSheet().getWorkbook().
    getFontAt(cell.getCellStyle().getFontIndex());

但现在我需要获取它的范围名称。实际上我需要一些东西来锚定和确定关键单元格及其自身的值单元格。

是否有一些方法可以获取范围名称,例如 workBook.getName().getNameAt() 但如何获取名称索引来自 HSSFCell?

最佳答案

除了富文本字符串之外,单元格仅分配一种字体, 但它可能被多个命名范围引用。 因此,您需要迭代工作簿的命名范围并检查单元格是否被引用。为了简单起见,我迭代了所有 area.getAllReferencedCells() - 如果范围很大,您需要检查该区域是否 isContigously() 以及是否您的单元格/行索引位于 getFirstCell()getLastCell() 边界框的单元格/行索引内。

有关更多信息,请查看 Busy Developers' Guide to HSSF and XSSF Features .

Or search on stackoverflow ...

(在我的测试用例中,一个单元格(第 4 行,第 3 列)由三个不同形状的命名范围引用)

import java.io.File;
import java.util.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.*;

public class XlsRangeNames {
    public static void main(String[] args) throws Exception {
        Workbook wb = WorkbookFactory.create(new File("src/test/resources/name-range.xls"));

        Cell cell = wb.getSheetAt(0).getRow(3).getCell(2);

        for (Name n : getNamedRangesForCell(wb, cell)) {
            System.out.println(n.getNameName());
        }
    }

    static List<Name> getNamedRangesForCell(Workbook wb, Cell cell) {
        int col = cell.getColumnIndex();
        int row = cell.getRowIndex();
        String sheetName = cell.getSheet().getSheetName();
        List<Name> result = new ArrayList<Name>();

        for (int i=0; i<wb.getNumberOfNames(); i++) {
            Name name = wb.getNameAt(i);
            if (!sheetName.equals(name.getSheetName())) continue;

            AreaReference area = new AreaReference(name.getRefersToFormula());
            CellReference crList[] = area.getAllReferencedCells();
            for (CellReference cr : crList) {
                if (cr.getCol() == col
                    && cr.getRow() == row) {
                    result.add(name);
                    continue;
                }
            }
        }

        return result;
    }
}

关于java - 如何获取 HSSFCell apache POI API 的 Excel 范围名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13851358/

相关文章:

Java JDBC 连接 ClassNotFoundException 错误

c# - 打开excel文件时缓冲区不能为空错误?

c# - 将日期格式单元格复制到数据表excellary

java - 从 Java 调用的 Python 脚本获取错误输出

java - 为什么 bluetoothAdapter 回调在连接 BLE 设备时抛出错误?

java - 在 Java 10 中使用 Apache Poi 4 时出现错误

java - 获取Excel中日期列的日期格式

excel - 在一个驱动器中链接两个 Excel 工作表/SharePoint

Java:如何使用 3rd 方库?

java - 关于 SXSSFWorkbook 关于 FlushedRows、Written to Disk 和 rowAccessWindowSize 的问题