![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| 123456789igor |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 27.3.2011 Репутация: нет Всего: нет |
Начал изучать редактирование 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 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 27.3.2011 Репутация: нет Всего: нет |
В общем добрался до следующего:
проблема с рандомом я хочу заполнить ячейки 8,14 и 9,14 случайным числом которое получ след образом: число b_+(или "-")0-10% от этого же числа но не знаю как осуществить + или - чтобы тоже рандомно выбирало знак |
|||
|
||||
| 123456789igor |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 27.3.2011 Репутация: нет Всего: нет |
В общем я сам во всем разобрался и задача практически выполнена осталась она проблема:
допустим у меня есть 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] |
|||
|
||||
| kami |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
как-то так:
Добавлено через 12 минут и 8 секунд Кстати, эту длинную запись
можно сделать гораздо короче по тому же принципу:
|
||||||
|
|||||||
| 123456789igor |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 27.3.2011 Репутация: нет Всего: нет |
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 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 27.3.2011 Репутация: нет Всего: нет |
почему не работает данная запись?
if Excel.cells[a_,16] <> '' then |
|||
|
||||
| kami |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Один из форматов записи формул. К примеру: в этом формате формула "сложить значение ячейки 3 строки 4 столбца с ячейкой 5 строки 2 столбца" будет выглядеть так: "=R3C4+R5C2" - то есть Rномер_строкиCномер_столбца. Нумерация начинается с 1!!! Имхо, гораздо удобнее всяких там "B52". Мое предложение по сокращению записи и более удобному оперированию вы проигнорировали. Ну да ваше право, хотите чтобы от обилия пустого кода глаза разбегались и приложение нещадно тормозило, делайте как делаете. По факту: Range['P16'].Text = ''
Почему нельзя? Вроде, можно (пишу по памяти):
Добавлено через 5 минут и 14 секунд В дополнение: Когда указываете Cell[...].Formula:='....';, то приходится искать английские аналоги используемых функций. Можно написать Cell[...].FormulaLocal:='=СУММ(A1:B5)'; |
||||
|
|||||
| 123456789igor |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 27.3.2011 Репутация: нет Всего: нет |
Все всем спасибо программа написана.
Остался последний вопрос как сделать так, что бы пользователь сам мог выбрать файл с которым работает программа? Ну знаю что нужно вставить OpenDialog затем кнопку "открыть" затем при нажатии на кнопку открывался файл, как-то так:
Но я не пойму как это осуществить для моей задачи вот мой код:
|
||||
|
|||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Потенциальный глюк, который обязательно проявится. Стоит только пользователю переключиться на другую книгу во время работы программы. А если осталось то еще раньше - запустить программу, когда открыт какой-нибудь файл Excel. Обход этого - в коде выше. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |