Merhaba Arkadaşlar;
Windows tarafında çalışan programda arka planda excel açılıyor ve veri yazıp aynı dosyanın üzerine kaydediliyor.
Yapmak istediğim ise; ilgili excel dosyasını Excel'in özelliğini kullanarak PDF olarak kaydetmek.
Aşağıdaki kod parçası ile bunu yapmaya çalıştığımda
'method exportasfixedformat not supported by automation object' bu yöntemin desteklenmediği
hatasını alıyorum. Biraz araştırdığımda
bu linkteki çözüm ile yapılabileceği anlatılıyor bilgisayarda herhangi bir ayar yapmadan bu işlem yapmak istiyorum. Bu konuda daha önce Excelden PDF kaydeden var mı acaba.
Kod:
Excel.ExportAsFixedFormat(0, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
Teşekkürler.
merhaba, delphi hangi versiyonu kullanıyorsun ?
Merhaba,
Vermiş olduğunuz linkte Windows/Microsoft Office DCOM olayları anlatılıyor. PDF konusunda bir açıklama göremedim.
Fakat asıl amacınız, Excel belgesinin PDF dosyası gibi değiştirilememesi ise Excel'i korumaya alabilirsiniz.
Örneğin;
ExcelApp.ActiveSheet.Protect(Password:='şifrem', DrawingObjects:=True, Contents:=True, Scenarios:=True);
Excel Koruma Görünümü hakkında daha detaylı bilgiyi
MSDN'den alabilirsiniz.
Ben bir çok uygulamamda PDF export için FastReport, Devexpress gibi harici bileşenler kullanıyorum.
Birincisi;
burada yazdığına göre ExportAsFixedFormat komutu Office 2007 ile birlikte gelmiş.
İkincisi; yine aynı sayfaya göre fonksiyonun ilk parametresi type(xlTypePDF yada xlTypeXPS), ikincisi
dosya ismi olmalı.
Üçüncüsü; bu komut Excel'in bir
Sheet'ine uygulanmalı. Sanırım siz direk Excel
Ole Object'ine uyguluyorsunuz.
Şöyle birşey yapmalısınız:
ObjExcel := CreateOleObject('Excel.Application');
ObjWorkbook := ObjExcel.Workbooks.Open(Excel_Dosya_Ismi);
ObjSheet := ObjWorkbook.ActiveSheet;
ObjSheet.ExportAsFixedFormat(xlTypePDF, PDF_Dosya_Ismi,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam,
EmptyParam
);
Bu tarz durumlarda benim yaptığım şey yeni bir macro kaydı başlatmak ardından yapacağım işlemi yapmak sonra macro'yu durdurmak ve koduna bakmak. İstediğiniz işi Excel'e macro ile yaptırınca aşağıdaki gibi bir kod verdi bana:
Sub Macro1()
'
' Macro1 Macro
'
'
ChDir "C:\Users\ProjectX\Desktop"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Users\ProjectX\Desktop\Book1.pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End Sub
Selam, bende Office 2007 var ve işlemi yapmak istediğimde parametre hatası veriyor, fakat şurayı
https://msdn.microsoft.com/en-us/library...98122.aspx okuyunca pdf eklentisi kurulu olmalı diye görüyorum biraz daha araştırınca şu linkte
https://www.microsoft.com/tr-tr/download....aspx?id=7 eklentiyi buldum fakat indirip deneyemiyorum. Sizde de öyle bir sorun olabilir belki. Ayrıca sizin yazdığınız şekilde değil de @
SimaWB nin yazdığı şekilde kullanmanız gereklidir. Ama sizin yazdığınıza ve benim net deki araştırmalarıma göre bu metod dışarıdan harici bir program ile desteklenmiyor gibi görünüyor.
Merhaba Arkadaşlar cevaplarınız için çok teşekkür ederim.
@SimaWB Yazdığınız kod satırlarını yazmıştım ben sadece PDF açarken ki kodları yazdım. (Sizin yazdığınızla da aynı hatayı alıyorum.)
Tuğrul bey sizin yazdığınız şekildede aynı hatayı alıyorum.
@esistem sizinde belirttiğiniz gibi sanırım office 2007 den çıkmış bendeki 2016 olduğundan sorun olabilir.
Normalde Excel'in farklı kaydet özelliğinde PDF kaydetme olduğundan
Excel.SaveAs('c:\1.pdf'); yapıyorum bunda da aynı hatayı veriyor.
Başka bir çözüm var mı acaba bildiğiniz.
GetActiveOleObject & CreateOleObject metodlarını mı kullanıyorsunuz Excel OLE nesnesini elde etmek için ?