Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Excel в Delphi, цикл по строкам (http://www.tehnari.ru/f43/t78161/)

kler_93 08.09.2012 21:12

Excel в Delphi, цикл по строкам
 
Начал изучать редактирование excel книг через delphi по началу было все понятно, пока не столкнулся с одним примером:
Вот картинки что есть и что надо получить:

до
http://s1.ipicture.ru/uploads/20120908/EN8U64Hh.bmp
после
http://s1.ipicture.ru/uploads/20120908/Et6puQCQ.bmp
Задание:
1) После каждой строки добавить 3 пустых строки
2) Объединение
3) С чем пока совсем глухо это в образовавшейся так сказать "матрице"(выделена жирным) вокруг одного числа, к примеру 2,45 заполнить 7 близлежащих ячеек значениями 2,45+-10%от этого числа(так же с 4,56 и 7,67) цифры и задание выдумано мной для практики

ну значит по сути все что надо мне сделать это разобраться с проходом цикла по строкам(так как я не знаю какое конечное кол-во строк в документе)
Как я себе это представил
Код:

procedure TForm1.Button1Click(Sender: TObject);
begin
try
for номер строки равен от 1 до n do
begin
создать новую строку
создать новую строку
создать новую строку
номер строки:=номер строки+1;(что бы перескакивал через изначально 2ую строку и после нее рисовал ещё 3)
end;

но реализовать это программно у меня не входит
Так же пробовал с объединением:
Код:

for a_:=1 to 5 do
begin
excel.WorkBooks[1].WorkSheets[1].Range['a_,5'].Merge;
end;

тоже не выходит, а так все команды, без циклов, все получается:добавить стоку после какой-то строки или объединить или записать значение
p.s
читал форумы и книгу ВАСИЛИЯ КОРНЯКОВА ПРОГРАММИРОВАНИЕ ДОКУМЕНТОВ И ПРИЛОЖЕНИЙ MS OFFICE в DELPHI про массивы ничего(((

Gruvi 08.09.2012 21:29

Ну во
1. если конечное кол-во строк в документе ты не знаешь то целесообразнее было бы использовать while.
2. ты сам ответил на свой вопрос, задай матрицу в документе по столбикам и строкам.
3. цикл объединения неправильно задан.

попробуй разбей все на отдельные процедуры и функции. и действуй от этого уже.

kler_93 08.09.2012 21:36

А как в delphi писать цикл пока не конец excel документа?
и ещё что-то я не понял про матрицу. Просто в ячейках и текст может быть.
Почему не правильно?

Если цикл не правильно работает, то почему он здесь работает?
randomize;
for a_:=1 to 5 do
begin
excel.WorkBooks[1].WorkSheets[1].Cells(a_,4):=random(200);
end;

Gruvi 08.09.2012 22:25

вот справочник которым я пользуюсь не первый год
справочник функций и процедур - Delphi

kler_93 08.09.2012 22:58

Цитата:

Сообщение от Gruvi (Сообщение 790344)
вот справочник которым я пользуюсь не первый год
справочник функций и процедур - Delphi

Вот пытаюсь вставить строку между 3 и 4 строкой прога компилируется но вот при обработке ошибок выдает ошибку((
excel.WorkBooks[1].WorkSheets[1].Rows['4:4'].Select;
excel.WorkBooks[1].WorkSheets[1].Selection.Insert(Shift:=xlDown);

Gruvi 09.09.2012 00:41

какую ошибку выдаёт? скинь текст программы

kler_93 09.09.2012 00:57

Уже нет ошибки вот что получилось
excel.WorkBooks[1].WorkSheets[1].Rows[i].Select;
excel.Selection.Insert(Shift:=xlDown);
Но все равно не могу понять как цикл организовать.
Мне надо так, что бы 3 строки вставлялись после 1ой строки и потом 3 строки после 2ой(т.е. цикл после добавления первых 3ёх должен перепрыгнуть через 1 строку и т.д.)

kler_93 09.09.2012 00:58

Я уже и так делал:
n:=excel.ActiveCell.Row;
i:=2;
while i <= n do
begin
excel.WorkBooks[1].WorkSheets[1].Rows[i].Select;
excel.Selection.Insert(Shift:=xlDown);
excel.WorkBooks[1].WorkSheets[1].Rows[i].Select;
excel.Selection.Insert(Shift:=xlDown);
excel.WorkBooks[1].WorkSheets[1].Rows[i].Select;
excel.Selection.Insert(Shift:=xlDown);
int(i);
end;
и сяк но не работает

Gruvi 09.09.2012 01:11

У меня на этом компе компилятора нету,
попробуй цикл for, но задай так что бы i:= i + 1.
и выйди из цикла break (не особо это хорошо конечно, но что делать)

kler_93 09.09.2012 01:34

странно а почему такой цикл вообще не хочет работать?
n:=excel.ActiveCell.Row;
i:=2;
while i <= n do
begin
excel.WorkBooks[1].WorkSheets[1].Rows[i].Select;
excel.Selection.Insert(Shift:=xlDown);
end;


Часовой пояс GMT +4, время: 10:48.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.