| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > excel в delphi цикл по строкам |
| Автор: 123456789igor 8.9.2012, 18:47 |
| Начал изучать редактирование excel книг через delphi по началу было все понятно, пока не столкнулся с одним примером: Вот картинки что есть и что надо получить: до ![]() после ![]() Задание: 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 про массивы ничего((( |
| Автор: 123456789igor 9.9.2012, 17:47 | ||
В общем добрался до следующего:
проблема с рандомом я хочу заполнить ячейки 8,14 и 9,14 случайным числом которое получ след образом: число b_+(или "-")0-10% от этого же числа но не знаю как осуществить + или - чтобы тоже рандомно выбирало знак |
| Автор: 123456789igor 10.9.2012, 21:39 |
| В общем я сам во всем разобрался и задача практически выполнена осталась она проблема: допустим у меня есть 7 ячеек(В них может быть число отличное от нуля либо ничего) по вертикали мне нужно сделать такое условие Если А[i] пустая то переходим к следующей ячейке иначе копируем значение в стоящие следом 3 ячейки было: стало: А1 17,33 А1 17,33 А2 А2 17,33 А3 А3 17,33 А4 А4 17,33 А5 13,23 А5 13,23 А6 А6 13,23 А7 А7 13,23 А8 А8 13,23 А9 А9 А10 А10 А[n] A[n] A[n+1] A[n+1] |
| Автор: 123456789igor 10.9.2012, 23:43 |
| FormulaR1C1 это что такое как тут указывать собственно саму формулу? я только такое видел:Formula я делал так но ничего не работает: if Excel.WorkBooks[1].WorkSheets[1].Range['P16']=' ' then Excel.WorkBooks[1].WorkSheets[1].Range['P16'].Formula:='=Q16+N17'; И почему когда Range нельзя указывать так Range[16,16] или так Range['16,16'] а только так Range['P16']? |
| Автор: 123456789igor 11.9.2012, 01:44 |
| почему не работает данная запись? if Excel.cells[a_,16] <> '' then |
| Автор: kami 11.9.2012, 07:39 | ||||
Один из форматов записи формул. К примеру: в этом формате формула "сложить значение ячейки 3 строки 4 столбца с ячейкой 5 строки 2 столбца" будет выглядеть так: "=R3C4+R5C2" - то есть Rномер_строкиCномер_столбца. Нумерация начинается с 1!!! Имхо, гораздо удобнее всяких там "B52". Мое предложение по сокращению записи и более удобному оперированию вы проигнорировали. Ну да ваше право, хотите чтобы от обилия пустого кода глаза разбегались и приложение нещадно тормозило, делайте как делаете. По факту: Range['P16'].Text = ''
Почему нельзя? Вроде, можно (пишу по памяти):
Добавлено через 5 минут и 14 секунд В дополнение: Когда указываете Cell[...].Formula:='....';, то приходится искать английские аналоги используемых функций. Можно написать Cell[...].FormulaLocal:='=СУММ(A1:B5)'; |
| Автор: 123456789igor 11.9.2012, 20:39 | ||||
| Все всем спасибо программа написана. Остался последний вопрос как сделать так, что бы пользователь сам мог выбрать файл с которым работает программа? Ну знаю что нужно вставить OpenDialog затем кнопку "открыть" затем при нажатии на кнопку открывался файл, как-то так:
Но я не пойму как это осуществить для моей задачи вот мой код:
|
| Автор: kami 11.9.2012, 21:41 | ||
Потенциальный глюк, который обязательно проявится. Стоит только пользователю переключиться на другую книгу во время работы программы. А если осталось то еще раньше - запустить программу, когда открыт какой-нибудь файл Excel. Обход этого - в коде выше. |