컴퓨터/Python

excel to pdf

풍경소리^^ 2022. 8. 28. 14:25

win32com_pdf_dataworkshop.py--------------------

#pip install pywin32

import win32com.client
import os

#Excel 프로그램 객체 생성
excel=win32com.client.Dispatch("Excel.Application")
# excel.Visible = True
# Read Excel File
current_path = os.getcwd().replace('\\','/') + '/'
# current_path = os.getcwd()+ '/'
# print(current_path)

filename = "급여1.xlsx"
FName = current_path + filename
# FName = "급여1.xlsx"
wb = excel.Workbooks.Open(FName)
# for s in wb.Sheets:
#     print(s.name)

# sheet = wb.Worksheets[1]
sh = wb.Sheets('급여명세서')
# print(sheet.name)

# 셀 값 변경/입력하기, 셀 1개 or 여러개 셀의 값 입력 가능
sh.Range("B4").value = "자기"
# # sheet.range('A1:A5').value = [1,2,3,4,5]  # 복수의 값 입력 가능
# # # sheet.range('A1').value = [['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]]  # 2차원 입력 가능

wb.Save()
# pdf 로 저장하기
current_work_dir = os.getcwd()   # 현재 작업중인 폴더에 저장하기
# 절대경로로 파일 위치 입력
pdf_path = os.path.join(current_work_dir, "pdf파일명.pdf") 

# PDF 로 저장할 시트 선택하기(본 예제에서는 첫 번째 시트 선택하기)
# report_sheet = wb.sheets[1]
# PDF 로 저장하기
sh.ExportAsFixedFormat(0, pdf_path)
# [출처] 엑셀 레포트 → PDF 저장 자동화하기(feat.파이썬)|작성자 데이터공방
wb.Close(False)
excel.Quit()

====================

xlwings_pdf_dataworkshop.py--------------------

#pip install xlwings

import xlwings as xw
import os

# 파일 불러오기
filename = "급여1.xlsx"
book = xw.Book(filename)


# Read Excel File
# current_path = os.getcwd().replace('\\','/') + '/'
# current_path = os.getcwd()+ '/'
# current_path = os.getcwd()
# print(current_path)


# FName = current_path + filename
# FName = os.path.join(current_path,filename)
# FName = "급여1.xlsx"
# wb = excel.Workbooks.Open(FName)
# for s in wb.Sheets:
#     print(s.name)

# sheet = wb.Worksheets[1]
sh = book.sheets('급여명세서')
# print(sh.name)

# 셀 값 변경/입력하기, 셀 1개 or 여러개 셀의 값 입력 가능
sh["B4"].value = "명유석"
# # sheet.range('A1:A5').value = [1,2,3,4,5]  # 복수의 값 입력 가능
# # # sheet.range('A1').value = [['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]]  # 2차원 입력 가능

# book.Save()
# pdf 로 저장하기
current_work_dir = os.getcwd()   # 현재 작업중인 폴더에 저장하기
# 절대경로로 파일 위치 입력
pdf_path = os.path.join(current_work_dir, "pdf파일명.pdf") 

# PDF 로 저장할 시트 선택하기(본 예제에서는 첫 번째 시트 선택하기)
# report_sheet = book.sheets[1]
report_sheet = sh
# PDF 로 저장하기
# report_sheet.ExportAsFixedFormat(0, pdf_path)
report_sheet.api.ExportAsFixedFormat(0, pdf_path)


# [출처] 엑셀 레포트 → PDF 저장 자동화하기(feat.파이썬)|작성자 데이터공방
# wb.Close(False)
# book.Quit()

====================

xlwings_pdf_pandas_index_match--------------------

#pip install pandas
#pip install xlrd
#pip install pywin32
#pip install openpyxl

import pandas as pd
import xlwings as xw
import os

filename = "급여1.xlsx"
name = '홍길동'

df = pd.read_excel(filename, sheet_name='4대급여')
df = df.fillna(0)
df_employee = pd.read_excel(filename, sheet_name='직원현황')

index_df_employee = df_employee.index[df_employee['성명']==name].tolist()
# print(index_df_employee[0])
jobposition = df_employee.loc[index_df_employee[0],['직위']]
# print(f[0])

# 엑셀 인스턴스 생성
app = xw.App(visible=False)
book = xw.Book(filename)
sh = book.sheets('급여명세서')
sh["B4"].value = name
sh["D4"].value = jobposition[0]

# pdf 로 저장하기
current_work_dir = os.getcwd()   # 현재 작업중인 폴더에 저장하기
# 절대경로로 파일 위치 입력
pdf_path = os.path.join(current_work_dir, "pdf파일명.pdf")

# PDF 로 저장할 시트 선택하기(본 예제에서는 첫 번째 시트 선택하기)
# report_sheet = book.sheets[1]
report_sheet = sh
# PDF 로 저장하기
# report_sheet.ExportAsFixedFormat(0, pdf_path)
report_sheet.api.ExportAsFixedFormat(0, pdf_path)
book.save()
app.kill()

====================

openpyxl_pdf_pandas_dataworkshop.py--------------------

#pip install openpyxl

import pandas as pd
import openpyxl
import os

#Excel 프로그램 객체 생성
current_path = os.getcwd()
fname = "급여1.xlsx"

df_data = pd.read_excel(fname, sheet_name='4대급여')
df_data = df_data.fillna(0)
df_employee = pd.read_excel(fname, sheet_name='직원현황')

