Форум: "Основная";
Текущий архив: 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.008 c