Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Delphi .NET
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.04.2011, 23:27
SawA SawA вне форума
Новичок
 
Регистрация: 09.03.2011
Сообщения: 57
Репутация: 10
По умолчанию 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  
Старый 27.04.2011, 23:32
SawA SawA вне форума
Новичок
 
Регистрация: 09.03.2011
Сообщения: 57
Репутация: 10
По умолчанию

ой прошу прощения кажись и тему не в том разделе написал ошибся хотел в разное тыкнул не туда ((
Ответить с цитированием
  #3  
Старый 27.04.2011, 23:33
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

100500 лет назад делал прогу для копирования нескольких XLS файлов (в каждом по одной странице) - в один, с созданием страниц. Посмотрите, может поможет чем нибудь.
Вложения
Тип файла: zip XLS Splitter v.1.0.zip (20.1 Кбайт, 23 просмотров)
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #4  
Старый 28.04.2011, 00:00
SawA SawA вне форума
Новичок
 
Регистрация: 09.03.2011
Сообщения: 57
Репутация: 10
По умолчанию

Цитата:
Сообщение от Assistant
100500 лет назад делал прогу для копирования нескольких XLS файлов (в каждом по одной странице) - в один, с созданием страниц. Посмотрите, может поможет чем нибудь.

спасибо есть полезная информация но к сожалению там копирование идет листами как я понял а мне нужно конкретную инфу с книги брать и записывать в другую книгу
Ответить с цитированием
  #5  
Старый 28.04.2011, 00:09
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

если вам полностью строка нужна, нужно выделять её через
Код:
worksht2.Range['A1:I1'].Select;
worksht2.Cells.Copy;
и потом уже в нужной книге вставлять в нужное место, так же выделением и вместо Copy делать Paste
Код:
worksht1.Range['A1:I1'].Select;
worksht1.Cells.Paste;
Я лично так бы сделал.

P.S.: это чисто так, теоретически, а если по делу, то нужно точно знать что, откуда и куда копировать надо, тогда уже могу исходник написать.

P.S.2: с меня плохой теоретик, я практик )) взял и сделал, главное что бы было четкое условия и нужные данные.
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя

Последний раз редактировалось Assistant, 28.04.2011 в 00:20.
Ответить с цитированием
  #6  
Старый 30.04.2011, 10:09
SawA SawA вне форума
Новичок
 
Регистрация: 09.03.2011
Сообщения: 57
Репутация: 10
По умолчанию

оО пасиб тоже пригодится а по поводу самой темы ее можно закрыть я нашол ошибку свою причем она до бонально проста аш стыдно сказать ну чтоб другие не повторяли всетаки скажу

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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:39.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter