MSSQL + Excel
От: baranovda Российская Империя  
Дата: 12.05.09 09:52
Оценка:
Задача, на первый взгляд, самая что ни на есть простая: есть база MSSQL, есть некий сервер приложений, есть файл Excel, который нужно передать на сервер, сохранить копию, пропарсить и залить в таблицы MSSQL.

Файл Excel представляет собой обычный прайс — матрицу примерно 5000 * 10 записей.

Несмотря на богатый выбор технологий, предлагаемых MS для решения задачи, при близком рассмотрении оказывается, что все они в той или иной степени недостаточно надёжные по причинам известной недетерминированности структуры листа Excel: на листе, кроме таблицы, может присутствовать "шапка" и "подвал"; пользователь может забыть типизировать ячейку и вколотить в числовое поле строку; в саму табличную часть документа пользователь может для красоты добавлять пустые строки и т.д.

Имеющиеся в наличии инструменты:
1) Excel + Linked Server/Opernrowset — эта связка заведомо не будет работать при заведомо нетабличной структуре обрабатываемого листа Excel
2) Excel + Integration Services — то же самое
3) Обработка входящего файла на сервере приложений через VBA или Office Interop — чрезвычайно трудоёмко
4) Интеграция с .NET посредством Visual Studio Office Project — ?
5) Прямое обращение к MSSQL через Excel VBA — ?
6) Взаимодействие с веб-сервисом из Excel (c использованием SOAP Toolkit или при помощи интеграции с .NET) — ?

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

Есть ещё возможность прикрутить к этому всему хозяйству SharePoint Services, но пока даже не могу предположить, каким боком.

В общем, прошу поделиться опытом.
Re: MSSQL + Excel
От: GlebZ Россия  
Дата: 12.05.09 10:39
Оценка: 1 (1)
Здравствуйте, baranovda, Вы писали:

B>5) Прямое обращение к MSSQL через Excel VBA — ?

B>6) Взаимодействие с веб-сервисом из Excel (c использованием SOAP Toolkit или при помощи интеграции с .NET) — ?
Я бы выбрал одно из этих двух (только без интеграции с NET). К сожалению, за вгрузку NET в офис приходится расплачиваться лишними секунд 20-30 загрузкой Excel(то же самое касается всех продуктов Office, IE и возможно еще что-то). Посему лучше прямой ADO(благо его не отменяли) и SOAP Toolkit. Ессно выбор благодаря трем вопросам: секьюрити прямого доступа к MSSQL, сложность преобразований данных перед передачей в БД и сценарий изменения логики при развитии проекта. Ежели проблем нет, то лучше прямой доступ, благо писанины немного.
Re: MSSQL + Excel
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 12.05.09 12:30
Оценка: 1 (1)
Здравствуйте, baranovda, Вы писали:

B>Задача, на первый взгляд, самая что ни на есть простая: есть база MSSQL, есть некий сервер приложений, есть файл Excel, который нужно передать на сервер, сохранить копию, пропарсить и залить в таблицы MSSQL.


B>Файл Excel представляет собой обычный прайс — матрицу примерно 5000 * 10 записей.


B>Несмотря на богатый выбор технологий, предлагаемых MS для решения задачи, при близком рассмотрении оказывается, что все они в той или иной степени недостаточно надёжные по причинам известной недетерминированности структуры листа Excel: на листе, кроме таблицы, может присутствовать "шапка" и "подвал"; пользователь может забыть типизировать ячейку и вколотить в числовое поле строку; в саму табличную часть документа пользователь может для красоты добавлять пустые строки и т.д.


B>Имеющиеся в наличии инструменты:

B>1) Excel + Linked Server/Opernrowset — эта связка заведомо не будет работать при заведомо нетабличной структуре обрабатываемого листа Excel
B>2) Excel + Integration Services — то же самое
B>3) Обработка входящего файла на сервере приложений через VBA или Office Interop — чрезвычайно трудоёмко
B>4) Интеграция с .NET посредством Visual Studio Office Project — ?
B>5) Прямое обращение к MSSQL через Excel VBA — ?
B>6) Взаимодействие с веб-сервисом из Excel (c использованием SOAP Toolkit или при помощи интеграции с .NET) — ?

B>Кроме того. Взаимодействие с Excel желательно сделать двусторонним, то есть, к примеру, предоставить пользователю возможность автоматической синхронизации справочника номенклатуры, хранящегося на сервере MSSQL.


