![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача графика TDBChart в Excel [Delphi, Windows]
Igor Stepanov © (2005-05-21 14:18:00)Уважаемые мастера,
Я использую компонент TDBChart, помещенный на компонент Quickreport, для рисования графика. Этот график нужно передать в открытую книгу Excel. Подскажите, пожалуйста, как правильно передать график в Excel.
С уважением, Игорь Степанов
Igor Stepanov (2005-06-05 09:56:00) [1]Уважаемые мастера,
Большое спасибо за помощь и советы. Мои проблемы с Paste оказались простыми. Дело в том, что я использовал зачем-то метод
Clipboard.Open перед передачей метафайла в буфер обмена. После его вызова буфер обмена как-то блокировался и передача не происходила, в результате чего буфер оказывался пуст. К сожалению, метод Paste не проверяет буфер на наличие содержимого, а просто выдает ошибку. Как только я этот метод Clipboard.Open убрал, все заработало, и на моих глазах рисунок появился на листе открытой книги в Excel. Значит, надо перед вызовом метода Paste, обязательно проверять буфер на наличие содержимого.
Таким образом, проблема закрыта. Благодарю всех за помощь.
С уважением и наилучшими пожеланиями,
Игорь Степанов
КиТаЯц (2005-05-31 15:48:00) [2]Самого этот вопрос интересовал... В какой-то ветке запостил, да все молчат...
Вот, сделал только что:
var XL: Variant;
...
try
try
XL := GetActiveOleObject('Excel.Application');
except
XL := CreateOleObject('Excel.Application');
end;
except
raise Exception.Create('Ошибка Excel.Application');
end;
XL.Visible := True;
XL.Workbooks.Add;
DBChart.CopyToClipboardBitmap;
...
здесь я передаю данные из DataSet...
...
XL.Range[XL.Cells[RecCount, 1], XL.Cells[RecCount, 1]].Select; //RecCount - количество переданных записей
XL.ActiveSheet.PasteSpecial (Link:=False, DisplayAsIcon:= False);
...
Проверено на OfficeXP. Хреново, что буфер используется. Коряво это как-то... Может кто подскажет как без клипборда?
YurikGL (2005-05-22 17:42:00) [3]Попробуй App.ActiveSheet.paste;
Если не получится - создай макрос "как вставляешь" и посмотри как он выглядит.
Igor Stepanov (2005-05-22 17:34:00) [4]Я нашел способ передачи в буфер обмена с помощью метода
QRDBChart.CopyToClipboardMetafile.
Работает хорошо и вручную прекрасно можно вставить в Word или Excel как графический объект. ОДнако я не могу вставить этот графический объект из буфера в Excel, используя метод Paste.
Подскажите, пожалуйста, как правильно использовать метод Paste.
С уважением, Игорь Степанов
YurikGL (2005-05-21 17:26:00) [5]
> А можно ли передать TDBChart через OLEVariant?
Нет. Насколько я знаю. Это ж разные объекты и Excel вряд ли поддерживает борландовский TDBChart
Igor Stepanov (2005-05-21 17:24:00) [6]А можно ли передать TDBChart через OLEVariant?
Игорь Степанов
YurikGL (2005-05-21 15:09:00) [7]Я, конечно, не мастер, но можно передать данные, на основе которых формируется твой график в Excel и сделать Excel-й график. А можно попробовать передать график, как рисунок.