[오토잇] xls,xlsx 파일을 pdf로 변환하는 프로그램
오토잇 프로그램을 활용해서 pdf로 변환하는 프로 그램 입니다.
혹시 착각 하시는 분들이 있어서 그런데 엑셀은 페이지 개념이 없는 프로그램 입니다.
표계산 프로그램 이기 때문에 그렇습니다. 기본적으로 인쇄는 되지만 워드프로세스가 아니라 잘 맞춰서 인쇄를 해야 되는 방식입니다.
그렇기 때문에 PDF 변환을 했을때 여러페이지가 나온다면 잘못 변환이 된것이 아니라 인쇄영역 설정 같은 것을 보셔야 하기 때문에 몇 글자 적었습니다.
pdf는 csv, txt 내보내기 형태와는 좀 다르게 처리 하는데 소스는 아래와 같습니다.
엑셀에 전달해 주는 경로는 반드시 절대경로여야 합니다.
컴파일 해서 파라미터 넣어서 사용하면 됩니다.
#cs
# ------------------------------------------------------------------------
XLS to PDF
@author :
@date :
# ------------------------------------------------------------------------
#ce
#Include <File.au3>
#Include <Array.au3>
#Include <String.au3>
#include <WindowsConstants.au3>
; 엑셀에 입력 되는 파일의 경로는 절대경로 여야 한다.
$srcFile = ''
$dstFile = ''
$MODE = 'pdf'
; 인자 입력 및 유효 파일 체크
If $CmdLine[0] >= 1 Then $srcFile = $CmdLine[1]
If $CmdLine[0] >= 2 Then $dstFile = $CmdLine[2]
If $CmdLine[0] >= 3 Then $MODE = $CmdLine[3]
; srcFile Path가 상대라면 절대경로로
If $srcFile <> '' And Not StringRegExp($srcFile, '^[\\/]|^[A-Za-z]:(\\|/)', 0) Then
$srcFile = @ScriptDir & "\" & $srcFile
EndIf
; dstFile Path가 상대라면 절대경로로
If $dstFile <> '' And Not StringRegExp($dstFile, '^[\\/]|^[A-Za-z]:(\\|/)', 0) Then
$dstFile = @ScriptDir & "\" & $dstFile
EndIf
; 파일 존재하지 않으면 기본값 사용
If $MODE == '' Then
$MODE = 'pdf'
EndIf
If $srcFile == '' OR Not FileExists($srcFile) Then
$srcFile = @ScriptDir & "\" & "1.xlsx"
$dstFile = @ScriptDir & "\" & "1.pdf"
EndIf
ConsoleWrite('srcFile: ' & $srcFile & @CRLF)
ConsoleWrite('dstFile: ' & $dstFile & @CRLF)
ConsoleWrite('MODE: ' & $MODE & @CRLF)
;
$objName = "Excel.Application"
; 우선 ObjGet 시도 (실행중인 엑셀 인스턴스 붙기)
$oXlsApp = ObjGet("", $objName)
; 만약 실패시, ObjCreate로 새 인스턴스를 만든다 (엑셀이 실행중이 아니거나 인식 못할 때)
If Not IsObj($oXlsApp) Then
$oXlsApp = ObjCreate($objName)
EndIf
; 그래도 실패라면 Excel 직접 경로로 시도 (일반 경로가 아닐때, 레지스트리 엑셀 경로 이용 등)
If Not IsObj($oXlsApp) Then
; 엑셀 경로가 일반적이지 않거나 여러 버전이 있을 경우 직접 실행 시도
Local $aPaths[2] = [ _
@ProgramFilesDir & "\Microsoft Office\root\Office16\EXCEL.EXE", _
@ProgramFilesDir & "\Microsoft Office\Office16\EXCEL.EXE" _
]
For $i = 0 To UBound($aPaths)-1
If FileExists($aPaths[$i]) Then
Run('"' & $aPaths[$i] & '"')
Sleep(1000)
$oXlsApp = ObjGet("", $objName)
If IsObj($oXlsApp) Then ExitLoop
EndIf
Next
EndIf
If IsObj($oXlsApp) Then
$oXlsApp.Visible = False ; PDF 출력에는 굳이 보이지 않아도 됨
$oXlsPrst = $oXlsApp.WorkBooks
$oXlsOpen = $oXlsPrst.Open($srcFile, False, False)
If ($MODE == 'pdf') Then
Global Const $xlTypePDF = 0 ; PDF로 내보낼 때 필요한 상수
; PDF로 저장 전에 출력 파일이 이미 존재하면 삭제(경로 충돌 방지)
If FileExists($dstFile) Then FileDelete($dstFile)
; PDF 저장 시 PrintArea가 안 잡혀 있으면 공백 PDF만 저장되는 경우 있음, 강제로 first sheet select
$oSheet = $oXlsOpen.Sheets(1)
$oSheet.Select
; ExportAsFixedFormat의 첫 파라미터는 타입, 두 번째는 파일 경로
; 경로가 제대로 전달되는지 로그로 출력해 볼 것
ConsoleWrite("ExportAsFixedFormat to: " & $dstFile & @CRLF)
$oSheet.ExportAsFixedFormat($xlTypePDF, $dstFile)
; 파일이 저장됐는지 확인
If FileExists($dstFile) Then
ConsoleWrite("PDF 저장 성공: " & $dstFile & @CRLF)
Else
ConsoleWrite("PDF 저장 실패!" & @CRLF)
EndIf
EndIf
$oXlsOpen.Close(False)
$oXlsApp.Quit
Else
ConsoleWrite('Not object' & @CRLF)
Exit
EndIf
위 프로그램은 설치된 엑셀 프로그램을 이용하는 방식으로 반드시 엑셀 프로그램이 설치된 경우만 작동 합니다.
한셀이 아니라 MS의 Excel 프로그램이 설치 되어 있어야 합니다.
● 엑셀 포맷에 대한 상수
Constants enumeration (Excel) | Microsoft Learn
● CSV, TXT 파일로 저장 하는법
- [오토잇] 엑셀파일(xlsx,xls)을 txt,csv 변환 저장하는 프로그램
- pdf 파일을 png, jpg로 변환하는 방법 > autoit
