Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];

Вниз

сообщение об ошибке invalid variant operation   Найти похожие ветки 

 
Сафаров ©   (2005-12-04 13:00) [0]

использую переменную типа вариант для работы с Экселом.
В разделе private формы:
ExcelApp:variant;
в процедуре:
ExcelApp := CreateOleObject ("Excel.Application");
ExcelApp.WorkBooks.Add;   //далее идут отобранные поля
ExcelApp.ActiveWorkBook.WorkSheets[1].Cells[1,1] := "Наименование";
// и т.д.
ExcelApp.Visible:=true;
ExcelApp := UnAssigned;
все работает.
Чуть -чуть усложняю задачу. Пытаюсь дать пользователю возможность прервать выполнение экспорта. Вставляю на форму кнопку, на событие onClick которой вставляю код:
ExcelApp.Visible:=true;
ExcelApp := UnAssigned;
Так вот на первой команде выдается сообщение "invalid variant operation". Почему это происходит? Спасибо


 
jack128 ©   (2005-12-04 13:23) [1]

Сафаров ©   (04.12.05 13:00)
Так вот на первой команде выдается сообщение "invalid variant operation". Почему это происходит? Спасибо

а ты когда на эту кнопку нажимаешь то?? Те что VarIsClear(ExcelApp) возвращает??


 
Сафаров ©   (2005-12-04 13:35) [2]

false


 
Сафаров ©   (2005-12-04 13:40) [3]

но адрес меняется с $0018c3ec на $0019a054


 
Сафаров ©   (2005-12-04 13:50) [4]

try
   ExcelApp := CreateOleObject ("Excel.Application");
except
  MessageDlg("Не могу загрузить Microsoft Excel", mtError, [mbOK], 0);
  Exit;
end;
ExcelApp.Application.EnableEvents := false; //ускоряю вывод в Эксел
ExcelApp.WorkBooks.Add;   //далее идут отобранные поля
ExcelApp.ActiveWorkBook.WorkSheets[1].Cells[1,1] := "Наименование";
qMain.Close;  //запрос к базе
qMain.Open;
m:= qMain.RecordCount;
ProgressBar1.Max:=m;
for i:=1 to m do
  begin
   ExcelApp.ActiveWorkBook.WorkSheets[1].Cells[i+1,1]:=datamodule1.qMainname.AsString;
   Application.ProcessMessages;
   ProgressBar1.Position:=i;
   Refresh;
   Datamodule1.qMain.Next
  end;
ExcelApp.ActiveWorkBook.WorkSheets[1].Cells.select; //выделяем весь лист
ExcelApp.Selection.WrapText:=True;    //включаем перенос строк в ячейках
ExcelApp.Selection.Rows.AutoFit;      //включаем автоподбор высоты строк
ExcelApp.Selection.VerticalAlignment:=1;
ExcelApp.Visible:=true;
ExcelApp := UnAssigned;


 
Сафаров ©   (2005-12-08 00:03) [5]

Нашел ошибку. Не учел, что ProcessMessages возвращает управление в точку вызова. А переменная уже unAssigned.


 
Digitman ©   (2005-12-08 09:04) [6]


> ExcelApp.Application.EnableEvents := false; //ускоряю вывод
> в Эксел


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

открываешь НД , определяешь кол-во записей, создаешь массив вариантов соотв.размерности, в цикле бежишь по НД и заполняешь массив, после этого Range(такой_то).Value := Подготовленный_заранее_массив_вариантов



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
2-1135053938
Officeman
2005-12-20 07:45
2006.01.08
Приложение для КПК


14-1134664429
NickX
2005-12-15 19:33
2006.01.08
Компилирование


14-1134385970
lookin
2005-12-12 14:12
2006.01.08
Печать фотографий


2-1134993484
skysat
2005-12-19 14:58
2006.01.08
Ошибка


14-1134396390
kaif
2005-12-12 17:06
2006.01.08
Взглянул на баннер Visual Studio :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский