Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Загрузчик из Excel-файла MS SQL Server  [new]
danton
Member

Откуда:
Сообщений: 170
Добрый день!

Есть 100 Excel файлов одного формата.

Название файлов - дата
Внутри файлов много инфы

Необходимо из всех файлов достать название, записать
в поле в табличке в MS SQL Server

Необходимо из всех файло выбрать всего 2 поля и записать и х в нужные поля в табличке в MS SQL Server

Установлен MS SQL Server 2008 R2

Подскажите,как лучше реализовать подобное?
1 фев 12, 18:45    [12014687]     Ответить | Цитировать Сообщить модератору
 Re: Загрузчик из Excel-файла MS SQL Server  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
danton,


opendatasource и Microsoft.Jet.OLEDB вам в помощь
1 фев 12, 18:49    [12014726]     Ответить | Цитировать Сообщить модератору
 Re: Загрузчик из Excel-файла MS SQL Server  [new]
user89
Member

Откуда:
Сообщений: 2083
danton,

11970343
1 фев 12, 19:00    [12014794]     Ответить | Цитировать Сообщить модератору
 Re: Загрузчик из Excel-файла MS SQL Server  [new]
danton
Member

Откуда:
Сообщений: 170
я думал воспользоваться SSIS, но не знаю умеет ли он распозновать конкретные диапазоны в Excel
тем более считывать название файла.
1 фев 12, 19:15    [12014880]     Ответить | Цитировать Сообщить модератору
 Re: Загрузчик из Excel-файла MS SQL Server  [new]
danton
Member

Откуда:
Сообщений: 170
WarAnt,

можно подробнее
1 фев 12, 19:15    [12014883]     Ответить | Цитировать Сообщить модератору
 Re: Загрузчик из Excel-файла MS SQL Server  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
danton, если вам нужно обращаться к конкретным ячейкам или диапазонам файла Excel, то видимо надобно будет вычитывать через OLE.
1 фев 12, 19:18    [12014900]     Ответить | Цитировать Сообщить модератору
 Re: Загрузчик из Excel-файла MS SQL Server  [new]
danton
Member

Откуда:
Сообщений: 170
сейчас рабочий вариант выглядит так:
i:=9;
sql_conn.StartTransaction;
cxMemo1.Lines.Add(Str);
while True do begin
Application.ProcessMessages;
if MsExcel.ActiveSheet.Cells[i, 3].text='' then break;
ss:= MsExcel.ActiveSheet.Cells[i, 10].value;
s:= 'INSERT INTO tbl_Furshet2(theDate,RegionName,CustomerName,GroupName,EAN,PName,GDS, Sum_GDS,Customer_new_ID) VALUES(''' +
temps + ''',null,''' +
StringReplace(StringReplace(MsExcel.ActiveSheet.Cells[i, 2].text,',','',[rfReplaceAll]),'''','',[rfReplaceAll]) + ''',''' +
StringReplace(stringReplace(MsExcel.ActiveSheet.Cells[i, 7].text,',','',[rfReplaceAll]),'''','',[rfReplaceAll]) + ''',''' +
VarToStr(skype) + ''',''' +
StringReplace(stringReplace(MsExcel.ActiveSheet.Cells[i, 11].text,',','',[rfReplaceAll]),'''','',[rfReplaceAll]) + ''',''' +
StringReplace(stringReplace(stringReplace(MsExcel.ActiveSheet.Cells[i, 14].text,'.','',[rfReplaceAll]),',','',[rfReplaceAll]),'''','',[rfReplaceAll]) + ''',''' +
stringReplace(stringReplace(stringReplace(MsExcel.ActiveSheet.Cells[i, 15].text,'.','',[rfReplaceAll]),',','.',[rfReplaceAll]),' ','',[rfReplaceAll]) + ''',''' +
StringReplace(stringReplace(MsExcel.ActiveSheet.Cells[i, 3].text,',','',[rfReplaceAll]),'''','',[rfReplaceAll]) + ''')';
i:=i+1;
try
sql_conn.ExecSQL(s,[]);
except

