Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OLEVariant в процедуре 
V
    Опции темы
Burka
Дата 26.1.2009, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.5.2007

Репутация: нет
Всего: 2



По кнопке происходит вывод в эксель
Код

procedure TForm2.Button2Click(Sender: TObject);
var curDate,endDate:TDate;
    excel,book,Sheet:OleVariant;

begin
 curDate:=DateTimePicker2.Date;
 endDate:=DateTimePicker3.Date+1;

 Excel:=CreateOleObject('Excel.Application');
 Excel.Application.EnableEvents:=False;
 Excel.Visible:=False;
 Book:=Excel.WorkBooks.Add;
 Sheet:=Excel.ActiveWorkBook.Worksheets[1];
 Excel.Range[ Excel.Cells[1, 1], Excel.Cells[10, 10] ].Select;

//+--=+-=+-=+-=+-=+-=+-=+-=+-=+-=+-=
while not (DateToStr(curDate)=DateToStr(endDate)) do
 begin
  SetFilter(DM.Main,Edit1.Text,curDate);
  SG.DBtoSG(DM.Main);
  //SG.ShowSG(StringGrid1);
  SG.Calculate;
  //SG.ShowCalc(StringGrid2);
  SG.OutToExcel(Excel,0,3); //<<<------ Здесь будет моя процедура

  

  curDate:=curDate+1;
 end;
//+--=+-=+-=+-=+-=+-=+-=+-=+-=+-=
Excel.Visible:=true;
Sheet:= UnAssigned;
Book := UnAssigned;
Excel:= UnAssigned;
end;


Хочу часть вывода таблицы вынести в процедуру, написал так:
Код

Procedure TSGRid.OutToExcel(Var excel: OleVariant; StartCol,StartRow:integer);
Var i,j,Col,Row,Count:integer;
    tmp:string;
begin
col:=startCol;
row:=StartRow;
Count:=0;

 for j:=0 to 23 do
  If SGar[4,j]=NotEmpty then
   begin
    Excel.Range[Excel.Cells[Row, Col+Count],EmptyParam].Value:=IntToStr(j)+':00';
    if Sgar[0,j]<>Empty then tmp:=FloatToStr(SGar[0,j] / 10) else tmp:='*';
       Excel.Range[Excel.Cells[Row+1, Col+Count],EmptyParam].Value:=tmp;

    if Sgar[1,j]<>Empty then tmp:=FloatToStr(SGar[1,j] / 100) else tmp:='*';
       Excel.Range[Excel.Cells[Row+1, Col+Count],EmptyParam].Value:=tmp;

    if Sgar[2,j]<>Empty then tmp:=IntToStr(SGar[2,j]) else tmp:='*';
       Excel.Range[Excel.Cells[Row+1, Col+Count],EmptyParam].Value:=tmp;

    if Sgar[3,j]<>Empty then tmp:=IntToStr(SGar[3,j]) else tmp:='*';
       Excel.Range[Excel.Cells[Row+1, Col+Count],EmptyParam].Value:=tmp;
    Inc(Count);
   end;
end;


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

Это сообщение отредактировал(а) Burka - 26.1.2009, 12:15

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  error.PNG 7,85 Kb


--------------------
Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.
PM MAIL   Вверх
Данкинг
Дата 26.1.2009, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



Попробуй переменную Excel просто глобальной объявить.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Burka
Дата 26.1.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.5.2007

Репутация: нет
Всего: 2



странно..

работает
Код

Excel.Range[ Excel.Cells[1, 1], Excel.Cells[10, 10] ].Select;


не работает
Код

Excel.Range[Excel.Cells[Row, Col+Count],EmptyParam].Value:='';


работает
Код

Excel.Range['A1',EmptyParam].Value:='';

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


--------------------
Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.
PM MAIL   Вверх
Данкинг
Дата 26.1.2009, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



Цитата(Burka @  26.1.2009,  13:05 Найти цитируемый пост)
в этой строчке проблема, ошибку туже выдает. а что делать не знаю 

А, ну правильно: как ты значение диапазона получить хочешь? Надо, насколько я помню, брать значение первой его (диапазона) ячейки.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Burka
Дата 26.1.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.5.2007

Репутация: нет
Всего: 2



Цитата
А, ну правильно: как ты значение диапазона получить хочешь? Надо, насколько я помню, брать значение первой его (диапазона) ячейки.

просто =)
этот же вариант прекрасно работает, я указываю координаты одной ячейки.
Код

Excel.Range['A1',EmptyParam].Value:='';

Это тоже самое! "Excel.Cells[Row, Col+Count]" должно как раз возвратить коориданты в формате "БукваЦифра". Я так понимаю, но не пашет.
Код

Excel.Range[Excel.Cells[Row, Col+Count],EmptyParam].Value:='';


сделал так, компилируется, и работает. так и оставлю )
Код

Excel.Range[Excel.Cells[Row, Col+Count],Excel.Cells[Row, Col+Count]].Value:='';




--------------------
Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.