Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.069 c
15-1274268745
Alx2
2010-05-19 15:32
2010.08.27
Онлайн-интервью с председателем комиссии по борьбе с лженаукой


15-1269034206
Юрий
2010-03-20 00:30
2010.08.27
С днем рождения ! 20 марта 2010 суббота


11-1216669322
Сашик
2008-07-21 23:42
2010.08.27
KOL: нужно ли освобождать память после VarArrayCreate...


15-1264680746
ИТР-самоучка
2010-01-28 15:12
2010.08.27
"Толстый клиент" или "Тонкий клиент"


2-1265883987
Int23
2010-02-11 13:26
2010.08.27
TADOStoredProc Как вызвать табличную функцию?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский