2010-11-02 2 views
1

В настоящее время я пишу утилиту, которая берет два разных набора данных из документа Excel и отправляет их двум различным веб-службам. Каждый набор данных имеет собственную кнопку, которая отправляет данные в веб-службу. Когда нажата кнопка a, соответствующая веб-служба затем возвращает данные в зависимости от входных значений.VB - Automated Excel в Visual Studio 2010 - выбор Измененный вопрос

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

c:\temp\[book1.xls]sheet1'!a1 

Теперь то, что я пытаюсь сделать, это автоматически кнопку или обновления «нажмите», на мой утилиты, когда пользователь связывает их ячейку соответствующей ячейки на моей полезности.

Я пробовал событие смены вариантов на своей странице. Но это фактически не обрабатывается, пока моя утилита не активна или не нажата.

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

+1

Является ли ваша утилита в Excel или проекте VB.NET? Потому что, если он находится в Excel, просто создайте его. – JeffO

+0

Проект VB.net. – Johnrad

ответ

2

Требования:
необходимо гарантировать, что, когда пользователь использует excel, ваше приложение может собирать данные. В то время ваше приложение может не работать. Вам нужно событие Worksheet_SelectionChange() для автоматического запуска не только при активном приложении.

Решение:
В основном для того, чтобы гарантировать, что Worksheet_SelectionChange() работает все время, и для того, чтобы гарантировать, что каждый раз, когда пользователь открывает экземпляр Excel вы можете собирать и обрабатывать данные/формулу, введенную в конкретный адрес целевого диапазона, который необходимо связать с событием changechange внутри VB.NET Excel COM Addin. Существует несколько способов сделать это, но поскольку вы используете VB.NET, вам лучше всего использовать новейший подход, который создает VSTO COM Addin.
Существует множество других заданий о том, как лучше всего построить добавление VSTO (некоторые из C# в VB.NET, но вся эта информация точно такая же для обоих, просто для другого синтаксиса).
Итак, вам понадобятся два проекта. Ваш существующий, плюс добавление Excel VSTO (которое вы также можете сделать в VB.NET).

Теперь в событии selectionchange вы должны убедиться, что ваш код правильно управляет целевым диапазоном; то есть. убедитесь, что вы проверяете некондигированные группы диапазонов с помощью выбора ... A1: B1; D2: E2 и скопируйте данные в свое приложение. Вы можете использовать формат, такой как xml, для сериализации последних данных из excel, чтобы, если ваше приложение не открыто в то время, оно может десериализовать и прочитать данные, хранящиеся для него, в следующий раз, когда он будет открыт. Я полагаю, что это действительно зависит от того, как вы обрабатываете данные (т. Е. Загружаете ли они в datagrid?) И планируете ли вы продолжить обработку и хранить ее где-то еще позже (в этом случае, возможно, вы можете поместить ее прямо в базу данных из добавление в excel).

+0

Как в стороне, убедитесь, что вы захватили копию VSTO powertools (для VSTO 3.0 и выше, я верю), которые дают вам пространство имен Microsoft.office.interop.excel.extensions. Это значительно облегчает работу с общими объектами, такими как объект Range, поскольку это уменьшает количество вызовов метода Get_someProperty. Вы не ограничены использованием этого пространства имен в проектах VSTO. –