Копирование рабочих таблиц между рабочими книгами - Excel interop - PullRequest
1 голос
/ 23 августа 2011

Я копирую листы из одной книги и вставляю их во вторую книгу. Я использую этот код:

book = appExcel.Workbooks.Open(@"e:\tr\pliki\filename.xlsm",
                       Missing.Value, Missing.Value, Missing.Value,
                       Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                       Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                       Missing.Value, Missing.Value, Missing.Value);

            Microsoft.Office.Interop.Excel.Global global = new Microsoft.Office.Interop.Excel.GlobalClass();
            sheet.Copy(Missing.Value, global.Sheets[5]);
            book.Save();

Все отлично работает, но проблема с формулами. После того, как рабочая таблица была скопирована, в нее ссылаются на значения в первой рабочей книге. Пути формул содержат пути к первой книге, из которой она была скопирована:

='E:\tr\pliki\[filename.xlsm]worksheetA'!A1:E2

и должно быть так:

='worksheet'!A1:E2

Кто-нибудь мне помогает?

1 Ответ

2 голосов
/ 23 августа 2011

Я не знаю чистого способа сделать то, что вы пытаетесь сделать, так или иначе, это обходной путь, который может решить вашу проблему. Это просто вопрос изменения формул в текст до копирования листа и восстановления всего после этого. То есть вы можете заменить все = в ваших ячейках какой-то строкой, которая, как вы знаете, отсутствует в ваших данных (например, что-то странное, например, X_X_X_X_X_X), а затем вернуться к исходной ситуации.

Код может быть примерно таким:

        Microsoft.Office.Interop.Excel.Application appExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();
        Microsoft.Office.Interop.Excel.Workbook srcBook = appExcel.Workbooks.Open(@"c:\tmp\test.xls",
                   Missing.Value, Missing.Value, Missing.Value,
                   Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                   Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                   Missing.Value, Missing.Value, Missing.Value);
        Microsoft.Office.Interop.Excel.Workbook destBook = appExcel.Workbooks.Add(Missing.Value);
        Microsoft.Office.Interop.Excel.Worksheet srcSheet = (Microsoft.Office.Interop.Excel.Worksheet)srcBook.Worksheets[1];
        Microsoft.Office.Interop.Excel.Range usedRange = srcSheet.UsedRange;
        usedRange.Replace("=", "X_X_X_X_X_X", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
        srcSheet.Copy(destBook.Worksheets[1], Missing.Value);
        Microsoft.Office.Interop.Excel.Worksheet destSheet = (Microsoft.Office.Interop.Excel.Worksheet)destBook.Worksheets[1];
        usedRange.Replace("X_X_X_X_X_X", "=", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
        usedRange = destSheet.UsedRange;
        usedRange.Replace("X_X_X_X_X_X", "=", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...