0

これはすべて、C# .NET Excel Interop Automation for Office 2007 にあります。

2 つの Excel アプリを作成し、各アプリケーションで同じブックを開くとします。

app = new Excel.ApplicationClass();
app2 = new Excel.ApplicationClass();

string fileLocation = "myBook.xslx";

workbook = app.Workbooks.Open(fileLocation,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing);

workbook2 = app2.Workbooks.Open(fileLocation,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing);

次に、workbook2 で発生したすべての変更を workbook にレプリケートします。SheetChanged イベントをフックして、セルの変更をキャプチャできることがわかりました。

app.SheetChange += new Microsoft.Office.Interop.Excel.AppEvents_SheetChangeEventHandler(app_SheetChange);

void app_SheetChange(object Sh, Microsoft.Office.Interop.Excel.Range Target)
{
     Excel.Worksheet sheetReadOnly = (Excel.Worksheet)Sh;

     string changedRange = Target.get_Address(missing, missing,
                Excel.XlReferenceStyle.xlA1, missing, missing);

     Console.WriteLine("The value of " + sheetReadOnly.Name + ":" +
                changedRange + " was changed to = " + Target.Value2);

     Excel.Worksheet sheet = workbook.Worksheets[sheetReadOnly.Index] as Excel.Worksheet;

     Excel.Range range = sheet.get_Range(changedRange, missing);

     range.Value2 = Target.Value2;
 }

計算の変更をどのようにキャプチャしますか? 計算イベントにフックすることはできますが、渡されるのは更新されたセルではなく、シートだけです。app.Calculate() または app.CalculateFullRebuild() を強制しようとしましたが、他のアプリケーションでは何も更新されません。数式が変更された場合、変更イベントは発生しません (つまり、スライダー コントロールによって SheetChange イベントではなく SheetCalculate イベントが発生します)。

どの数式が更新されたかを確認する方法はありますか? または、2 つのワークブックをプログラムによってリアルタイムで同期する簡単な方法はありますか?

4

2 に答える 2

0

イベントの伝播はデフォルトでfalseに設定されているため、計算されているセルを通知する直接のイベントはないと思います。そうしないと、計算関数が無限ループに陥ります。また、シートの変更によって自動計算がトリガーされることにも注意してください。また、式のアドレスに変更があることを確認するために、変更だけでなくシート全体で計算が行われます。お役に立てれば。

于 2010-05-28T14:17:35.513 に答える
0

2 人のユーザーが Excel ファイル内の同じセルを編集すると、ブックを保存した 2 番目のユーザーにポップアップの質問が表示されます。これは、最後の保存以降に別のユーザーによって変更されたセルに変更を加えたことをユーザーに通知します。自分の変更を保持して他のユーザーの変更を削除するか、自分の最近の変更を削除するかを選択できます。これは、Excel スプレッドシートを共有するときの一般的な既定の方法です。ただし、この動作は [ワークブックの共有] ウィンドウの [詳細設定] タブでオフにすることができます。

詳細: 1 つの Excel スプレッドシートで複数のユーザーを制御する方法 | eHow.com http://www.ehow.com/how_5913825_control-users-one-excel-spreadsheet.html#ixzz0xcXAZvP1

于 2010-08-25T12:39:16.660 に答える