B>Есть ещё возможность прикрутить к этому всему хозяйству SharePoint Services, но пока даже не могу предположить, каким боком.


B>В общем, прошу поделиться опытом.


Если Excel 2007, то то можно так:
1)Окрываете excel, на вкладке "данные" в группе "получить внешние данные" создаете подключение к БД (Из других источников -> SQL сервер).
2)на странице появляется таблица, которая по желанию и\или с определенным интервалом подсасывает данные из базы.
3)Ставите OpenXML SDK v2, с помощью него можно на сервере парсить xslx документ и вытянуть нужные значения ячеек таблицы, которые можно сохранить в БД.
4)Останется только геморрой с валидацией данных.
5)При желании серверный код запиихвается в event receiver библиотеки документов WSS и сами xslx файлы для разных талиц туда укладываются.
Re[2]: MSSQL + Excel
От: baranovda Российская Империя  
Дата: 12.05.09 15:52
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, baranovda, Вы писали:


B>>5) Прямое обращение к MSSQL через Excel VBA — ?

B>>6) Взаимодействие с веб-сервисом из Excel (c использованием SOAP Toolkit или при помощи интеграции с .NET) — ?
GZ>Я бы выбрал одно из этих двух (только без интеграции с NET). К сожалению, за вгрузку NET в офис приходится расплачиваться лишними секунд 20-30 загрузкой Excel(то же самое касается всех продуктов Office, IE и возможно еще что-то).

Особых тормозов не заметил (1-4 задержки секунды максимум), но бесит то, что, например, в проекте Office Workbook можно создать только один Workbook. Соответственно, для десятка всевозможных типов входных документов нужно делать десять отдельных проектов.

GZ>Посему лучше прямой ADO(благо его не отменяли) и SOAP Toolkit. Ессно выбор благодаря трем вопросам: секьюрити прямого доступа к MSSQL, сложность преобразований данных перед передачей в БД и сценарий изменения логики при развитии проекта. Ежели проблем нет, то лучше прямой доступ, благо писанины немного.


Пасиба, подумаю.
Re[2]: MSSQL + Excel
От: baranovda Российская Империя  
Дата: 12.05.09 15:52
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Если Excel 2007, то то можно так:


Не, к сожалению только 2003.
Re[3]: MSSQL + Excel
От: Огнеплюх  
Дата: 12.05.09 17:51
Оценка:
Здравствуйте, baranovda, Вы писали:

B>Здравствуйте, gandjustas, Вы писали:


G>>Если Excel 2007, то то можно так:


B>Не, к сожалению только 2003.


Может ради благого дела установить на сервер офис 2007 который будет открывать файл и сохранять в новом формате. Автоматом через COM Open Save.
Re[3]: MSSQL + Excel
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 12.05.09 17:57
Оценка:
Здравствуйте, baranovda, Вы писали:

B>Здравствуйте, gandjustas, Вы писали:


G>>Если Excel 2007, то то можно так:


B>Не, к сожалению только 2003.


У меня есть подозрение, что разработка решения для 2003, удовлетворяющего всем приведенным требованиям, и поддержка его выйдет дороже покупки пачки лицензий для 2007 офиса.
Re: MSSQL + Excel
От: mrozov  
Дата: 14.05.09 09:49
Оценка:
Здравствуйте, baranovda.

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

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

Неприятно, конечно, но вполне терпимо.
Re[4]: MSSQL + Excel
От: GlebZ Россия  
Дата: 14.05.09 10:50
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>У меня есть подозрение, что разработка решения для 2003, удовлетворяющего всем приведенным требованиям, и поддержка его выйдет дороже покупки пачки лицензий для 2007 офиса.

Не думаю... Написание скрипта и сгон собранных данных через ADO, при наличии минимума знаний — 1 ч/д. Так что в данном случае, крутизна — не есть показатель трудоемкости. Правда про деплоинг — вопроса не было...
Re: MSSQL + Excel
От: alex-chin  
Дата: 28.05.09 11:20
Оценка:
Здравствуйте, baranovda, Вы писали:


B>5) Прямое обращение к MSSQL через Excel VBA — ?


Я за этот способ. Единственное, что предлагаю разработать функционал в виде надстройки к Excel. Таблицы парсятся замечательно если использовать автоматы для синтаксического анализа. Сам реализовывал двухуровневый автомат, когда каждая строка — таблица.
Можно упростить себе жизнь попросив пользователя выделить область для анализа и дать ей название (тоже можно сделать через надстройку).
(скриншоты не понял как вставить)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.