Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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# Excel Dna-刷新所有数据源和公式计算_C#_Excel Dna - Fatal编程技术网

C# Excel Dna-刷新所有数据源和公式计算

C# Excel Dna-刷新所有数据源和公式计算,c#,excel-dna,C#,Excel Dna,我有一些公式和数据来自数据库。我想通过ExcelDna以编程方式刷新所有公式。所有这些公式都是excel函数,我已将EXCELCOMAND name=“Refresh”放在其中,我想对其发出“重新计算到excel工作表” 我使用以下命令,但它只刷新本机excel函数,例如NOW()、SUM()等。它不调用ExcelDna函数上的刷新吗 [ExcelCommand(MenuName="Refresh", MenuText="Refresh" )] public static v

我有一些公式和数据来自数据库。我想通过ExcelDna以编程方式刷新所有公式。所有这些公式都是excel函数,我已将EXCELCOMAND name=“Refresh”放在其中,我想对其发出“重新计算到excel工作表”

我使用以下命令,但它只刷新本机excel函数,例如NOW()、SUM()等。它不调用ExcelDna函数上的刷新吗

[ExcelCommand(MenuName="Refresh", MenuText="Refresh"   )]
        public static void GetPositionCommand()
        {
            XlCall.Excel(XlCall.xlcCalculateNow);
        }

提前感谢…

xlcCalculateNow将只计算Excel知道必须重新计算的公式。您可以将Excel函数标记为“Volatile”,使其行为类似于Excel的NOW()函数,每次都会重新计算该函数。使用Excel DNA,您可以执行以下操作:

[ExcelFunction(IsVolatile=true)]
public static string MyVolatileNow()
{
    return DateTime.Now.ToString("HH:mm:ss.fff");
}
并与默认的非易失性情况进行比较:

[ExcelFunction]
public static string MyNow()
{
    return DateTime.Now.ToString("HH:mm:ss.fff");
}

将数据推送到Excel的另一种方法是创建RTD服务器或在最新的Excel DNA签入中使用新的Excel被动扩展(RxExcel)支持。这里有一些信息-。

我必须按Ctrl+Alt+F9(至少在Excel 2013中)来刷新单元格

这是可行的(至少在Excel 2013中):


第一个类似于按Ctrl+Alt+F9重新计算所有工作簿,第二个类似于重新输入所有公式。

在ExcelDNA函数的属性中尝试设置
IsVolatile=false

[ExcelFunction(Description = "Subscribe to real time data.", IsVolatile = false, Category = UDF_CATEGORY)]
public static object XSub(        
    string param1)
{
    // Implementation here.
}
这一简单的改变大大降低了CPU的使用率。在我使用的一个大型电子表格中,CPU使用率从100%(即不断重新计算,但从未跟上)下降到20%

使用
IsVolatile=true
,Excel将定期重新计算函数的输出值,即使输入没有改变

使用
IsVolatile=false
,如果输入发生变化,Excel将仅重新计算函数的输出值

使用
IsVolatile=false
,一切效率都会提高一个数量级,因为Excel可以在大多数情况下跳过90%的电子表格重新计算


说到这里,有些函数可能需要
IsVolatile=true
,例如,返回当前时间的函数。

谢谢;这种方法奏效了。但我更喜欢跟随;我使函数非易失性,并使用Ctrl+Shift+F9刷新所有函数。如果我让它不稳定;点击Ctrl+Shift+F9时,它将进入无休止的更新循环。。不确定…当一个函数被标记为Volatile时,它会在用户每次执行某些操作(如调整列大小)时刷新。是否可以编程刷新所选函数(仅当运行自定义命令时)?这在Excel 2010中也适用,IsVolatile=false UDF
Excel.Application excelApp = ExcelDnaUtil.Application as Excel.Application;
excelApp.CalculateFullRebuild();
[ExcelFunction(Description = "Subscribe to real time data.", IsVolatile = false, Category = UDF_CATEGORY)]
public static object XSub(        
    string param1)
{
    // Implementation here.
}