![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Импорт данных в MSSQL из MS Excel [MSSQL]
Ega23 © (2009-05-07 13:00:00)Задача: есть много экселевских файлов. Нужно из них перегнать данные в некую локальную базу (скорее всего - MSDE), дальше будет разбивка этих данных по категориям (но с этим уже проблем нет, это я знаю как делать). Файлов - много, думаю что где-то от пары сотен до пары тысяч.
Предполагаемое решение - подаю на сервер имя файла, далее через OpenRowSet затаскиваю в промежуточную таблицу данные. Так по каждому из файлов. После человек уже ручками бьёт их по неким категориям и как-то начинает с ними работать.
Таким экспортом не занимался, поэтому хочу спросить: какие подводные камни? Есть ли какие-то конкретные статьи по работе MSSQL - Excel? Оптимален ли способ, который я описал (может тупо через связку Excel -> OLE -> Delphi -> ADO -> MSSQL будет проще и быстрее)?
Да, забыл сказать. Предполагается, что будет использоваться MSSQL 2000, либо MSDE для него. Имеет ли смысл повысить до MSSQL 2005?
Буду признателен за любые ответы или советы.
Ega23 (2009-05-07 14:53:00) [1]
> нет такого, не знаю.
ОК, всем спасибо! Пока больше вопросов нет.
sniknik (2009-05-07 14:00:00) [2]> указать, что начинать надо, допустим, с пятого ряда и до конца?
нет такого, не знаю.
ну, например тогда сделать не в один запрос а в 2, сначала во временную таблицу у которой одно дополнительно поле автоинкремент после с него обрезая как нужно в ту что нужна.
Медвежонок Пятачок (2009-05-07 13:48:00) [3]Да ничего секретного.
В моем случае данных в книге много, но мне нужны только счет + сумма
Делаю селект всего листа.
Шагаю сверху вниз/слева направо. Ищу первую строку, в которой в одной из ячеек есть нечто похожее на счет (регулярками).
Нашел первую строку и индекс колонки со счетом.
Далее сканирую поля строки и ищу сумму, помня, что она может быть в разных форматах (снова регулярки)
Ну типа и все.
Далее шагаю вниз пока не кончатся счета.
Ну и что бы не было мучительно больно, код структурирован.
Перебор строк - одна процедура в параметрах которой каллбак.
каллбаков много под разные цели.
Медвежонок Пятачок (2009-05-07 13:43:00) [4]По пятой строке простой выход может быть таким:
потребовать в книге оформить диапазон интересующих ячеек в виде именованного
тогда просто будет select * from [name] куда попадут только нужные данные.
либо писать AI (это не так много на самом деле. Ну десять строк кода)
Ega23 (2009-05-07 13:42:00) [5]
> Написал ппросто интеллектуальный испорт без настроек вообще
> из вообще любого ёкселя.
Ну дык эта... Ты не хвастайся, ты делись, если оно не секретное.. :)
На самом деле файлы имеют абсолютно четкую структуру, единственное различие - в одном может быть 5 строк (значащих), а в другом может быть 2000.
Ega23 (2009-05-07 13:40:00) [6]
> поищи готовое, мой тебе совет
Сильно подозреваю, что готовое в данной ситуации - не пойдёт. Не тот масштаб задач. Основная задача - не данные перегнать, а последующий их анализ. Перегнать - фигня, я собственно спросил, пока у меня тут всякий софт ставится.
Медвежонок Пятачок (2009-05-07 13:39:00) [7]как-то указать, что начинать надо, допустим, с пятого ряда
Решал аналогичную задачу.
Сначала традиционно начал мутить "настройки импорта" так как файл мог быть произвольным.
Потом взвесив все за и против, отказался от затеи.
Написал ппросто интеллектуальный испорт без настроек вообще из вообще любого ёкселя.
по итогу объем кода вышел на порядок меньше чем если бы :
были зарзарботаны структуры хранения натроек
графический редактор настроек
текстовые спецификации-требования к оформлению файла
Игорь Шевченко (2009-05-07 13:36:00) [8]
> Грубо говоря, есть набор прайс-листов, нужно их загрузить
> в БД и анализ проделать.
поищи готовое, мой тебе совет
Ega23 (2009-05-07 13:34:00) [9]
> прочитать эксель как таблицу или сделать например insert
> into mssql select * from excel это фигня.
> главная проблема в том что в excel данные набивает человек,
> и excel ему позволяет это делать в произвольном порядке,
> не контролируя чтобы в цифрах были цифры, в датах даты,
> и чтобы определенные данные лежали в определенных ячейках.
>
Не-не, там сам файл программой генерится по некоему шаблону. Так что сам файл - правильный.
Коля, а я же могу в select * from excel как-то указать, что начинать надо, допустим, с пятого ряда и до конца? Там просто первые 4 строки - некая шапка, к данным отношения не имеющая. Грубо говоря, есть набор прайс-листов, нужно их загрузить в БД и анализ проделать.
sniknik (2009-05-07 13:28:00) [10]прочитать эксель как таблицу или сделать например insert into mssql select * from excel это фигня.
главная проблема в том что в excel данные набивает человек, и excel ему позволяет это делать в произвольном порядке, не контролируя чтобы в цифрах были цифры, в датах даты, и чтобы определенные данные лежали в определенных ячейках.
Медвежонок Пятачок (2009-05-07 13:27:00) [11]ну он и есть.
правда если учесть что
подаю на сервер имя файла
то ясно, что этим наверное будет заниматься свое приложение.
то есть оно будет.
тогда пусть уж оно и открывает книгу само.
Ega23 (2009-05-07 13:23:00) [12]
> В общем открыть книгу средствами адо либо в delphi либо
> прямо на сервере.
Ну так а это разве не есть тот самый OpenRowSet?
Медвежонок Пятачок (2009-05-07 13:15:00) [13]Ну в общем да, хотя дтс это уже устаревшее.
В общем открыть книгу средствами адо либо в delphi либо прямо на сервере.
Без оле автоматизации ёкселя.
Раиса (2009-05-07 13:11:00) [14]Медвежонок Пятачок © (07.05.09 13:07) [2]
Имеется в виду написать DTS-пакет?
Медвежонок Пятачок (2009-05-07 13:07:00) [15]Либо исключить еще и Delphi
Медвежонок Пятачок (2009-05-07 13:06:00) [16](может тупо через связку Excel -> OLE -> Delphi -> ADO -> MSSQL будет проще и быстрее)?
через связку Excel -> ADO(Delphi) -> MSSQL