Миграция в VSTO / Excel Опции взаимодействия - PullRequest
0 голосов
/ 10 февраля 2009

В настоящее время у нас есть электронная таблица Excel, содержащая большое количество кода VBA. Код VBA отвечает за:

  • Управление, преобразование и форматирование данных листа.
  • Выполнение вызовов функций C # и C ++ COM. При этом выполняется сортировка данных листа в методах C # / C ++, получение результатов и обновление листа с результатами.

Как и другие служебные коды, если требуется.

Теперь мы хотим добавить новый лист в нашу книгу Excel, и нам не нужен VBA. Мы хотим использовать C #. На мой взгляд, я ограничен следующими опциями:

  • Перенести весь проект в VSTO, вручную перекодировав VBA в C # в проекте VSTO.
  • Напишите функциональность нового листа в C # и выставьте его через COM. Код C # будет использовать Excel PIA для обновления листа. Листу понадобится очень тонкий слой VBA для маршалинга данных в методы C #.

Я не думаю, что ManagedXLL поможет мне в этом, поскольку мои требования к коду касаются не только обработки данных листа, но и обновления листа результатами.

Пожалуйста, прокомментируйте / попросите более подробную информацию.

Спасибо.

Ответы [ 2 ]

1 голос
/ 10 февраля 2009

Вы забыли:

  • Перенос всего проекта в VSTO, перенос существующего кода в VB.Net (некоторые из них будут просто копировать / вставлять) и написание нового кода на C #.
  • Поместите новый лист в отдельную рабочую книгу и вызовите старую рабочую книгу как источник данных.
0 голосов
/ 25 февраля 2010

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

  1. сделать подобное для того же преобразования. для нетривиальных сумм VBA с минимальной или отсутствующей документацией это поможет вам понять иногда запутанные подходы к анализу логики и данных.

  2. изменение всех экземпляров ячейки за итерацией и зацикливанием для подхода типа чтение-лист-однократная запись-однократно. Это потребует переписывания разделов кода. прочитайте все реквизиты и значения в начале метода и напишите все те, которые вы хотите вернуть в конце.

  3. Убедитесь, что вся обработка данных и логики выполняется в IN .net с типами данных .net, не используйте свойства объекта диапазона или объекта листа непосредственно внутри цикла, это просто дорогой способ.

  4. наконец, убедитесь, что если вы используете несколько потоков, вы делаете все "Excel материал" в основном потоке.

  5. Прочтите SO, чтобы получить множество советов по правильной утилизации COM-объектов. остерегайтесь ложных схем утилизации.

...