|
#1
|
|||
|
|||
Delphi and Excel
Здравствуйте уважаемые подскажите пожалуйста! Задача заключается в следующем нужно скопировать данные по строчно из различный книг Excel'я в одну книгу искал по интернету делал различные варианты но глюк остался. Глю заключается в том что с одного документа данные копируются а с последующих нет не могу понять причину код ниже:
Код:
procedure TForm17.Button3Click(Sender: TObject); var Excel,Excel2: Variant; k,j:integer; str:string; str2:variant; begin k:=i; j:=i; i:=0; Excel2 := CreateOleObject('Excel.Application'); Excel2.WorkBooks.Add(ExtractFilePath(ParamStr(0))+'Shablon.xlt'); for i:=0 to j-1 do begin Excel := CreateOleObject('Excel.Application'); Excel.Workbooks.Open[ListBox1.Items[i]]; // считываем путь к файлу //с лист бокса всегда задается // новый путь к файлу str:='A'+IntToStr(i+11); // Эти две строчки всегда копируются работают Excel2.Range[str]:=i; // правильно str:='C'+IntToStr(i+11); //дальше все строчки цикла рботают только один str2:=Excel.Range[str]; //рас, т.е. после первой записи остальные Excel2.Range[str]:=str2; // записываются пустыми str:='D'+IntToStr(i+11); str2:=Excel.Range[str]; Excel2.Range[str]:=str2; str:='E'+IntToStr(i+11); str2:=Excel.Range[str]; Excel2.Range[str]:=str2; str:='F'+IntToStr(i+11); str2:=Excel.Range[str]; Excel2.Range[str]:=str2; str:='G'+IntToStr(i+11); str2:=Excel.Range[str]; Excel2.Range[str]:=str2; str:='H'+IntToStr(i+11); str2:=Excel.Range[str]; Excel2.Range[str]:=str2; str:='I'+IntToStr(i+11); str2:=Excel.Range[str]; Excel2.Range[str]:=str2; Excel.ActiveWorkbook.Close; Excel.Application.Quit; k:=k-1; end; if SaveDialog1.Execute then begin str := SaveDialog1.FileName; end; Excel2.ActiveWorkBook.SaveAs(str); Excel2.ActiveWorkbook.Close; Excel2.Application.Quit; end; Заранее спасибо |
#2
|
|||
|
|||
ой прошу прощения кажись и тему не в том разделе написал ошибся хотел в разное тыкнул не туда ((
|
#3
|
|||
|
|||
100500 лет назад делал прогу для копирования нескольких XLS файлов (в каждом по одной странице) - в один, с созданием страниц. Посмотрите, может поможет чем нибудь.
взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя |
#4
|
|||
|
|||
Цитата:
спасибо есть полезная информация но к сожалению там копирование идет листами как я понял а мне нужно конкретную инфу с книги брать и записывать в другую книгу |
#5
|
|||
|
|||
если вам полностью строка нужна, нужно выделять её через
Код:
worksht2.Range['A1:I1'].Select; worksht2.Cells.Copy; Код:
worksht1.Range['A1:I1'].Select; worksht1.Cells.Paste; P.S.: это чисто так, теоретически, а если по делу, то нужно точно знать что, откуда и куда копировать надо, тогда уже могу исходник написать. P.S.2: с меня плохой теоретик, я практик )) взял и сделал, главное что бы было четкое условия и нужные данные. взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя Последний раз редактировалось Assistant, 28.04.2011 в 00:20. |
#6
|
|||
|
|||
оО пасиб тоже пригодится а по поводу самой темы ее можно закрыть я нашол ошибку свою причем она до бонально проста аш стыдно сказать ну чтоб другие не повторяли всетаки скажу
str:='C'+IntToStr(i+11); str2:=Excel.Range[str]; Excel2.Range[str]:=str2; в строчке выделеной красным получалось что я считывал информацию с тойже строчки в которую надо было записать в другом документе, а т.к. в документах с которых я считывал информацию строчка всегда находилась на одном месте то получалось что дальше я просто считывал пусты естрочки и записывал в общем надо сделать так: str:='C'+IntToStr(i+11); str2:=Excel.Range['C12']; //всегда одна и таже позиция Excel2.Range[str]:=str2; |