name = '밀10'
# print(df_data)

idx_df_data = df_data.index[df_data['성명']==name].tolist()[0]
# print("4대급여 인덱스 :",idx_df_data)
normal = df_data.loc[idx_df_data,['기본급']][0]
overtime = df_data.loc[idx_df_data,['연장수당']][0]
holiday = df_data.loc[idx_df_data,['휴일수당']][0]
holidayovertime = df_data.loc[idx_df_data,['휴일연장수당']][0]
extra = df_data.loc[idx_df_data,['추가수당']][0]
meals = df_data.loc[idx_df_data,['식대']][0]
bonus = df_data.loc[idx_df_data,['상여금']][0]

normal_calculation = df_data.loc[idx_df_data,['기']][0]
overtime_calculation = df_data.loc[idx_df_data,['연']][0]
holiday_calculation = df_data.loc[idx_df_data,['휴']][0]
holidayovertime_calculation = df_data.loc[idx_df_data,['휴연']][0]
extra_calculation = df_data.loc[idx_df_data,['추']][0]

nationalpension = df_data.loc[idx_df_data,['국민연금']][0]
healthinsurance = df_data.loc[idx_df_data,['건강보험']][0]
longtermcareinsurance = df_data.loc[idx_df_data,['장기요양보험']][0]
employmentinsurance = df_data.loc[idx_df_data,['고용보험']][0]
healthsettlement = df_data.loc[idx_df_data,['정산건강']][0]
longtermcaresettlement = df_data.loc[idx_df_data,['정산장기요양']][0]
advancepayment = df_data.loc[idx_df_data,['선지급']][0]
etc = df_data.loc[idx_df_data,['기타']][0]
incometax = df_data.loc[idx_df_data,['소득세']][0]
localincometax = df_data.loc[idx_df_data,['지방소득세']][0]

idx_df_employee = df_employee.index[df_employee['성명']==name].tolist()[0]
# print("직원현황 인덱스 :",idx_df_employee)
jobposition = df_employee.loc[idx_df_employee,['직위']][0]
department = df_employee.loc[idx_df_employee,['부서']][0]
birthday = df_employee.loc[idx_df_employee,['생일']][0]

wb = openpyxl.load_workbook(fname)

sh_paystub = wb["급여명세서사대보험"]
# sh_paystub = excelfile.get_sheet_by_name('급여명세서사대보험')
sh_paystub["B4"].value = name
sh_paystub["D4"].value = jobposition
sh_paystub["B5"].value = department
sh_paystub["D5"].value = birthday

sh_paystub["B8"].value = normal
sh_paystub["B9"].value = overtime
sh_paystub["B10"].value = holiday
sh_paystub["B11"].value = holidayovertime
sh_paystub["B12"].value = extra
sh_paystub["B13"].value = meals

sh_paystub["D8"].value = nationalpension
sh_paystub["D9"].value = healthinsurance
sh_paystub["D10"].value = longtermcareinsurance
sh_paystub["D11"].value = employmentinsurance
sh_paystub["D12"].value = healthsettlement
sh_paystub["D13"].value = longtermcaresettlement
sh_paystub["D14"].value = advancepayment
sh_paystub["D15"].value = etc
sh_paystub["D16"].value = incometax
sh_paystub["D17"].value = localincometax

sh_paystub["B23"].value = normal_calculation
sh_paystub["B24"].value = overtime_calculation
sh_paystub["B25"].value = holiday_calculation
sh_paystub["B26"].value = holidayovertime_calculation
sh_paystub["B27"].value = extra_calculation

sh_paystub["D23"].value = normal
sh_paystub["D24"].value = overtime
sh_paystub["D25"].value = holiday
sh_paystub["D26"].value = holidayovertime
sh_paystub["D27"].value = extra

wb.save(fname)







# print(idx_df_employee)
# # FName = current_path + filename
# # FName = openpyxl.load_workbook(filename)
# FName = os.path.join(current_path,filename)
# # FName = "급여1.xlsx"
# wb = openpyxl.load_workbook(FName)
# # for s in wb.Sheets:
# #     print(s.name)

# # sheet = wb.Worksheets[1]
# # sh = wb.Sheets('급여명세서사대보험')
# sh = wb['급여명세서사대보험']
# # print(sh)

# # 셀 값 변경/입력하기, 셀 1개 or 여러개 셀의 값 입력 가능
# sh["B4"].value = "밀1"
# # sh.Range("B4").value = "정용만"
# # # sheet.range('A1:A5').value = [1,2,3,4,5]  # 복수의 값 입력 가능
# # # # sheet.range('A1').value = [['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]]  # 2차원 입력 가능

# wb.save('급여1.xlsx')

# # pdf 로 저장하기
# current_work_dir = os.getcwd()   # 현재 작업중인 폴더에 저장하기
# # 절대경로로 파일 위치 입력
# pdf_path = os.path.join(current_work_dir, "pdf파일명.pdf") 
# # print(pdf_path)
# # PDF 로 저장할 시트 선택하기(본 예제에서는 첫 번째 시트 선택하기)
# # report_sheet = wb.sheets[1]
# # PDF 로 저장하기
# wb["급여명세서"].ExportAsFixedFormat(0, pdf_path)
# # [출처] 엑셀 레포트 → PDF 저장 자동화하기(feat.파이썬)|작성자 데이터공방

# wb.close()
# # wb.Close(False)
# # excel.Quit()

====================