Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Delphi + Excel


indiegod ©   (2009-12-07 22:22:00) 

здравствуйте, уважаемые мастера Дельфи!

есть такая проблема: есть таблица в экселе, куда надо вносить данные. в зависимости от определенных параметров значение записывается в определенную ячейку. пока это реализуется довольно громоздко, что-то вроде

if a = 1 then
begin
if b = 1 then
begin
  case i of
  3: begin
       srting1:=excel.range['c3'];
       srting2:=excel.range['d3'];
       if srting1 = '' then srting1:='0';
       if srting2 = '' then srting2:='0';
       excel.range['c3']:=inttostr(strtoint(srting1)+1);
       excel.range['d3']:=inttostr(strtoint(srting2)+1);
     end;
  4: begin
       srting1:=excel.range['c4'];
       srting2:=excel.range['d4'];
       if srting1 = '' then srting1:='0';
       if srting2 = '' then srting2:='0';
       excel.range['c4']:=inttostr(strtoint(srting1)+1);
       excel.range['d4']:=inttostr(strtoint(srting2)+1);
     end;
.....


так вот возник вопрос. можно ли объявить переменную и ее значения потом подставлять в адрес ячейки?


sniknik   (2009-12-09 07:59:00) [1]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1260327565&n=18


sniknik   (2009-12-09 07:54:00) [2]

> да и не только у меня
клуб ламеров?

> как это обойти?
ошибки исправить.

> или две формы это максимум?
ага, и еще 2 операции максимум, и 2 вызова функции, и 2 переменных, 2 инициализации, 2 присвоения... просто страшно жить становится.
хорошо, что это только для тебя лично, а "мужики не знают".

можно вопрос, с чего ты это решил? объясни ход мысли, очень интересно как ты построил связь. и что было бы если бы была другая ошибка, например деление на ноль, это что будет по твоей логике? запрет на программирование?


indiegod   (2009-12-09 07:02:00) [3]

еще вопросец возник. да и не только у меня

почему-то в приложении работают с экселем только две формы
все остальные нарываются на invalid variant operation
как это обойти?
или две формы это максимум?


indiegod   (2009-12-07 23:52:00) [4]

тогда спасибо всем, кто мне помог


KilkennyCat   (2009-12-07 23:40:00) [5]

угу. так в чем вопрос тогда?


indiegod   (2009-12-07 23:37:00) [6]

там же есть вид обращения вроде excel.worksheets[n].range или что-то вроде того


KilkennyCat   (2009-12-07 23:30:00) [7]

или непонятен метод обращения ко второму листу?


KilkennyCat   (2009-12-07 23:28:00) [8]


> а как сделать то же самое, но на два?

а из моего ответа разве не видно, что подставлять можно практически что угодно, как угодно, где угодно, и общее выносить в отдельные процедуры? написали для одного листа? прекрасно. то что написали, оберните в отдельную процедуру, одним из параметров будет имя листа и вызывайте ее и для первого и для второго.


Anatoly Podgoretsky   (2009-12-07 23:25:00) [9]

> indiegod  (07.12.2009 22:46:02)  [2]

Это хороший и главное правильный ответ.


indiegod   (2009-12-07 23:20:00) [10]

если код не помог, объясню

я пишу программу подсчета статистики выполнения действий (например, бросков) в течении хоккейного матча

у меня есть две комманды по 20 игроков, представленные двумя группами по 20 кнопок

я нажимаю на кнопку с номером и ставлю плюс или минус в зависимости от результата. этот результат должен быть занесен в таблицу. причем там две таблицы на двух worksheets

я смог сделать запись в ячейку через переменную, только для одного листа. а как сделать то же самое, но на два?


KilkennyCat   (2009-12-07 23:05:00) [11]

что подробно? про объявление переменной и ее использование? это основы языка. из Вашего кода я ничего не понял. но попытаюсь...
procedure er(var a: string)
begin
if excel.range[a] = '' then  if excel.range[a] = '1';
end;

if (a = 1) and  (b = 1) then
for i = 3 to 4 step 1 do begin
 er('c' + inttostr(i));
  er('d' + inttostr(i));
end;


вот так?


indiegod   (2009-12-07 22:46:00) [12]


> KilkennyCat ©   (07.12.09 22:44) [1]
> да
>
>


это хороший ответ, но можно ли подробнее, пожалуйста?


KilkennyCat   (2009-12-07 22:44:00) [13]

да


Наверх

Титульная страница Поиск, карта сайта Написать письмо