gpt4 book ai didi

apache-poi - 如何在 POI 中读取 HYPERLINK() 函数的结果

转载 作者:行者123 更新时间:2023-12-04 05:03:54 29 4
gpt4 key购买 nike

Apache Poi 可以计算和返回公式中函数的结果。但是对于特殊函数 HYPERLINK(),它只返回“显示值”,而不是实际计算的超链接值。

我有一个 Excel 文件,其中包含复杂的计算超链接,这些超链接结合了工作簿中许多不同字段的结果,因此能够读取超链接的结果 URL 会很好,但默认情况下是 formula evaluation我只得到“显示值”,而不是实际的 URL。

有没有一种方法可以计算公式,以便我可以读取实际的 URL?

最佳答案

找到了一种方法,但我可能会称之为“丑陋的解决方法”:

如果您尝试使用 WorkbookEvaluator.registerFunction("HYPERLINK", func) 在 Apache Poi 中重新实现“超链接”函数实现,则会收到无法覆盖内置函数的错误。

在深入研究 Poi 之后,我发现我可以通过将一个类放入“org.apache.poi.ss.formula.eval”包来访问内置函数列表:

package org.apache.poi.ss.formula.eval;

public class BuiltinFunctionsOverloader {
public static void replaceBuiltinFunction(int index, Function function) {
FunctionEval.functions[index] = function;
}
}

然后我可以使用这个覆盖一个函数,例如超链接的索引为 359:
BuiltinFunctionsOverloader.replaceBuiltinFunction(359, func);

通过如下的函数实现,我现在得到的是 URL 值而不是显示值:
    Function func = new Function2Arg() {
@Override
public final ValueEval evaluate(ValueEval[] largs, int srcRowIndex, int srcColumnIndex) {
switch (largs.length) {
case 1:
return evaluate(srcRowIndex, srcColumnIndex, largs[0]);
case 2:
return evaluate(srcRowIndex, srcColumnIndex, largs[0], largs[1]);
}
return ErrorEval.VALUE_INVALID;
}

public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0) {
return arg0;
}

@Override
public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0, ValueEval arg1) {
return arg0;
}
};

丑,但至少不需要我打补丁。

有人知道这样做的更“官方”的方式吗?

关于apache-poi - 如何在 POI 中读取 HYPERLINK() 函数的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15757243/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com