Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 08.09.2012, 21:12   #1 (permalink)
kler_93
Member
 
Регистрация: 08.09.2012
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию 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 про массивы ничего(((
kler_93 вне форума   Ответить с цитированием

Старый 08.09.2012, 21:12
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Ваш вопрос похож на содержание данных обсуждений

Excel, Pdf, Doc + Php
Цикл с параметром for
Цикл с условием, Паскаль
Цикл с условием, Паскаль

Старый 08.09.2012, 21:29   #2 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

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

попробуй разбей все на отдельные процедуры и функции. и действуй от этого уже.
Gruvi вне форума   Ответить с цитированием
Старый 08.09.2012, 21:36   #3 (permalink)
kler_93
Member
 
Регистрация: 08.09.2012
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

Если цикл не правильно работает, то почему он здесь работает?
randomize;
for a_:=1 to 5 do
begin
excel.WorkBooks[1].WorkSheets[1].Cells(a_,4):=random(200);
end;
kler_93 вне форума   Ответить с цитированием
Старый 08.09.2012, 22:25   #4 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

вот справочник которым я пользуюсь не первый год
справочник функций и процедур - Delphi
Gruvi вне форума   Ответить с цитированием
Старый 08.09.2012, 22:58   #5 (permalink)
kler_93
Member
 
Регистрация: 08.09.2012
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Gruvi Посмотреть сообщение
вот справочник которым я пользуюсь не первый год
справочник функций и процедур - Delphi
Вот пытаюсь вставить строку между 3 и 4 строкой прога компилируется но вот при обработке ошибок выдает ошибку((
excel.WorkBooks[1].WorkSheets[1].Rows['4:4'].Select;
excel.WorkBooks[1].WorkSheets[1].Selection.Insert(Shift:=xlDown);
kler_93 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 09.09.2012, 00:41   #6 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

какую ошибку выдаёт? скинь текст программы
Gruvi вне форума   Ответить с цитированием
Старый 09.09.2012, 00:57   #7 (permalink)
kler_93
Member
 
Регистрация: 08.09.2012
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Уже нет ошибки вот что получилось
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   #8 (permalink)
kler_93
Member
 
Регистрация: 08.09.2012
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Я уже и так делал:
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;
и сяк но не работает
kler_93 вне форума   Ответить с цитированием
Старый 09.09.2012, 01:11   #9 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

У меня на этом компе компилятора нету,
попробуй цикл for, но задай так что бы i:= i + 1.
и выйди из цикла break (не особо это хорошо конечно, но что делать)
Gruvi вне форума   Ответить с цитированием
Старый 09.09.2012, 01:34   #10 (permalink)
kler_93
Member
 
Регистрация: 08.09.2012
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

странно а почему такой цикл вообще не хочет работать?
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;
kler_93 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.