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

时间:2012-06-29 03:07:39

标签: c# excel-dna

我有几个来自数据库的公式和数据。我想通过ExcelDna以编程方式刷新所有公式。所有这些公式都是ExcelFunctions,我已经把ExcelCommand name =“Refresh”放在其上,我想重新计算excel表格。

我使用以下内容但它只刷新本机excel函数,例如NOW(),SUM()等它不会在ExcelDna函数上调用刷新?

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

提前致谢...

4 个答案:

答案 0 :(得分:7)

xlcCalculateNow只计算Excel知道必须重新计算的公式。您可以将Excel函数标记为“易失性”,使其表现得像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的另一种方法是在最新的Excel-DNA签到中创建RTD服务器或使用新的Reactive Extensions for Excel(RxExcel)支持。这里有一些信息 - http://exceldna.codeplex.com/wikipage?title=Reactive%20Extensions%20for%20Excel

答案 1 :(得分:3)

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

答案 2 :(得分:3)

这有效(至少在Excel 2013中):

Excel.Application excelApp = ExcelDnaUtil.Application as Excel.Application;
excelApp.CalculateFull();

Excel.Application excelApp = ExcelDnaUtil.Application as Excel.Application;
excelApp.CalculateFullRebuild();

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

答案 3 :(得分:0)

尝试在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,例如,返回当前时间的函数。