0

这一切都在 Office 2007 的 C# .NET Excel 互操作自动化中。

假设您创建了两个 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 中发生的任何更改复制到工作簿中。我发现我可以连接 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() 但其他应用程序中没有任何更新。公式更改时不会触发更改事件(即滑块控件会导致 SheetCalculate 事件而不是 SheetChange 事件)

有没有办法查看更新了哪些公式?或者是否有更简单的方法以编程方式实时同步两个工作簿?

4

2 回答 2

0

我认为没有任何直接事件会告诉您正在计算哪些单元格,因为事件传播默认为 false ,否则计算函数将进入无限循环。另请注意,工作表更改会触发自动计算。并且计算发生在整个工作表上,而不仅仅是更改,以确保公式地址中有任何修改。希望这可以帮助。

于 2010-05-28T14:17:35.513 回答
0

如果两个用户编辑 Excel 文件中的相同单元格,则会向保存工作簿的第二个用户显示一个弹出问题。这会通知用户自上次保存以来她已对另一个用户更改的单元格进行了更改。她可以选择保留自己的更改,从而删除其他用户的更改,或删除她最近的更改。这是共享 Excel 电子表格时常见的默认做法。但是,可以在“共享工作簿”窗口的“高级”选项卡中关闭此行为。

阅读更多:如何在一个 Excel 电子表格上控制多个用户 | eHow.com http://www.ehow.com/how_5913825_control-users-one-excel-spreadsheet.html#ixzz0xcXAZvP1

于 2010-08-25T12:39:16.660 回答