Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2013, 20:25   #1
elionor777
 
Регистрация: 01.10.2010
Сообщений: 8
Вопрос excel and Delphi

Доброго дня форумчане!
Делаю не большую программу которая работает с Excel. Excel подключил с помощью библиотеки ComObj.
В программе есть CheckBox(ы) после нажатия на кнопочку если чекбокс активен, то определенная информация заноситься в определенную ячейку в екселе, так вот чек боксов 66 штук с помощью какого оператора можно это реализовать? цикл? в данный момент сделал с помощью условного оператора (if then else) и получаеться я перебераю все возможные варианты активации чекбоксов (т.е. если чекбокс1 активен то в ячейку D1 заноситься инфа , если активен чекбокс2 а чекбокс1 не активен то инфа за которую отвечает чекбокс2 заноситься в ячейку D1 , если активны и чекбокс1 и чекбокс2 то в D1 заноситься инфа чекбокса1 , а инфа чекбокса2 заноситься в ячейку D2) и в таком духе все 66 чек боксов, прошу помощи! направьте меня на путь истинный так сказать)

Последний раз редактировалось elionor777; 12.07.2013 в 20:52.
elionor777 вне форума Ответить с цитированием
Старый 12.07.2013, 21:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
с помощью какого оператора можно это реализовать?
CheckListBox попробовать использовать не желаешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.07.2013, 23:04   #3
elionor777
 
Регистрация: 01.10.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
CheckListBox попробовать использовать не желаешь?
Спасибо добрый человек, с ним гораздо удобнее получается, но опять та же проблема не имею понятия как в первой ячейки екселя писалось то что принадлежит второй строке если первая не активна в чекБоксЛисте ну и так далее все 66 строк...

Последний раз редактировалось elionor777; 12.07.2013 в 23:58.
elionor777 вне форума Ответить с цитированием
Старый 13.07.2013, 01:04   #4
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

заводите счетчик(переменную) для номера активной ячейки(столбца?) экселя, в цикле по элементам чеклистбокса перебираете все элементы, если активен то делаете то что Вам надо и увеличиваете счетчик активной ячейки, т.е. например как-то так
Код:
var
  j:Integer //счетчик активного столбца
  i,n:Integer;
begin
  j:=1;
  n:=pred(CheckListBox1.Count);
  for i:=0 to n do
    begin
      if CheckListBox1.Checked[i] then
        begin
          //что-то тут делаете, вывод в Excel
          Inc(j)
        end;
    end;
end;
astecenko вне форума Ответить с цитированием
Старый 13.07.2013, 09:57   #5
elionor777
 
Регистрация: 01.10.2010
Сообщений: 8
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 Excel:=CreateOleObject('Excel.Application');
 Excel.Application.WorkBooks.Add('C:\Users\Elionor\Desktop\osnova.xls');
 d:=FormatDateTime('dd.mm.yy hh.nn.ss',Now);
 s:=StrToFloat(SpinEdit1.Text);
 s1:=StrToFloat(SpinEdit2.Text);
 s2:=StrToFloat(SpinEdit3.Text);
 s3:=StrToFloat(SpinEdit4.Text);
 s4:=StrToFloat(SpinEdit5.Text);

 j:=1;
 n:=pred(CheckListBox1.Count);
 for i:=0 to 4 do
  begin
   if CheckListBox1.Checked[i] then
    begin
 Excel.Range['D3']:=s;
 Excel.Range['D4']:=s1;
 Excel.Range['D5']:=s2;
 Excel.Range['D6']:=s3;
 Excel.Range['D7']:=s4;
 Inc(j);
    end;
  end;
Или я что то не так делаю или не получается.... Не перебирает варианты, а просто данные вписывает в ячейки стобца D (и вписывать надо начинаю с ячейки D3)

Последний раз редактировалось elionor777; 13.07.2013 в 10:01.
elionor777 вне форума Ответить с цитированием
Старый 13.07.2013, 18:48   #6
elionor777
 
