|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
08.09.2012, 21:12 | #1 (permalink) |
Member
Регистрация: 08.09.2012
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
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 про массивы ничего((( |
08.09.2012, 21:12 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Ваш вопрос похож на содержание данных обсуждений Excel, Pdf, Doc + Php Цикл с параметром for Цикл с условием, Паскаль Цикл с условием, Паскаль |
08.09.2012, 21:29 | #2 (permalink) |
VIP user
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
|
Ну во
1. если конечное кол-во строк в документе ты не знаешь то целесообразнее было бы использовать while. 2. ты сам ответил на свой вопрос, задай матрицу в документе по столбикам и строкам. 3. цикл объединения неправильно задан. попробуй разбей все на отдельные процедуры и функции. и действуй от этого уже. |
08.09.2012, 21:36 | #3 (permalink) |
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; |
08.09.2012, 22:25 | #4 (permalink) |
VIP user
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
|
вот справочник которым я пользуюсь не первый год
справочник функций и процедур - Delphi |
08.09.2012, 22:58 | #5 (permalink) | |
Member
Регистрация: 08.09.2012
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
excel.WorkBooks[1].WorkSheets[1].Rows['4:4'].Select; excel.WorkBooks[1].WorkSheets[1].Selection.Insert(Shift:=xlDown); |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
09.09.2012, 00:57 | #7 (permalink) |
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 строку и т.д.) |
09.09.2012, 00:58 | #8 (permalink) |
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; и сяк но не работает |
09.09.2012, 01:11 | #9 (permalink) |
VIP user
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
|
У меня на этом компе компилятора нету,
попробуй цикл for, но задай так что бы i:= i + 1. и выйди из цикла break (не особо это хорошо конечно, но что делать) |
09.09.2012, 01:34 | #10 (permalink) |
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; |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|