PDA

View Full Version : آموزش: نحوه تبدیل و ذخیره فایل اکسل به صورت pdf



eb_1345
شنبه 29 اردیبهشت 1403, 17:42 عصر
با سلام خدمت دوستان عزیز !
در تاپیکی که با عنوان خطا در اتصال اکسس به اکسل (https://barnamenevis.org/showthread.php?581474-%D8%AE%D8%B7%D8%A7-%D8%AF%D8%B1-%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A7%DA%A9%D8%B3%D8%B3-%D8%A8%D9%87-%D8%A7%DA%A9%D8%B3%D9%84) توسط یکی از دوستان گرامی ایجاد شده در ارتباط با موضوع ذخیره فایل اکسل به صورت pdf بحث و نمونه فایل هائی ضمیمه گردیده که بنا به پیشنهاد دوست و استاد گرامی جناب mazoolagh عزیز مبنی بر ایجاد یک تاپیک مستقل بلحاظ سودمند بودن موضوع و همچنین ارتباط موضوع با عنوان تاپیک جهت جستجوی بهتر و راحتتر این تاپیک ایجاد گردید .
بنابراین دوستان گرامی هرگونه سوالی جدیدی که در زمینه تبدیل و ذخیره فایل اکسل به صورت pdf دارند میتوانند آن را در اینجا مطرح نمایند تا ان شاءااله در ارتباط با آن بحث و تبادل نظر شود .
در پناه حق

simorgh2000
شنبه 29 اردیبهشت 1403, 20:18 عصر
:تشویق::تشویق::تشویق:

mazoolagh
یک شنبه 30 اردیبهشت 1403, 20:47 عصر
با اجازه آقای بهرامی

همون کد آخر تاپیک اشاره شده رو که شما زحمتش رو کشیدین،
با حذف workbook و به صورت early binding پیوست میکنم :

Dim xlApp As New Excel.Application
Dim ExcelPath As String

ExcelPath = Application.CurrentProject.Path + "\x.xlsx"

With xlApp
.Application.Visible = False
.Workbooks.Open (ExcelPath)
.Sheets(Array("A", "B", "C")).Select
.ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
FileName:=Replace(xlApp, ".xlsx", ".pdf"), _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=True, _
OpenAfterPublish:=True
.Application.Quit
End With
Set xlApp = Nothing

mazoolagh
یک شنبه 30 اردیبهشت 1403, 20:56 عصر
کد اصلی آقای بهرامی رو هم (که late binding هست) همینجا پیوست میکنم تا نیازی به مراجعه به تاپیک دیگه ای نباشه،
و تفاوت دو روش مشخص باشه (برای کسانی که ممکنه براشون سئوال پیش بیاد):

Dim ExcelPath As String
Dim xlAppFTP As Object, xlWb As Object
Set xlAppFTP = CreateObject("Excel.Application")
ExcelPath = Application.CurrentProject.Path + "\x.xlsx"
Set xlWb = xlAppFTP.Workbooks.Open(ExcelPath)
xlAppFTP.Application.Visible = True
xlAppFTP.Sheets(Array("A", "B", "C")).Select
xlAppFTP.ActiveSheet.ExportAsFixedFormat _
Type:=0, FileName:=MyFullName, _
Quality:=1, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=True, _
OpenAfterPublish:=True
xlAppFTP.Application.Quit
Set xlAppFTP = Nothing
Set xlWb = Nothing

mazoolagh
یک شنبه 30 اردیبهشت 1403, 20:59 عصر
رفرنس:

Workbook.ExportAsFixedFormat method (Excel) (https://learn.microsoft.com/en-us/office/vba/api/Excel.Workbook.ExportAsFixedFormat)

moustafa
دوشنبه 31 اردیبهشت 1403, 00:15 صبح
فایل پی ی اف با تاریخ و زمان در کنار فایل اصلی ذخیره بشه ،چندین کاربرگ بطور تجمیعی فقط در یک پی دی اف ذخیره بشه ، چند کاربرگ مختص ورود اطلاعات ،چند کاربرگ مختص محاسبات و لینک داده ها بین کاربرگهای ورود اطلاعات و گزارشات لینک بشه و یه ارور احتمالی دیگه که اگه فایل اکسل مورد نظر به هر نحو از انحا باز بشه برنامه با مشکل پیغام readonly و save مواجهه میشه که باید بهش جواب بده در حالی که نمی خوایم فایل اکسل رو کاربر ببینه برا همین اول بررسی می کنیم و می بندیمش
تابع بررسی باز بودن یک فایل اکسل

Function IsWorkBookOpen(fileName As String)
Dim ff As Long, ErrNo As Long

On Error Resume Next
ff = FreeFile()
Open fileName For Input Lock Read As #ff
Close ff
ErrNo = err
On Error GoTo 0

Select Case ErrNo
Case 0: IsWorkBookOpen = False
Case 70: IsWorkBookOpen = True
Case Else: Error ErrNo
End Select
End Function



اینم نمونه کاملش با ذخیره فایل اکسل جدید در مسیر پروژه

Private Sub Btnamadesazi_Click()
On Error GoTo lab1

Dim Ret, Ret1
Dim xlapp As New Excel.Application
Ret = IsWorkBookOpen("F:\Access\SandHazine\gharardad1.xlsx")

Ret1 = IsWorkBookOpen("F:\Access\SandHazine\khazane.xlsx")

If Ret = True Then
xlapp.Application.Quit

End If

If Ret1 = True Then
xlapp.Application.Quit

End If


DoCmd.OpenForm "frmpdf"

Set wrk = xlapp.Workbooks.Open("F:\Access\SandHazine\gharardad1.xlsx")
Set sheetall = wrk.Sheets(Array("dp", "sh", "tk", "ha", "xv"))
xlapp.Application.Visible = True


X = Shamsi() & "-" & Hour(Now()) & "-" & Minute(Now()) & "-" & Second(Now())
namxl = "Jameh#" & X & "#" & ".xlsx"
nampdf = "F:\Access\SandHazine\Jameh " & X & ".pdf"


wrk.Sheets(Array("dp", "sh", "tk", "ha", "xv")).Select


wrk.ExportAsFixedFormat _
Type:=xlTypePDF, _
fileName:=nampdf, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
From:=1, _
To:=25, _
OpenAfterPublish:=False



Forms!frmpdf!WebBrowserpdf.Navigate (nampdf)
wrk.SaveAs CurrentProject.Path & "\Backup\" & namxl
wrk.Save
wrk.Close False
xlapp.Workbooks.Close
xlapp.Application.Quit
Set wrk = Nothing
Set xlapp = Nothing
Exit Sub
lab1:

MsgBox "ÇÔ˜Çá ÏÑ ÓÇÎÊ ÒÇÑÔ áØÝÇ ãÌÏÏÇ ÊáÇÔ äãÇÆíÏ", , "ÎØÇ"
Dim Ret2, Rte3

Ret2 = IsWorkBookOpen("F:\Access\SandHazine\gharardad1.xlsx")
Ret3 = IsWorkBookOpen("F:\Access\SandHazine\khazane.xlsx")
If Ret2 = True Then



xlapp.Application.Quit
MsgBox "khazane.xlsx closed"
End If


If Ret3 = True Then


xlapp.Application.Quit


End If
DoCmd.Close acForm, "frmpdf"
Exit Sub


End Sub

moustafa
دوشنبه 31 اردیبهشت 1403, 00:29 صبح
قبلش باید فایلهای باز بسته بشه آخرش هم اگه به نحوی دچار خطا بشه که پی دی اف نسازه فایل اکسل باز شده باید بسته بشه که دچار خرابکاری و اشغال حافظه نشه . نوشتن کدهای تمیز با رعایت تو رفتگی ،گذاشتن کامنت برای مراجعات بعدی یا شناخت مسیر یا علت ،خالی کردن متغیرها برای جلوگیری از اشغال حافظه ،گذاشتن انیمیشن و ..تا زمان ساخت پی دی اف پیشنهاد میشه

moustafa
دوشنبه 31 اردیبهشت 1403, 00:39 صبح
از اونجائیکه ممکن فایل اکسل در مسیرهای مختلف کپی بشه من از یک مسیر ثابت استفاده کردم که فایل اکسل موجود در اون در صورت ویرایش و دادن اطلاعات مورد بازخوانی قرار بگیره

moustafa
دوشنبه 31 اردیبهشت 1403, 00:58 صبح
اگه کاربرگی مخفی باشه از اون گزارش ساخته نمیشه بنابراین قبلش باید ظاهر بشه

wrk.Sheets("dp").visible=ture