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