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
C#电子表格设备:#名称?如果公式应用于单元格,则作为文本_C#_Excel_Spreadsheetgear - Fatal编程技术网

C#电子表格设备:#名称?如果公式应用于单元格,则作为文本

C#电子表格设备:#名称?如果公式应用于单元格,则作为文本,c#,excel,spreadsheetgear,C#,Excel,Spreadsheetgear,我试图通过电子表格齿轮库获取单元格中的文本 有一个公式应用于列C1=GETURL(I2),它计算的文本类似于“” 我有另一列C2,其中有一个公式输出“视图”作为文本 =HYPERLINK(CONCATENATE("https://loremipsum.com/",[@[Customer CID]],"/view"), "View") 现在,当我试图通过C2列中单元格的C#代码获取文本时,当我运行下面的语句时,会得到“视图”,而C1列中的单元格会得到“名称” worksheet.Cells[i,

我试图通过电子表格齿轮库获取单元格中的文本

有一个公式应用于列C1
=GETURL(I2)
,它计算的文本类似于“”

我有另一列C2,其中有一个公式输出“视图”作为文本

=HYPERLINK(CONCATENATE("https://loremipsum.com/",[@[Customer CID]],"/view"), "View")
现在,当我试图通过C2列中单元格的C#代码获取文本时,当我运行下面的语句时,会得到“视图”,而C1列中的单元格会得到“名称”

worksheet.Cells[i, j].Text; //Outputs = "#NAME?"
我试图在excel中使用
=TEXT(GETURL(I2),“”)
,但它仍然输出#Name! 我还试着做了
工作表.Cells[I,j].Value//Output=Name

为什么同一个陈述给了我不同的结果,即使两个单元格都应用了公式

Function GETURL(cell As Range, Optional default_value As Variant)
  With cell.Range("A1")
    If .Hyperlinks.Count = 1 Then
      GETURL = .Hyperlinks(1).Address
    Else
      If Left$(Replace(Replace(Replace(.Formula, " ", ""), vbCr, ""), vbLf, ""), 11) = "=HYPERLINK(" Then
        Dim indexFirstArgument As Long: indexFirstArgument = InStr(.Formula, "(") + 1
        GETURL = Application.Evaluate(Mid$(.Formula, indexFirstArgument, InStrRev(.Formula, ",") - indexFirstArgument))
      Else
        GETURL = default_value
      End If
    End If
  End With
End Function

至于SpreadsheetGear方面,请注意SpreadsheetGear无法执行VBA代码(尽管它在现有XLS或XLSM文件中保留了VBA)。SpreadsheetGear不支持添加您自己的自定义功能,但您必须通过SpreadsheetGear实现这一点。NET应用程序中的API。如果没有可用的自定义功能,SpreadsheetGear将返回#NAME!每当遇到像GETURL这样的函数时都会出现错误,我怀疑这就是您的案例中发生的情况

要在SpreadsheetGear中实现自定义函数,基本上必须对该类进行子类化并重写其(…)方法,每当SpreadsheetGear在公式中遇到自定义函数时,就会调用该方法。文档中有示例,但您也可以在此处找到功能完整的ASP.NET示例:

重要信息:电子表格设备自定义功能有许多规则必须遵守。我强烈建议您查看这些规则,如函数文档“备注”部分所述。评估上述链接中提供的(…)方法。这些规则之一是,所有对单元格的访问都必须通过提供的参数来完成,以便通过参数计算(…)

您的GETURL函数似乎可以访问范围、其超链接集合和公式等。电子表格设备的自定义函数API中不允许此类操作。您可以访问的只是提供的内容,在将范围传递到自定义函数的情况下,这些单元格的基础计算值就是这些单元格的值。换句话说,上面实现的GETURL函数无法移植到SpreadsheetGear自定义函数。您需要以不访问IRange/IRange.Hyperlinks/等的方式更新它