Как выделить диапазоны данных в Excel с помощью C #? - PullRequest
2 голосов
/ 15 декабря 2009

Интересно, есть ли способ репликации функциональности диалогового окна вставки диаграммы с использованием C #. Мне нужно отобразить всплывающее окно, но, что более важно, позволить пользователю выбирать диапазоны данных.

Я также хочу, чтобы диапазоны были выделены с помощью цветных полей Excel. Вот изображение того, как Excel выделяет диапазоны при вставке диаграммы. Я хотел бы получить эти ящики из моей надстройки C #.

Подсветка диапазона Excel http://img696.imageshack.us/img696/5290/excel.png

Ответы [ 2 ]

3 голосов
/ 18 декабря 2009

В VBA есть элемент управления RefEdit, который позволяет вам сделать это, и есть подробное пошаговое руководство по его использованию здесь: Как использовать элемент управления RefEdit с пользовательской формой .

К сожалению, в C # нет встроенного элемента управления, который бы позволял вам делать это. Вы можете использовать VBA в качестве внешнего интерфейса - я очень сомневаюсь, что вы захотите это сделать - или вы можете создать эквивалентный элемент управления RefEdit, используя C #. Вот статья о том, как это сделать, а также полнофункциональный пример кода C # здесь: Как кодировать элемент управления RefEdit , автор Gabhan Berry.

Обновление на основе комментария zzandy:

"На самом деле вопрос в том, как выделить выбранные диапазоны, а не о том, как выбрать диапазон. Блок ввода (csharp-examples.net/inputbox) доступно из C # и позволяет выбрать диапазоны ".

Получение диапазонов для выделения в нескольких цветах будет невозможно. Такая подсветка происходит только в Excel при создании формул на листе, а не при выборе диапазонов для каких-либо других целей. Единственный способ создания, который потребовал бы героического количества подклассов или перехвата, и я бы не рекомендовал его.

Некоторые решения, однако, позволят вам, по крайней мере, иметь выделенную полосу вокруг выделения (она же «походные муравьи»). Если вы используете VBA в качестве внешнего интерфейса, вы можете использовать встроенный элемент управления RefEdit , о котором я упоминал выше, который помещает полосу выделения вокруг выбранного диапазона.

Пример C #, который я привел выше , позволит вам использовать элемент управления, похожий на RefEdit, в форме C #, но он не будет включать полосу выделения при выборе - он просто будет использовать стандарт посмотрите, когда диапазон обычно выбран.

Если вы хотите использовать простое решение для ввода, вместо элемента управления в форме, тогда приведенный вами пример C # будет работать (если вы используете Form.Show (), но не Form.ShowDialog ()), но он не будет показывать какую-либо специальную полосу выделения или другую подсветку. Для простого поля ввода, в котором использует выбор полосы выделения, вы можете использовать метод Excel.Application.InputBox , передав значение '8' для 'Типа' Это означает, что значение, возвращаемое методом InputBox, должно иметь тип данных «Excel.Range»:

Excel.Application excelApp = ...;

string prompt = "Please select the range.";
string title = "Input Range";
int returnDataType = 8;
String DefaultRange = oXL.Selection.Address();

Excel.Range myRange = excelApp.InputBox(
                          prompt,
                          title,
                          DefaultRange,
                          Type.Missing,
                          Type.Missing,
                          Type.Missing,
                          Type.Missing,
                          returnDataType)

Надеюсь, это поможет ...

Mike

0 голосов
/ 15 декабря 2009

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

Затем вы можете просмотреть сгенерированный код и адаптировать его по мере необходимости.

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