Excel Interop и Formula Range - PullRequest
       6

Excel Interop и Formula Range

3 голосов
/ 01 апреля 2011

Я использую библиотеки Excel Interop, чтобы взять лист и заменить значения в листе. Моя структура листа выглядит следующим образом:

Столбцы A-E содержат формулу, которая обрабатывает данные в столбцах F-L. Когда я обновляю лист, я очищаю содержимое от F-L и оставляю любую формулу в A-E. Затем я заполняю столбцы F-L новыми данными.

Мне нужно, чтобы моя формула в столбцах A-E (любые строки) распространялась на весь диапазон введенных мной новых данных.

Например, =sum(G1,G8) должно стать =sum(G1,G20), если я расширю данные до 20 строк из 8. Есть ли способ получить все существующие формулы в листе? Как мне расширить диапазон формулы?

Ответы [ 4 ]

4 голосов
/ 01 апреля 2011

Я предполагаю, что вы увеличиваете объем данных, вводимых с 8 строк до 20 программно, поэтому, пока вы вводите эти данные, сохраняете счет каждой ячейки, в которую вы вводите данные, а затем в конце вы можетесделай:

yourWorkSheet.Cells[rowCount, column].Formula = string.Format("=SUM(G1:G{0})", rowCount);

Надеюсь, я понял то, что ты просил, дай мне знать, если я что-то упустил, и я пересмотрю.

0 голосов
/ 11 сентября 2012

У меня была похожая проблема, но с формулой IF.Установка его в свойство формулы не сработала.Однако то же самое работает, если установлено значение FormulaLocal ...

благодаря Microsoft:)

Кстати: Formula и FormulaLocal будут работать только для A1 эталонный стиль .Для R1C1 вы должны использовать FormulaR1C1 и FormulaR1C1Local.

0 голосов
/ 16 сентября 2011

Возможно, вам придется проанализировать объект в Range ...

(((Excel.Range))yourWorkSheet.Cells[rowCount, column]).Formula = string.Format("=SUM(G1,G{0})", rowCount); 
0 голосов
/ 01 апреля 2011

Для получения информации о работе с режимом объекта Excel, я бы рекомендовал сначала поискать решение VBA, а затем преобразовать его в C # (что тривиально). В Интернете доступно гораздо больше ресурсов VBA, и иногда вы даже можете помочь себе, записав макрос VBA.

В зависимости от того, где именно находятся ваши формулы, вы можете достичь желаемого, вставляя строки.

например. если у вас есть формула, скажем, A3, которая ссылается на диапазон G1: G8, и теперь вы хотите вставить двадцать строк данных вместо 8, вы можете переместить строку 8 вниз 20-8 = 12 раз, как показано ниже, перед записью ваших данных .

Dim rng As Range
Dim nIndex As Long
Set rng = Rows("8:8")
For nIndex = 1 To 20 - 8
    rng.Insert Shift:=xlDown
Next nIndex

Когда вы сделаете это, формула в A3 будет автоматически изменена, чтобы включить вставленные строки.

Обратите внимание, что выполнение этого с помощью Interop не будет особенно эффективным для большого количества строк (обратное путешествие из приложения в процесс Excel для каждой вставленной строки). Одним из способов повышения производительности является одновременное добавление нескольких строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...