Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Импорт данных в 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.083 c
2-1270073429
Виктор
2010-04-01 02:10
2010.08.27
Запретить печать из TWebBrowser


15-1267253714
Григорьев Антон
2010-02-27 09:55
2010.08.27
Умер Архангельский


2-1268353155
Женя
2010-03-12 03:19
2010.08.27
связанные таблицы


2-1274515199
Fantasy
2010-05-22 11:59
2010.08.27
ICS THttpCli иза тсутствие help-а, пршу подсказать.


2-1273576150
noob_one
2010-05-11 15:09
2010.08.27
Variant как массив.