간단한 Excel 문서 병합 도구를 공유하는 python
마침 최근에 작업 로그를 작성하고 있는데 여러 개의 excel 문서를 반복해서 합쳐야 하기 때문에 일주일 넘게 고생을 했고, 보수를 위해python으로 이런 작은 것을 썼다.
1. 여러 개의 excel 문서를 통합하는 데 사용됩니다. 몇 번째 작업표인지 지정할 수 있습니다. 기본값은 마지막 작업표입니다.
2. 초라하다. 단순히 한 줄의 데이터를 한 문서에 합친 것일 뿐 형식도 병합 문서에 가져오지 않았다.
3. excel 2003의 문서 통합에만 사용할 수 있습니다.
4. 코드는 윈도우에서 Python 자체 IDEL에 쓰여있고,python 버전은 2.7.3입니다.
구체적인 코드는 다음과 같습니다.
1 ##2012-05-06 14:27
2 # -*- coding:utf-8 -*-
3 from Tkinter import *
4 import tkFileDialog
5 import tkMessageBox
6 import os
7 import xlrd
8 import xlwt
9
10 class combination(Frame):
11 """combine excel files"""
12 def __init__(self,parent=None):
13 Frame.__init__(self,parent)
14 self.sheetNo = 0
15 self.filepath = []
16 self.outpath = ""
17 self.flag_ckbtn = IntVar()
18 self.pack(side=TOP)
19 self.init_entry()
20 self.init_btn()
21
22
23 def init_entry(self):
24 """get sheet No by the Entry"""
25 eframe = Frame(self)
26 eframe.pack()
27 Label(eframe,width=9,text='Sheet No:').pack(side='left',pady=15)
28 en_sheetNo = Entry(eframe,width=3)
29 en_sheetNo.pack(side='left',pady=15)
30 en_sheetNo.bind(' ', (lambda event:self.getsheetNo(en_sheetNo.get())))
31 Label(eframe,width=9,text='1st row:').pack(side='left',pady=15)
32 ##v = IntVar()
33 Checkbutton(eframe,onvalue=0,offvalue=1,variable=self.flag_ckbtn).pack(side='left',pady=15)
34
35 def getsheetNo(self,num):
36 """pass out sheetNo"""
37 try:
38 self.sheetNo = int(num)
39 except ValueError: tkMessageBox.showinfo("Illegal Input","please input number!")
40
41 def init_btn(self):
42 """two buttons"""
43 btn_frame = Frame(self)
44 btn_frame.pack()
45 btn_import = Button(btn_frame,text='Import',command=self.importx,width=8)
46 btn_import.pack(side='left',padx=20)
47 btn_combine = Button(btn_frame,text='Combine',command=self.combine,width=8)
48 btn_combine.pack(side='left',padx=20)
49
50 #Get filepath
51 def importx(self):
52 """Get input files route"""
53 filenames = tkFileDialog.askopenfilenames()
54 self.filepath = filenames.lstrip('{').rstrip('}').split('} {')
55
56 def combine(self):
57 """combine excel files and write into out.xls"""
58 if self.validation(self.filepath):
59 allrows = self.getAllRows(self.filepath,self.sheetNo)
60 path = self.filepath[0].split("/")
61 path = "/".join(path[0:-1])+"/out.xls"
62 self.writeIntoExcel(path,allrows)
63
64 def validation(self,filepath):
65 """Validation for excel files"""
66 if filepath == [''] or len(self.filepath) == 0:
67 tkMessageBox.showinfo("Combine Failed!","You need import several Excel files before combination")
68 return False
69 if filepath[0][-3:] != "xls":
70 tkMessageBox.showinfo("Combine Failed!","Only Excel files can be combined!")
71 return False
72 return True
73
74
75 def getAllRows(self,filepath,sheetNo):
76 """combine all rows into a list"""
77 allrows = [] #clear before store rows
78 for fname in filepath:
79 try:
80 data = xlrd.open_workbook(fname)
81 except IOError:
82 tkMessageBox.showinfo("IOError","Please select at least one file!")
83 return
84
85 #get sheet number
86 if sheetNo in range(data.nsheets+1):
87 pass
88 else: sheetNo = data.nsheets
89 table = data.sheet_by_index(sheetNo-1)
90
91 #import all rows except or inculde the first one
92 for rownum in range(self.flag_ckbtn.get(),table.nrows):
93 row = table.row_values(rownum)
94 fa = cmp(row[0].encode("utf-8"), "") # fa=0 if no value in first columen
95 fb = cmp(row[0].encode("utf-8"), " ") # fb=0 if equal the special value
96 colnum = len(row)
97 if fa!=0 and fb!=0 and row:
98 app=[]
99 for i in range(colnum):
100 app.append(row[i])
101 allrows.append(app)
102 return allrows
103
104 def writeIntoExcel(self,path,allrows):
105 """write list into an excel file"""
106 wbk = xlwt.Workbook()
107 sheet = wbk.add_sheet('combined sheet')
108 for i in range(len(allrows)):
109 for j in range(len(allrows[i])):
110 sheet.write(i,j,allrows[i][j])
111 #wbk.save(unicode(path,"utf-8"))
112 try:
113 wbk.save(path)
114 except IOError:
115 tkMessageBox.showinfo("Generate Failed!","Please close 'out.xls'")
116 return
117 tkMessageBox.showinfo("Combination Finished!","The combined file locate at: "+path)
118 return
119
120
121 root = Tk()
122 root.title("Excel files combination")
123 root.geometry("240x100+550+300")
124 comb = combination(root)
125 root.mainloop()
다음으로 전송:https://www.cnblogs.com/Alex-Python-Waiter/archive/2012/05/10/excelCombination.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.