Konuyu Oyla:
Excel Export PDF
|
07-09-2016, Saat: 17:05
(Son Düzenleme: 07-09-2016, Saat: 17:13, Düzenleyen: TescilsizUzman.)
procedure TForm1.Button1Click(Sender: TObject); var xls, wb, ws: Variant; begin xls := CreateOleObject('Excel.Application'); wb := xls.Workbooks.Open('C:\deneme.xlsx'); ws := wb.ActiveSheet; ws.ExportAsFixedFormat(0, 'C:\deneme.pdf', 0, TRUE, FALSE, EmptyParam, EmptyParam, TRUE, // Kaydettikten sonra aç EmptyParam); wb.Close; xls.Quit; xls := unassigned; end; Bu şekilde sıkıntısız çalıştı.
Ayakkabıyı sefaletten
Çok sonraları tanıdım Öyle ufuklarda mı olurmuş Allah'ım Giyer giyer koşardım Toprağın dostluğundan Oyuncaklar yaptım çamurdan Tenimin rengini aldım topraktan Sen bakma esmerliğim sonradan...
07-09-2016, Saat: 21:09
(07-09-2016, Saat: 17:05)QuAdR Adlı Kullanıcıdan Alıntı:procedure TForm1.Button1Click(Sender: TObject); var xls, wb, ws: Variant; begin xls := CreateOleObject('Excel.Application'); wb := xls.Workbooks.Open('C:\deneme.xlsx'); ws := wb.ActiveSheet; ws.ExportAsFixedFormat(0, 'C:\deneme.pdf', 0, TRUE, FALSE, EmptyParam, EmptyParam, TRUE, // Kaydettikten sonra aç EmptyParam); wb.Close; xls.Quit; xls := unassigned; end; Cevabınız için çok teşekkür ederim bende de sorunsuz çalıştı. Benim ilk mesajda yazdığım kodla tek farkı olan ilk EmptyParam cümlesi yerine dosya yolu 'C:\Kitap1.pdf' yazınca da sorunsuz çalıştı. Kod: (Select All) Excel.ExportAsFixedFormat(0, EmptyParam, EmptyParam, EmptyParam,
08-09-2016, Saat: 09:39
(07-09-2016, Saat: 11:03)SimaWB Adlı Kullanıcıdan Alıntı: İkincisi; yine aynı sayfaya göre fonksiyonun ilk parametresi type(xlTypePDF yada xlTypeXPS), ikincisi dosya ismi olmalı.
There's no place like 127.0.0.1
08-09-2016, Saat: 18:50
Libre Office ve Delphi ile mümkün mü?
08-09-2016, Saat: 21:17
04-07-2018, Saat: 18:21
Merhaba;
Exceldeki ilgili sayfayı excel tarafında farklı kaydet/PDF yaptığımda yazdırılabilir alanları kaydediyorken, Delphi tarafında yukarıdaki kod kullanıldığında ilgili sayfada ne varsa onu kaydediyor. Exceldeki gibi sadece yazdırılabilir alan PDF olarak nasıl kaydedilebilir.
Başlığı hortlatmak buna denir...
Uzunca bir yazı olacak, umuyorum sabırla okursunuz. Zaten ihtiyacı olan okur, genel kültür bilgisi olarak görmek isteyen için çözümü peşinen yazdım... Ben de benzer bir sorunu (yazdırma alanı içerisindekiyle sınırlandırılmış EXCEL dosyasından PDF çıktı alırken, istemediğim halde dışarıdaki formülasyon alanlarını da dahil etmesi) yaşadım ve derin bir arama sonucu bulgularımı paylaşayım... Önce çözümü : XLSX dosyalarında bu sorun karşıma çıktı, ancak yine ilacı kendi içinde saklı buldum. Şöyle ki MS-EXCEL ile açıp "Farklı Kaydet" diyerek aşağıdaki görseldeki gibi "Kayıt Türü" olarak eski verisyon "Excel 97-2003 Çalışma Kitabı (*.xls)" seçince XLS uzantılı yeni oluşturulan dosyadan Delphi ile okumada sorunsuz çalışıyor. Sorunu nasıl tespit ettiğime gelince, aşağıdaki gibi bir test yapısı oluşturdum... Orta kısımda göreceğiniz şu satır sorunu anlamada kilit rol oynuyor... Kod: (Select All) InputBox('','', LExcel.ActiveSheet.PageSetup.PrintArea ); XLSX dosyada yazdırma alanı belirlenmiş olsa dahi ComObj ile Excel dosyasını okuduğunuzda PrintArea içeriği boş geliyor. Bur bir Microsoft "BUG" olmalı. Çünkü örnek olarak oluşturduğum XLSX dosya açıldığında içerikte bu alan tanımlı. Belirttiğim gibi dosyayı açıp Farklı Kaydet deyip eski Excel formatında XLS olarak kaydedip aynı çağrıyı yaparsak içi dolu geliyor. Hatta aynı örnekte alltaki kod satırının başındaki // comment tagını kaldırdığınızda şunu da göreceksiniz. * Dosyayı açtınız diyelim. İçeriği boş gelen PrintArea için elle müdahale ederek kendi yazdırma alnı adresimizi aşağıdaki şekilde tanımlarsanız, işlem RunTime tanımladığınız bu alan içerisindeki kısım kusursuz şekilde PDF çıktı veriyor. * Yani eğer statik raporlamanız varsa bunu da (yani RunTime PrintArea tanımlamayı) çözüm olarak değerlendirebilirsiniz. Kod: (Select All) // LWorkSheet.PageSetup.PrintArea := '$A$1:$C$7'; Bir üçüncü durum. Ne yaptım?! bunu RunTime tanımlayıp yeni bir XLSX dosyası olarak kaydettim. (MS-Excel 2016 format) * Anlamak istediğim ne idi ? Excel benim Delphi ile OleAutomation ( comobj ) erişimimde neyi beğenmiyor ? onu anlamak istedim. * ButtonClick procedure'ün en alttaki kısmında görüleceği üzere açılan bu yeni tip XLSX ancak içeriği boş gelen dosyayı yeni bir isimle yeni aynı yeni tip Excel formatında ANCAK kaydetme işleminden önce RunTime ile "Yazdırma Alanı" belirleyip de Delphi içerisinden kaydı gerçekleştirdim. Kod: (Select All) // LWorkBook.SaveAs( ChangeFileExt( LXLSFileName, '_.xlsx'), xlWorkbookDefault); MS-Excel ile bu Delphi yakasında oluşan yeni dosyayı açınca da "printarea" sorunsuz yer aldı. Excel sınavı geçti. Delphi ile yine bu yeni dosyayı okuyunca ne oldu ?!! Şimdi ZURNA'nın kaba ses çıkardığı yere geliyoruz.... Bu yeni oluştuduğum dosyayı Delphi ile çağırınca da olay anlaşılıyor, yabancı dil sorunu. Türkçe Excel ile İngilizce orjinal dil arasında AD ÇAKIŞMASI diye tabir ettiği Print_Area PrintArea olayı... OleAutomation'daki söylem ile Excel'in duymak istediğin örtüşmediği ortaya çıkıyor... Excel'deki Ad Yöneticisi başlığı : uses ComObj; procedure TForm1.Button1Click(Sender: TObject); const xlTypePDF = 0; xlTypeXPS = 1; xlQualityStandard = 0; xlQualityMinimum = 1; xlWorkbookDefault = 51; var LExcel, LWorkBook, LWorkSheet : OleVariant; aType, aFileName, aQuality, aIncludeDocProperties, aIgnorePrintAreas, aFrom, aTo, aOpenAfterPublish, aFixedFormatExtClassPtr : Variant; LXLSFileName, LPDFFileName : String; begin LExcel := Null; LWorkbook := Null; LXLSFileName := 'c:\ARMAN.Study\Downloads\Kitap1.xlsx'; //LXLSFileName := 'c:\ARMAN.Study\Downloads\Kitap1.xls'; LXLSFileName := 'c:\ARMAN.Study\Downloads\Kitap1_.xlsx'; LPDFFileName := 'c:\ARMAN.Study\Downloads\Kitap1.pdf'; try LExcel := CreateOleObject('Excel.Application'); except LExcel := Null; end; try If NOT VarIsNull( LExcel ) then begin LExcel.Visible := False; LExcel.DisplayAlerts := False; try LWorkBook := LExcel.Workbooks.Open( LXLSFileName ); LWorkSheet := LWorkBook.ActiveSheet; aType := xlTypePDF; aFileName := LPDFFileName; aQuality := xlQualityStandard; aIncludeDocProperties := False; aIgnorePrintAreas := False; aFrom := 1; aTo := 1; aOpenAfterPublish := True; aFixedFormatExtClassPtr := EmptyParam; // LWorkSheet.PageSetup.PrintArea := '$A$1:$C$7'; InputBox('','', LExcel.ActiveSheet.PageSetup.PrintArea ); // if LWorkSheet.PageSetup.PrintArea <> '' //then LWorkSheet.ExportAsFixedFormat( aType, aFileName, aQuality, aIncludeDocProperties, aIgnorePrintAreas, aFrom, aTo, aOpenAfterPublish, aFixedFormatExtClassPtr ); except LWorkBook := Null; end; // LWorkBook.SaveAs( ChangeFileExt( LXLSFileName, '_.xlsx'), xlWorkbookDefault); end; finally LExcel.Workbooks.Close; LExcel.DisplayAlerts := True; LExcel.Quit; LWorkBook := Unassigned; LExcel := Unassigned; end; Showmessage('OK'); end;
Saygılarımla
Muharrem ARMAN
Arkadaşlar. Komik gelecek ama bir çözüm ortaya çıktı. Bir de ActiveX getobject var ki o da bir çözüm oldu ancak ona da hiç girmeye gerek kalmadı...
Eski Hali : LWorkBook := LExcel.Workbooks.Open( LXLSFileName ); bunun yerine OpenXML derseniz hata vermediği gibi PrintArea bilgilerini de sorunsuz okuyabiliyor. Dolayısıyla da PDF çıktısı tam istediğimiz gibi yazıcı belirlenmiş alan kadar ile sınırlandırılarak, sorunsuz çıktı veriyor. Yeni Sorunsuz Hali : LWorkBook := LExcel.Workbooks.OpenXML( LXLSFileName );
Saygılarımla
Muharrem ARMAN |
« Önceki Konu | Sonraki Konu »
|
Konu ile Alakalı Benzer Konular | |||||
Konular | Yazar | Yorumlar | Okunma | Son Yorum | |
Delphi Sürekli Adı Değişen Excel Dosyasından Veri Çekme | bünyamin68 | 2 | 610 |
05-10-2023, Saat: 12:50 Son Yorum: mcuyan |
|
Excel Aktarım | OZCANK | 2 | 435 |
21-08-2023, Saat: 12:57 Son Yorum: frmman |
|
Delphi 7 Excel'e Veri Aktarma | mahone | 6 | 1.091 |
02-05-2023, Saat: 08:34 Son Yorum: COMMANDX |
|
Klasördeki Tüm Excel Dosyalarından Veri Alma | bünyamin68 | 13 | 2.787 |
09-01-2023, Saat: 09:33 Son Yorum: RAD Coder |
|
cxgrid Excel içine sayfa sayfa export Etme | Mesut | 2 | 1.004 |
08-09-2022, Saat: 15:39 Son Yorum: Mesut |
Konuyu Okuyanlar: 1 Ziyaretçi