필자는 openpyxl, os 및 tkinter를 사용하는 프로그램을 사용하여 파일 디렉토리를 선택한 다음 해당 디렉토리의 Excel 파일에서 특정 셀의 데이터를 추출 할 수 있습니다. 있는 그대로, 파이썬 파일이 데이터가 추출되는 파일과 같은 폴더에있는 경우에만 실행됩니다.python 2.7 - 엑셀 워크 북에서 데이터를 추출하는 프로그램 - 왜 파일과 같은 폴더에 저장해야합니까?
프로그램 파일을 해당 폴더 외부에 저장할 수 있도록 만들고 싶지만 내 코드를 기반으로 해당 폴더 내에 있어야하는 이유를 알 수 없습니다. 누군가가 코드에서 이것이 필요하게 만드는 장소를 가리킬 수 있습니까?
는#!/usr/bin/env python
import os
import openpyxl
import Tkinter as tk
from Tkinter import *
import tkFileDialog, tkMessageBox, ttk
def file_open():
file_path = tkFileDialog.askdirectory()
if file_path == "":
tkMessageBox.showinfo("Error", "No Folder Selected")
else:
ALL_SHEETS = [f for f in os.listdir(file_path)
if os.path.isfile(os.path.join(file_path, f))
and f.endswith('.xlsx')]
HEAD = 1
ROW = 2
START = 1
END = 11
OUTFILE = 'empty_book.xlsx'
def get_row(sht, start, end, row):
row_data = []
for col in range(start, end):
d = sht.cell(row=row, column=col)
row_data.append(d.value)
return row_data
def get_all(files):
data_rows = []
for f in files:
wb = openpyxl.load_workbook(filename=f, data_only=True)
sheet = wb.get_sheet_by_name('Data')
row = get_row(sheet, START, END, ROW)
data_rows.append(row)
return data_rows
def get_headings(sheets):
first = sheets[1]
wb = openpyxl.load_workbook(filename=first)
sheet = wb.get_sheet_by_name('Data')
row = get_row(sheet, START, END, HEAD)
return row
def write_new(header, data, f):
wb = openpyxl.Workbook()
ws1 = wb.active
ws1.title = 'Data'
ws1.append(header)
for row in data:
ws1.append(row)
wb.save(filename=f)
def together():
sheets = sorted(ALL_SHEETS)
header = get_headings(sheets)
data = get_all(sheets)
write_new(header, data, OUTFILE)
together()
tkMessageBox.showinfo("Great Job!", "Data Extraction Successful!")
class NSC(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.parent = parent
self.parent.title("Degree Planner Data Extractor")
l1 = tk.Label(text="Degree Planner Data Extractor", font=('Segui',
20))
l1.place(x = 35, y = 20)
nscButton = tk.Button(text=' Extract data from degree planners ',
command=file_open)
nscButton.place(x= 80, y=100)
quitButton = tk.Button(text=" Quit ", command=self.quit)
quitButton.place(x=155, y=155)
def main():
root = Tk()
w = 400
h = 250
ws = root.winfo_screenwidth() # width of the screen
hs = root.winfo_screenheight() # height of the screen
x = (ws/2) - (w/2)
y = (hs/2) - (h/2)
root.geometry('%dx%d+%d+%d' % (w, h, x, y))
root.resizable(0,0)
app = NSC(root)
root.mainloop()
if __name__ == '__main__':
main()
많은 코드가 있습니다. 당신은 그것을 예로서 상당히 축소시킬 수 있습니다. – tdelaney
예, 당신 말이 옳습니다, 그리고 사과드립니다. 나는 코드에서 문제가 발생한 곳을 정확히 알지 못했기 때문에 모든 경우를 포함하기를 원했습니다 ... – jerinbrown