以编程方式刷新工作表中的特定公式

时间:2009-10-08 15:37:26

标签: c# excel

我开发了一个Excel插件。它将三个用户定义的公式公开给Excel应用程序。一切正常。现在我需要添加一个刷新按钮,单击该按钮将仅刷新工作表中的那些公式。那么在按钮的单击处理程序中,我需要编写什么代码?

使用Application.CalculateFull()我可以刷新工作表中的所有公式。有没有办法只刷新工作表中的特定公式而不是整个工作表?

2 个答案:

答案 0 :(得分:2)

Range("A3:C5").Calculate 'calculate all the cells from A3 to C5

OR

Range("A3").Calculate  'only calculate cell A3

答案 1 :(得分:0)

  

我的意思是我开发了一个excel插件..它暴露了   3个用户定义的公式(x,y,z)   excel应用程序。一切正常   很好..现在我需要添加刷新   单击时将刷新的按钮   只有那些(x,y和z)公式   工作表。所以在按钮中   点击处理程序我需要什么代码   写??写作   Application.CalculateFull()刷新   所有的公式。那不是我的意思   想。

我实现这一目标的最重要建议是在整个工作簿中查找/替换用户定义函数(UDF)的名称。例如,如果您的UDF名为“MyFunction”,您可能希望将“MyFunction(”替换为“MyFunction(”。

假设您的Excel.Application引用被命名为“excelApp”,使用C#在所有工作簿中进行查找/替换的代码可能如下所示:

foreach (Excel.Workbook workbook in excelApp.Workbooks)
{
    foreach (Excel.Worksheet worksheet in workbook.Worksheets)
    {
        worksheet.Cells.Replace(
            "MyFunction(",
            "MyFunction(",
            Excel.XlLookAt.xlPart,
            Excel.XlSearchOrder.xlByRows,
            false,
            Type.Missing,
            Type.Missing,
            Type.Missing);
    }
}

其他较少的想法:

(a)利用实时数据(RTD)服务器。这通常用于频繁或连续更新股票价格等数据。但是,这也可以用于执行“按需刷新”方法。我个人认为在这种情况下这样做会有点过分,因为Find / Replace工作100%完美并且更容易实现,但RTD绝对可以在这里使用。有关如何执行此操作的文章,请参阅Building Excel Real-Time Data Components in Visual Basic .NET它面向VB.NET,而不是C#,但原则是相同的。

(b)在函数MyFunction(x,y,z,Refresh)中添加另一个参数。通过让每个函数引用“刷新”单元格(可以放在隐藏的工作表或隐藏的工作簿上),您可以更改“刷新”单元格以强制重新计算所有函数。缺点是它需要这个额外的虚拟参数。

(c)坚持使用Application.CalculateFull(),因为这是迄今为止最容易编码的。我理解性能问题,但编码非常简单(只需一行)并且100%可靠。

总的来说,我认为我会选择Find / Replace方法。这是一种干净,简单,非常有效的选择性重新计算技术。

- 迈克

相关问题