Но этот код был написан 100 лет назад, потому хотел разобраться,какой подход является оптимальным
1 фев 12, 19:23    [12014918]     Ответить | Цитировать Сообщить модератору
 Re: Загрузчик из Excel-файла MS SQL Server  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
danton, проверьте разные подходы... В чем проблема?
1 фев 12, 19:47    [12015017]     Ответить | Цитировать Сообщить модератору
 Re: Загрузчик из Excel-файла MS SQL Server  [new]
user89
Member

Откуда:
Сообщений: 2083
danton,
для ускорения обработки, данные из Excel лучше кинуть (одной командой) в массив, и потом считывать из массива.
Также i:=i+1 заменить на inc(i)
+ Один из примеров. Здесь заполнение StringGrid, но слегка изменить, думаю не проблема
procedure TForm1.Button2Click(Sender: TObject);
var
  WorkBk: _WorkBook;
  WorkSheet: _WorkSheet;
  K, R, X, Y: Integer;
  IIndex: OleVariant;
  RangeMatrix: Variant;
  NomFich: WideString;
  i, j : integer;
begin

// Полезная штукa:
// XL.cells.select;                     // Выбираем все

if not OpenDialog1.Execute then exit;
NomFich := OpenDialog1.FileName;
  IIndex := 1;
  XLApp.Connect;
  // Открываем файл Excel
  XLApp.WorkBooks.Open(NomFich, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
  EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,EmptyParam,0);
  WorkBk := XLApp.WorkBooks.Item[IIndex];
  WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
  // Чтобы знать размер листа (WorkSheet), т.е. количество строк и количество
  // столбцов, мы активируем его последнюю непустую ячейку
  WorkSheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate;
  // Получаем значение последней строки
  X := XLApp.ActiveCell.Row;
  // Получаем значение последней колонки
  Y := XLApp.ActiveCell.Column;
  // Определяем количество колонок в TStringGrid
  StringGrid1.ColCount := Y;
  // Сопоставляем матрицу WorkSheet с нашей Delphi матрицей
  RangeMatrix := XLApp.Range['A1',XLApp.Cells.Item[X,Y]].Value;
  // Выходим из Excel и отсоединяемся от сервера
  XLApp.Quit;
  XLApp.Disconnect;

ProgressBar1.Max := X+Y;
Label1.Caption := 'Обработка XLS-файла ...'; Application.ProcessMessages;

  //  Определяем цикл для заполнения TStringGrid
  K := 1;
  repeat
    for R := 1 to Y do
      StringGrid1.Cells[(R - 1),(K - 1)] := RangeMatrix[K,R];
    Inc(K,1);
    StringGrid1.RowCount := K + 1;
ProgressBar1.Position := ProgressBar1.Position + 1;
  until K > X;
// Unassign the Delphi Variant Matrix
RangeMatrix := Unassigned;

end; // Button2Click

2 фев 12, 10:23    [12017062]     Ответить | Цитировать Сообщить модератору
 Re: Загрузчик из Excel-файла MS SQL Server  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5126
danton
я думал воспользоваться SSIS, но не знаю умеет ли он распозновать конкретные диапазоны в Excel
тем более считывать название файла.

умеет
2 фев 12, 10:33    [12017125]     Ответить | Цитировать Сообщить модератору
 Re: Загрузчик из Excel-файла MS SQL Server  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
загрузка диапазона ячеек
Select * from [Sheet1$A8:D22]
11919800
2 фев 12, 10:50    [12017274]     Ответить | Цитировать Сообщить модератору
 Re: Загрузчик из Excel-файла MS SQL Server  [new]
danton
Member

Откуда:
Сообщений: 170
Slava_Nik,

диапазон громко сказано, нужно грубо говоря рендомные области брать из Екселя.
2 фев 12, 13:58    [12018944]     Ответить | Цитировать Сообщить модератору
 Re: Загрузчик из Excel-файла MS SQL Server  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
danton
диапазон громко сказано, нужно грубо говоря рендомные области брать из Екселя.

для рандомных областей - лучше всего именно ваш изначальный вариант - готовить наборы для вставки на клиенте, а затем отсылать на сервер. Может стоит формировать пачки, как советовали ранее.
2 фев 12, 14:39    [12019407]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить