0

次の問題があります。一部のアプリケーションは、Excel ファイルを開き、数秒ごとに自動的にそこにデータを書き込みます。Excel ファイルは排他的に開かれ、別のアプリケーションからアクセスできません。セルの内容はかなり速く変更されるため、開いたファイル内のセルの内容を読み書きする必要があります。開いていると言うときは、Excel アプリケーションが開いていて、それを見ていることを意味します。

特定のセルに入力したり、特定のセルを読み取ったりするために、ac# アプリケーションから winapi を使用して、開いている Excel にメッセージを送信することは可能ですか。ファイルがロックされているので、この方法を試す必要があるので、この方法でアクセスしようと考えています。

Excel ウィンドウ ハンドルを取得し、セルを読み取り、テキストをセルに送信します。

前もって感謝します

4

2 に答える 2

0

Excel のインスタンスが C# アプリと同じマシンで実行されている場合は、次を使用してそのインスタンスを取得できます。開いているスプレッドシートからデータを読み取るために、ユーザーの実行中の Excel インスタンスを取得するために使用します。

private Excel.Application GetCurrentVersionOfExcel()
{
    Excel.Application xlApp;

    // Try to get the currently-running Excel application

    try
    {
        xlApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
    }
    catch
    {
        // In case there isn't a version running or the current version hasn't registered itself with the Running Object Table

        xlApp = null;
    }

    return xlApp;
}

それでもうまくいかない場合は、開いているすべてのワークブック プロセスを調べて、探しているものを見つけるためのコードも用意しています。かなり長いので、うまくいくと思われるものがあればお知らせください。投稿します。基本的には、ウィンドウ ハンドルを取得し、子ウィンドウをチェックして、それらがワークブックであるかどうかを確認します。

于 2012-11-16T22:08:42.773 に答える
0

DDE (Dynamic Data Exchange) API を試して、Excel とやり取りすることができます。例、DDESend() 関数は、Excel で DDE 通信を行うために使用されます。詳細については、次を参照してください。

http://office.microsoft.com/en-us/access-help/ddesend-function-HA001228822.aspx

于 2012-11-15T18:11:25.343 に答える