Excel Interop - Как изменить именованный диапазон - PullRequest
4 голосов
/ 20 марта 2012

У меня есть файл шаблона Excel, в который я заполняю данные из коннектора OLEDB для SQL Server.Файл содержит несколько сводных таблиц, которые ссылаются на набор данных, заполняемый базой данных.

В настоящее время я выбираю все строки в листе, используя диапазон «Данные! $ A: $ K».Это приводит к проблеме с пустыми значениями, отображаемыми в сводной таблице.

Я хотел создать именованную таблицу над набором данных и ссылаться на нее в сводных таблицах (плюс я получаю некоторые другие преимущества, которые дают именатаблицы приносят).

Количество строк, естественно, не установлено, поэтому я хотел найти способ установить область именованного диапазона только на фактические значения.

Я использую Excel Interop и C # для этого и не могу найти способ изменить диапазон.Я получил только до:

oRng = oSheet.get_Range("Transactions");

, который выбирает названный диапазон.Но как мне изменить, какие ячейки принадлежат ему?

Или, возможно, есть лучшее решение, которое я должен искать?

РЕДАКТИРОВАТЬ

Динамические диапазоныответ!

Я решил это благодаря @TimWilliams. Ответ:

"Используйте динамический диапазон в вашем шаблоне: http://ozgrid.com/Excel/DynamicRanges.htm"

Мне кажется, что динамические диапазоны лучше описаныздесь: http://www.contextures.com/xlpivot01.html

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

После этого мне пришлось удалить эту строку, используя код c #.

Спасибо, ребята, за помощь.

Ответы [ 4 ]

4 голосов
/ 20 марта 2012

Выполнив следующее, вы создадите именованный диапазон (Транзакции) в таблице, начиная с ячейки A1 и заканчивая ячейкой C3

Range namedRange= oSheet.Range[oSheet.Cells[1, 1], oSheet.Cells[3, 3]];
namedRange.Name = "Transactions";

Если имя уже существует в книге, оно будет заменено, если не он будет создан.

2 голосов
/ 08 мая 2012

Вероятно, слишком поздно для WilliF, но я столкнулся с той же проблемой, и это сработало:

oRng = oSheet.get_Range("Transactions");

Range namedRange = oSheet.Range[oSheet.Cells[1, 1], oSheet.Cells[3, 3]];
namedRange.Name = "Transactions";

С здесь

1 голос
/ 20 марта 2012

Сначала вам нужно будет определить занятый диапазон ячеек на листе. Затем присвойте ему имя. Вы можете использовать свойство UsedRange рабочего листа для получения этого, а также есть несколько других методов.

Программно получить последнюю заполненную строку Excel с помощью C #

Как получить диапазон занятых ячеек в листе Excel

0 голосов
/ 05 декабря 2014

Вы можете получить именованный диапазон:

var oRng = oSheet.get_Range("Transactions");

Затем вы можете переместить или изменить его размер, используя Range.get_Offset(*RowOffset*, *ColumnOffset*) или Range.get_Resize(*RowSize*, *ColumnSize*).Также вы можете использовать Offset[] и Resize[]:

var newRange = oRng.Offset[-1,3].Resize[2,4];

Затем вы можете сохранить его как именованный диапазон следующим образом:

oSheet.Names.Add("Transactions", newRange);

PS: newRange.Name = "Transactions" не работаетдля меня.

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