Макрос Excel запускается из Интернета? - PullRequest
1 голос
/ 17 ноября 2009

Мне вручили критический макрос, который берет файл старой школы, полный счетов, который, к счастью, довольно последовательный. Макрос читает этот файл, перемещает данные, чтобы сделать его непротиворечивым, а затем генерирует таблицу с тремя вкладками, которая в значительной степени состоит из трех CSV. Затем он генерирует из этих трех электронных таблиц CSV еще одну таблицу, в которой есть вкладка для каждого счета. Количество счетов может действительно отличаться.

Работает, все довольны. Мы хотели бы выложить это в Интернете с некоторой безопасностью. Пока что так, чтобы пользователь:

1) Заходит в систему, загружает файл старой школы и нажимает на процесс, который затем выдает тот же лист с каждой вкладкой, являющейся счетом.

2) Сохраните данные в базе данных для дальнейшего роста и использования этих данных, а также для составления отчетов.

Я учу себя ASP.NET и C # и думаю, что это будет отличный учебный проект. Прежде чем я начну, можно ли это реально сделать, и что бы порекомендовали другие в этом случае? Должен ли я просто переписать на основе логики в макросе или есть способ портировать поверх существующего кода VBA?

Ответы [ 3 ]

2 голосов
/ 17 ноября 2009

Вы можете сделать это с помощью Excel COM API. Но это ведет к утечкам памяти, я бы не рекомендовал это.

Microsoft имеет Службы Excel, которые позволяют запускать таблицы Excel на сервере. Но это очень дорого и может не поддерживать макросы.

SpreadSheetGear может сделать это. Но я не проверял это сам.

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

1 голос
/ 17 ноября 2009

Вождение Excel из C # на удивление сложно сделать на 100% правильным. И наоборот, управлять Excel из приложения VB6 на удивление легко. Но вызов этого из веб-приложения усложняет задачу, поскольку вам нужно иметь дело как с безопасностью, так и с параллелизмом (2 пользователя одновременно будут спотыкаться друг с другом).

Microsoft не поддерживает использование Excel на сервере (кроме служб Excel), поэтому не ожидайте никакой помощи. SpreadsheetGear подходит для этого, но вам придется заплатить за него.

Вы говорите, что это было бы хорошим учебным проектом - я бы не согласился; это, скорее всего, вообще откажется от программирования. У этого конкретного микса нет «хорошего» решения - это случай наименьшего неприятного взлома. Если вы хотите изучать ASP.NET & C #, я бы сказал, найти другой любимый проект.

1 голос
/ 17 ноября 2009

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

Нет простого перехода с VBA на C #, поскольку весь код VBA предполагает существование excel, что может быть не так. Однако вы можете вызывать макросы в книгах, используя COM API.

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