5

データベースからの数式とデータがいくつかあります。ExcelDna を使用して、すべての数式をプログラムで更新したいと考えています。これらの数式はすべて ExcelFunctions であり、ExcelCommand name = "Refresh" を配置しました。これに再計算を発行して Excel シートに..

私は以下を使用しますが、NOW()、SUM() などのネイティブ Excel 関数のみを更新します。ExcelDna 関数で更新を呼び出しませんか?

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

前もって感謝します...

4

4 に答える 4

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 にデータをプッシュするもう 1 つの方法は、RTD サーバーを作成するか、最新の Excel-DNA チェックインで新しい Reactive Extensions for Excel (RxExcel) サポートを使用することです。ここにいくつかの情報があります - http://exceldna.codeplex.com/wikipage?title=Reactive%20Extensions%20for%20Excel

于 2012-06-29T08:57:04.223 に答える
3

セルを更新するには、 Ctrl + Alt + F9 (少なくとも Excel 2013 では) を押す必要があります。

于 2015-07-20T13:45:01.543 に答える
3

これは機能します(少なくともExcel 2013では):

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

また

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

1 つ目はすべてのワークブックを再計算し (Ctrl + Alt + F9 を押すのと同様)、2 つ目はすべての数式を再入力するのと似ています。

于 2015-10-09T20:21:33.557 に答える