Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.30;
Скачать: CL | DM;

Вниз

Передача графика TDBChart в Excel   Найти похожие ветки 

 
Igor Stepanov   (2005-05-21 14:18) [0]

Уважаемые мастера,

Я использую компонент TDBChart, помещенный на компонент Quickreport, для рисования графика. Этот график нужно передать в открытую книгу Excel. Подскажите, пожалуйста, как правильно передать график в Excel.

С уважением, Игорь Степанов


 
YurikGL ©   (2005-05-21 15:09) [1]

Я, конечно, не мастер, но можно передать данные, на основе которых формируется твой график в Excel и сделать Excel-й график. А можно попробовать передать график, как рисунок.


 
Igor Stepanov   (2005-05-21 17:24) [2]

А можно ли передать TDBChart через OLEVariant?

Игорь Степанов


 
YurikGL ©   (2005-05-21 17:26) [3]


> А можно ли передать TDBChart через OLEVariant?

Нет. Насколько я знаю. Это ж разные объекты и Excel вряд ли поддерживает борландовский TDBChart


 
Igor Stepanov   (2005-05-22 17:34) [4]

Я нашел способ передачи в буфер обмена с помощью метода
QRDBChart.CopyToClipboardMetafile.

Работает хорошо и вручную прекрасно можно вставить в Word или Excel как графический объект. ОДнако я не могу вставить этот графический объект из буфера в Excel, используя метод Paste.

Подскажите, пожалуйста, как правильно использовать метод Paste.

С уважением, Игорь Степанов


 
YurikGL ©   (2005-05-22 17:42) [5]

Попробуй App.ActiveSheet.paste;
Если не получится - создай макрос "как вставляешь" и посмотри как он выглядит.


 
КиТаЯц ©   (2005-05-31 15:48) [6]

Самого этот вопрос интересовал... В какой-то ветке запостил, да все молчат...
Вот, сделал только что:

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. Хреново, что буфер используется. Коряво это как-то... Может кто подскажет как без клипборда?


 
Igor Stepanov   (2005-06-05 09:56) [7]

Уважаемые мастера,

Большое спасибо за помощь и советы. Мои проблемы с Paste оказались простыми. Дело в том, что я использовал зачем-то метод
Clipboard.Open перед передачей метафайла в буфер обмена.   После его вызова буфер обмена как-то блокировался и передача не происходила, в результате чего буфер оказывался пуст. К сожалению, метод Paste не проверяет буфер на наличие содержимого, а просто выдает ошибку. Как только я этот метод Clipboard.Open убрал, все заработало, и на моих глазах рисунок появился на листе открытой книги в Excel. Значит, надо перед вызовом метода Paste, обязательно проверять буфер на наличие содержимого.

Таким образом, проблема закрыта. Благодарю всех за помощь.

С уважением и наилучшими пожеланиями,
Игорь Степанов



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

Текущий архив: 2006.04.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
4-1139395573
rOOse
2006-02-08 13:46
2006.04.30
PopUp Menu


3-1141625863
alk
2006-03-06 09:17
2006.04.30
Delphi+SQL. Как добавить запрос к уже выполненому запросу


4-1139327559
abakh
2006-02-07 18:52
2006.04.30
OleContainer


15-1144528698
Pat
2006-04-09 00:38
2006.04.30
Написание игры


2-1144680738
ctudent
2006-04-10 18:52
2006.04.30
Ошибка FFFFFFFFFF