我正在使用SpreadsheetGear并且已经获得了一个带有VBA宏的电子表格,我需要将其转换为自定义函数(因为SSG无法处理VBA代码)。宏调用Excel函数(匹配,索引),我无法看到如何从我的自定义函数中调用这些函数。任何想法,如果这是可能的,以及如何做到这一点?
由于
答案 0 :(得分:1)
您可以使用ISheet。EvaluateValue(...)方法评估Excel公式字符串。例如:
// A1:A3 on "Sheet1" will be summed up.
object val = workbook.Worksheets["Sheet1"].EvaluateValue("SUM(A1:A3)");
// Ensure we actually get a numeric value back
if(val != null && val is double)
{
double sum = (double)val;
Console.WriteLine(sum);
}
但是,听起来您将在自定义函数中使用此方法,因此我应该指出您不能将此方法用于属于当前正在计算的IWorkbookSet中的任何工作簿的任何工作表。请查看下面粘贴的函数。Evaluate(...)方法的备注部分中列出的规则,特别是我加粗的那些:
此方法的实施必须遵循许多规则:
因此,如果您在自定义函数中调用ISheet。EvaluateValue(...),则必须在某个属于IWorkbookSet的工作表上完成,而不是当前正在计算的工作表。根据上面提到的第一条规则,它还需要以线程安全的方式完成。