Регистрация: 01.10.2010
Сообщений: 8
По умолчанию

ребят, ну подскажите плиз
elionor777 вне форума Ответить с цитированием
Старый 13.07.2013, 21:19   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var se:TSpinEdit;
begin
 Excel:=CreateOleObject('Excel.Application');
 Excel.Application.WorkBooks.Add('C:\Users\Elionor\Desktop\osnova.xls');
 d:=FormatDateTime('dd.mm.yy hh.nn.ss',Now);
 s:=StrToFloat(SpinEdit1.Text);
 s1:=StrToFloat(SpinEdit2.Text);
 s2:=StrToFloat(SpinEdit3.Text);
 s3:=StrToFloat(SpinEdit4.Text);
 s4:=StrToFloat(SpinEdit5.Text);

 j:=1;
 for i:=0 to CheckListBox1.Count do
  begin
   if CheckListBox1.Checked[i] then
    begin
     se:=TSpinEdit(FindComponent('SpinEdit'+IntToStr(i)));
     if se<>nil then
        Excel.Range['D'+IntToStr(j)]:=se.text;
     Inc(j);
    end;
  end;
Это если я правильно понял сумбур задания.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.07.2013, 22:44   #8
elionor777
 
Регистрация: 01.10.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
procedure TForm1.Button1Click(Sender: TObject);
var se:TSpinEdit;
begin
 Excel:=CreateOleObject('Excel.Application');
 Excel.Application.WorkBooks.Add('C:\Users\Elionor\Desktop\osnova.xls');
 d:=FormatDateTime('dd.mm.yy hh.nn.ss',Now);
 s:=StrToFloat(SpinEdit1.Text);
 s1:=StrToFloat(SpinEdit2.Text);
 s2:=StrToFloat(SpinEdit3.Text);
 s3:=StrToFloat(SpinEdit4.Text);
 s4:=StrToFloat(SpinEdit5.Text);

 j:=1;
 for i:=0 to CheckListBox1.Count do
  begin
   if CheckListBox1.Checked[i] then
    begin
     se:=TSpinEdit(FindComponent('SpinEdit'+IntToStr(i)));
     if se<>nil then
        Excel.Range['D'+IntToStr(j)]:=se.text;
     Inc(j);
    end;
  end;
Это если я правильно понял сумбур задания.
ошибка "List index out of bounds(5)" с помощью деббагер посмотрел: цикл проводит столько раз сколько строк в чеклистбоксе и выдает ошибку
elionor777 вне форума Ответить с цитированием
Старый 13.07.2013, 23:50   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
for i:=0 to CheckListBox1.Count-1 do
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.07.2013, 09:52   #10
elionor777
 
Регистрация: 01.10.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
for i:=0 to CheckListBox1.Count-1 do
Код:
Excel.Range['D'+IntToStr(j)]:=se.text;
он начинает сохранять в ячейку D2 дальше D3.... надо что бы начинал с D3

Код:
Excel.Range['D3'+IntToStr(j)]:=se.text;
делаю так начинает заполнять с D32 почему то...

Код:
Excel.Cells['4,3'+IntToStr(j)]:=se.text;
так вообще не заполняет

и последний активный чекбокс игнорируеться ( т.е в ексель не переносится )

Последний раз редактировалось elionor777; 14.07.2013 в 09:58.
elionor777 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
из Excel в Delphi I'm_Not_Afraid Помощь студентам 4 04.06.2011 15:14
Excel Delphi MAZADA Общие вопросы Delphi 3 07.11.2010 17:27
Delphi Excel (сохранение записи в Excel) Кас Алина Общие вопросы Delphi 4 28.05.2010 09:17
как при импорте из Excel в delphi узнать сколько заполненных строк в книге Excel?чтобы организовать цикл betirsolt БД в Delphi 1 17.01.2010 18:51
Delphi ->Excel->График по таблице->Delphi Avalonix БД в Delphi 2 30.10.2008 14:04