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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.08.2010, 09:40
emercom emercom вне форума
Прохожий
 
Регистрация: 03.08.2010
Сообщения: 2
Репутация: 10
По умолчанию Не работает цикл поиска-копирования по стирокам excel

Здравствуйте,господа. Помогите пожалуйста. В delphi-программе работаю с excel.
Программа создает 2 книги - 1.*ночные данные* и 2.*дневные данные*.
Далее не могу собрать эти данные в один документ. Пытаюсь скопировать *ночные* в *дневные*.
В обоих книгах столбцы b,c,d,e по-строчно заполнены одинаково:
книга1: b1:маша c1:саша d1:даша e1:наташа, b2:петя c2:коля d2:ваня e2:толик,
книга2: b1:маша c1:саша d1:даша e1:наташа,b2:петя c2:коля d2:ваня e2:толик, и т.д.
Количество столбцов вообще в обоих книгах одинаково, количество строк разное и строки конечно могут быть не по порядку и поменяны.
Есть столбцы в *ночных* (k,l,n), данные из которых мне нужно скопировать в *дневные*.
В общем делаю так (но с ошибками блин ):
По каждой строчке от начала до конца книги1 беру диапазон1 b[i]:e[i], диапазон2 k[i]:l[i], диапазон3 n[i].
Ищу в книге2 диапазон1, номер строки где он прячется присваиваю j, и вставляю диапазон2 в k[j]:l[j], диапазон3 n[j].

Прилагаю код процедуры. Что-то в цикле я где-то неправильно делаю,помогите разобраться. Спасибо.

Код:
procedure TFobexcel.Button5Click(Sender: TObject);
var
diapazon1,vstavka1,vstavka2,vst1,vst2,FirstAddress1:string;
i:integer;
diapazon1_range,ztext,rangevstavka1,rangevstavka2,rangecopy1,rangecopy2:variant;
begin
//первый столбец на листе 3   
colfirst:=E1.WorkBooks.Item[3].ActiveSheet.usedrange.column;
//кол-во столбцов на листе 3              
collast:=E1.WorkBooks.Item[3].ActiveSheet.usedrange.columns.count;
//первая строка на листе 3      
rowfirst:=E1.WorkBooks.Item[3].ActiveSheet.usedrange.row;
//кол-во строк на листе 3                 
rowlast:=E1.WorkBooks.Item[3].ActiveSheet.usedrange.rows.count;

//перебор по строкам.
//Пропускаем "шапку"- c 9 строчки и до конца листа 3 
for i:= 9 to rowlast do begin
//дипазон1-это i-тая строка A[i]:D[i] с названиями
//ExcelChar - функция перевода номера столбца в букву
diapazon1:=ExcelChar(colfirst)+inttostr(i)+':'+ExcelChar(colfirst+3)+inttostr(i);
//определяем в excel
diapazon1_range:=E1.WorkBooks.Item[3].ActiveSheet.Range[diapazon1];
//Вот это - текст или value- нужно потом искать в листе 6
ztext:=diapazon1_range.value;  // или .text?

//vst1-это i-тая строка k[i]:l[i] с нужными данными
vst1:=ExcelChar(colfirst+10)+inttostr(i)+':'+ExcelChar(colfirst+11)+inttostr(i);
//vst2-это i-тая строка n[i] с другими нужными данными
 vst2:=ExcelChar(colfirst+13)+inttostr(i);
 //определяем vst1 в excel как диапазон для копирования на листе 3 
 rangecopy1:=E1.WorkBooks.Item[3].ActiveSheet.Range[vst1];
 //копируем  в буфер
 rangecopy1.copy;
 //определяем vst2 в excel как диапазон для копирования на листе 3 
 rangecopy2:=E1.WorkBooks.Item[3].ActiveSheet.Range[vst2];
  //копируем  в буфер
 rangecopy2.copy;
 
try //обработка есес-сно:)
//FindRange1-диапазон на листе 6, где ищем ztext из листа 3
FindRange1 := E1.WorkBooks.Item[6].ActiveSheet.usedrange.find(ztext); //дневное
  if not VarIsEmpty(FindRange1) then begin
       FirstAddress1 := FindRange1.Address;	   
repeat
 find:=FindRange1.Row;   //нашли ztext, в строке find
 //vstavka1-это строка k[i]:l[i] на листе 6, куда встанут нужные данные из листа 3
 vstavka1:=ExcelChar(colfirst+10)+inttostr(find)+':'+ExcelChar(colfirst+11)+inttostr(find);
  //vstavka1-это строка k[i]:l[i] на листе 6, куда встанут другие нужные данные из листа 3
 vstavka2:=ExcelChar(colfirst+13)+inttostr(find);
//определяем дипазоны для вставки в excel
 rangevstavka1:= E1.WorkBooks.Item[6].ActiveSheet.Range[vstavka1];
 rangevstavka2 :=E1.WorkBooks.Item[6].ActiveSheet.Range[vstavka2];
 //вставляем данные листа 3 из буфера на лист 6
 rangecopy1.copy(rangevstavka1);
 rangecopy2.copy(rangevstavka2);
 // повторяем поиск 
 FindRange1 := E1.WorkBooks.Item[6].ActiveSheet.usedrange.FindNext(After :=FindRange1);
  //        until FirstAddress1 = FindRange1.Address;
          end;
     except
messagebox(handle,'Просто нажми меня','Внимание!',0);
end;
end;
 end;
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter