-
Задача: есть много экселевских файлов. Нужно из них перегнать данные в некую локальную базу (скорее всего - MSDE), дальше будет разбивка этих данных по категориям (но с этим уже проблем нет, это я знаю как делать). Файлов - много, думаю что где-то от пары сотен до пары тысяч.
Предполагаемое решение - подаю на сервер имя файла, далее через OpenRowSet затаскиваю в промежуточную таблицу данные. Так по каждому из файлов. После человек уже ручками бьёт их по неким категориям и как-то начинает с ними работать.
Таким экспортом не занимался, поэтому хочу спросить: какие подводные камни? Есть ли какие-то конкретные статьи по работе MSSQL - Excel? Оптимален ли способ, который я описал (может тупо через связку Excel -> OLE -> Delphi -> ADO -> MSSQL будет проще и быстрее)?
Да, забыл сказать. Предполагается, что будет использоваться MSSQL 2000, либо MSDE для него. Имеет ли смысл повысить до MSSQL 2005?
Буду признателен за любые ответы или советы.
-
(может тупо через связку Excel -> OLE -> Delphi -> ADO -> MSSQL будет проще и быстрее)?
через связку Excel -> ADO(Delphi) -> MSSQL
-
Либо исключить еще и Delphi
-
Медвежонок Пятачок © (07.05.09 13:07) [2] Имеется в виду написать DTS-пакет?
-
Ну в общем да, хотя дтс это уже устаревшее. В общем открыть книгу средствами адо либо в delphi либо прямо на сервере. Без оле автоматизации ёкселя.
-
> В общем открыть книгу средствами адо либо в delphi либо > прямо на сервере.
Ну так а это разве не есть тот самый OpenRowSet?
-
ну он и есть. правда если учесть что подаю на сервер имя файла
то ясно, что этим наверное будет заниматься свое приложение. то есть оно будет. тогда пусть уж оно и открывает книгу само.
-
прочитать эксель как таблицу или сделать например insert into mssql select * from excel это фигня. главная проблема в том что в excel данные набивает человек, и excel ему позволяет это делать в произвольном порядке, не контролируя чтобы в цифрах были цифры, в датах даты, и чтобы определенные данные лежали в определенных ячейках.
-
> прочитать эксель как таблицу или сделать например insert > into mssql select * from excel это фигня. > главная проблема в том что в excel данные набивает человек, > и excel ему позволяет это делать в произвольном порядке, > не контролируя чтобы в цифрах были цифры, в датах даты, > и чтобы определенные данные лежали в определенных ячейках. >
Не-не, там сам файл программой генерится по некоему шаблону. Так что сам файл - правильный. Коля, а я же могу в select * from excel как-то указать, что начинать надо, допустим, с пятого ряда и до конца? Там просто первые 4 строки - некая шапка, к данным отношения не имеющая. Грубо говоря, есть набор прайс-листов, нужно их загрузить в БД и анализ проделать.
-
> Грубо говоря, есть набор прайс-листов, нужно их загрузить > в БД и анализ проделать.
поищи готовое, мой тебе совет
-
как-то указать, что начинать надо, допустим, с пятого ряда
Решал аналогичную задачу. Сначала традиционно начал мутить "настройки импорта" так как файл мог быть произвольным. Потом взвесив все за и против, отказался от затеи. Написал ппросто интеллектуальный испорт без настроек вообще из вообще любого ёкселя.
по итогу объем кода вышел на порядок меньше чем если бы : были зарзарботаны структуры хранения натроек графический редактор настроек текстовые спецификации-требования к оформлению файла
-
> поищи готовое, мой тебе совет
Сильно подозреваю, что готовое в данной ситуации - не пойдёт. Не тот масштаб задач. Основная задача - не данные перегнать, а последующий их анализ. Перегнать - фигня, я собственно спросил, пока у меня тут всякий софт ставится.
-
> Написал ппросто интеллектуальный испорт без настроек вообще > из вообще любого ёкселя.
Ну дык эта... Ты не хвастайся, ты делись, если оно не секретное.. :) На самом деле файлы имеют абсолютно четкую структуру, единственное различие - в одном может быть 5 строк (значащих), а в другом может быть 2000.
-
По пятой строке простой выход может быть таким: потребовать в книге оформить диапазон интересующих ячеек в виде именованного тогда просто будет select * from [name] куда попадут только нужные данные. либо писать AI (это не так много на самом деле. Ну десять строк кода)
-
Да ничего секретного. В моем случае данных в книге много, но мне нужны только счет + сумма
Делаю селект всего листа. Шагаю сверху вниз/слева направо. Ищу первую строку, в которой в одной из ячеек есть нечто похожее на счет (регулярками). Нашел первую строку и индекс колонки со счетом. Далее сканирую поля строки и ищу сумму, помня, что она может быть в разных форматах (снова регулярки) Ну типа и все. Далее шагаю вниз пока не кончатся счета.
Ну и что бы не было мучительно больно, код структурирован. Перебор строк - одна процедура в параметрах которой каллбак. каллбаков много под разные цели.
-
> указать, что начинать надо, допустим, с пятого ряда и до конца? нет такого, не знаю. ну, например тогда сделать не в один запрос а в 2, сначала во временную таблицу у которой одно дополнительно поле автоинкремент после с него обрезая как нужно в ту что нужна.
-
> нет такого, не знаю.
ОК, всем спасибо! Пока больше вопросов нет.
|