하나의 엑셀 파일에(워크북) 엑셀 시트별로 동일한 형태의 자료가 있을 때
동일한 함수나 수식을 적용한 워크북을 시트별로 생성하고 싶을 때
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import openpyxl
import pandas as pd
import sys
from openpyxl import load_workbook
sys.path.append("C:\\pytest")
xlsxFile = 'C:\\pytest\\commoditydata.xlsx'
wb = openpyxl.load_workbook(xlsxFile)
# 시트 이름 확인하기
wb.sheetnames
# 시트 데이터 가져와서 시트별로 저장하기
for item in wb.sheetnames[:]:
df = pd.read_excel(xlsxFile, item, index_col = 'DATE', parse_dates = True)
df = df.copy().resample('W').mean()
path = r"C:\\pytest\\looptest.xlsx"
book = load_workbook(path)
writer = pd.ExcelWriter(path, engine = 'openpyxl')
writer.book = book
df.to_excel(writer, sheet_name = item)
writer.save()
writer.close()
|
cs |
여기서는 데이터 프레임 주간 평균을 간단하게 적용해 본 것 뿐.
간단한 거 같은데 막상 쓸려면 헤매는구나...
저장할 looptest.xlsx 파일은 미리 생성되어 있어야 한다.
다만 위 코드를 주간마다 반복할 경우 시트 수가 계속 생성된다는 문제점이 있다. ㄷㄷ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
import openpyxl
import pandas as pd
import sys
from openpyxl import load_workbook
sys.path.append("C:\\pytest")
xlsxFile = 'C:\\pytest\\commoditydata.xlsx'
wb = openpyxl.load_workbook(xlsxFile)
# 시트 이름 확인하기
wb.sheetnames
# 파일 없을 경우 워크북 생성해서 시트별로 저장하기
for item in wb.sheetnames[:]:
df = pd.read_excel(xlsxFile, item, index_col = 'DATE', parse_dates = True)
df = df.copy().resample('W').mean()
try:
path = r"C:\\pytest\\looptest.xlsx"
wb = load_workbook(path)
sheet = wb.active
print("기존의 파일 불러오기 완료")
except:
wb = openpyxl.Workbook()
sheet = wb.active
print("새로운 파일 생성 완료")
book = wb
writer = pd.ExcelWriter(path, engine = 'openpyxl')
writer.book = book
df.to_excel(writer, sheet_name = item)
writer.save()
writer.close()
|
cs |
따라서, try 및 except를 이용하여 새로운 워크북을 생성한 후 저장하기 위해서 위 코드를 이용.
위 코드는 파일 생성용 엑셀 파일을 미리 만들 필요가 없다.