Как вы реплицируете изменения из одного листа Excel в другой в двух отдельных приложениях Excel? - PullRequest
0 голосов
/ 19 мая 2010

Это все в C # .NET Excel Interop Automation для Office 2007.

Допустим, вы создали два приложения 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);

Теперь я хочу скопировать любые изменения, которые происходят в рабочей книге2, в рабочую книгу. Я понял, что могу подключить событие 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)

Есть ли способ узнать, какие формулы были обновлены? Или есть более простой способ программно синхронизировать две книги в реальном времени?

Ответы [ 2 ]

0 голосов
/ 25 августа 2010

В случае, если два пользователя редактируют одни и те же ячейки в файле Excel, второму пользователю, который сохраняет книгу, задается всплывающий вопрос. Это уведомляет пользователя о том, что она внесла изменения в ячейку, измененную другим пользователем с момента последнего сохранения. Ей предоставляется возможность сохранить свои собственные изменения и, таким образом, удалить другого пользователя или удалить свои последние изменения. Это обычная практика по умолчанию при совместном использовании электронных таблиц Excel. Однако это поведение может быть отключено на вкладке «Дополнительно» окна «Поделиться рабочей книгой».

Подробнее: Как управлять несколькими пользователями в одной электронной таблице Excel | eHow.com http://www.ehow.com/how_5913825_control-users-one-excel-spreadsheet.html#ixzz0xcXAZvP1

0 голосов
/ 28 мая 2010

Я не думаю, что есть какое-либо прямое событие, которое сообщит вам, какие ячейки рассчитываются, поскольку распространение событий по умолчанию установлено в false, в противном случае функция вычисления завершится бесконечным циклом. Также обратите внимание, что смена листа запускает автоматический расчет. И вычисление происходит на всем листе, а не только на изменениях, чтобы убедиться, что есть какие-либо изменения в адресах формул. Надеюсь, это поможет.

...