Мне просто нужно было это сделать, и этот поток долгое время был тихим, поэтому я подумал, что было бы полезно предоставить недавнюю точку данных.
В моем приложении бродячие продавцы используют копию рабочей книги Excel, которая отслеживает ход работы потенциального клиента с помощью кредитной заявки. Текущий этап приложения необходимо автоматически сохранить обратно в удаленную базу данных SQL, чтобы мы могли создавать отчеты по нему.
Отклоненные методы обновления базы данных из Excel:
SSIS и OpenRowSet - оба метода, позволяющие SQL Server извлекать данные из Excel, и не очень хорошо работают, когда книга Excel находится в неопределенном месте на компьютер пользователя, и, конечно, нет, когда книга в настоящее время открыта в Excel.
ADO теперь, если не считать его устаревшим, тем не менее выглядит очень длинным в зубе. Кроме того, я хотел, чтобы решение было надежным, если пользователь не подключен к Интернету.
Я также подумал о запуске веб-API на конечном сервере. Макросы в книге Excel подключаются к веб-API для передачи данных. Однако иногда бывает сложно позволить веб-API взаимодействовать с внешним миром. Кроме того, код, который делает его устойчивым перед лицом временной потери интернет-соединения, является болезненным.
Принятое решение:
Решение, которое я планирую принять, это низкотехнологичное: email . Excel отправляет данные по электронной почте на адрес, расположенный на сервере Exchange. У всех в компании установлен Outlook, поэтому электронные письма отправляются путем программного добавления их в Outlook Outbox. Outlook прекрасно обрабатывает случай, когда пользователь не в сети. На стороне сервера пользовательский исполняемый файл C #, запускаемый через регулярные промежутки времени планировщиком задач, опрашивает входящие и обрабатывает электронные письма.