python_Excel_xlwt

xlwt

创建excel,向excel写入数据,并保存数据

安装

 

推荐方法:

通过pip 安装,方便简洁,如下图所示:

 

导入

import xlrd

创建workbook(即excel)

book = Workbook(encoding='utf-8')#create a workbook

创建sheet

sheet = book.add_sheet('Sheet1')#create a sheet

设置样式

#set style
font = xlwt.Font() # 字体
font.name = 'Times New Roman'
font.bold = True
font.underline = False
font.italic = False
style = xlwt.XFStyle() # 创建一个格式
style.font = font # 设置格式字体

往单元格写入

sheet.write(0, 0, "no",style)#第1行,第1列
sheet.write(0, 1, "file_name",style)#第1行,第2列
sheet.write(0, 2, "file_version",style)#第1行,第3列

保存

book.save(save_path)

  1 #coding=utf-8
  2 '''
  3 Created on 2018年11月12日
  4 
  5 @author: yanerfree
  6 
  7 get the version number of the file (.dll/.exe)  in bulk
  8 批量获取文件版本号,适合量少的,因为是单线程
  9 '''
 10 import os
 11 import sys
 12 import win32api
 13 import xlwt
 14 from xlwt import *
 15 import time
 16 from PyQt5.QtGui import *
 17 from PyQt5.QtWidgets import *
 18 from PyQt5.QtCore import *
 19 
 20 
 21 #测试调试输出开关,正式发布需调整为False
 22 mytest = True
 23 mytest = False
 24 
 25 class GetFileVersionNo(QWidget):
 26     def __init__(self):
 27         super().__init__()
 28         self.setupUi()
 29         self.myList = []#save result
 30         self.status = 0#记录目前是否在获取版本状态下
 31         
 32     def setupUi(self):
 33         
 34         glayout = QGridLayout()
 35         glayout.setSpacing(10)
 36         self.button1 = QPushButton("需要获取版本号的文件路径")
 37         self.button1.clicked.connect(self.open_dir)
 38         self.button2 = QPushButton("选择文件保存位置")
 39         self.button2.clicked.connect(self.save_file_dialog)
 40         self.lineEdit1 = QLineEdit()
 41         self.lineEdit2 = QLineEdit()
 42         self.button3 = QPushButton("获取版本号")
 43         #self.button3.setCheckable(True)
 44         self.button3.clicked.connect(self.getVer)
 45         self.textEdit1 = QTextEdit()
 46         
 47         self.label1 = QLabel(" 选择文件类型:")
 48         self.combobox1 = QComboBox()
 49         self.combobox1.addItem("exe")
 50         self.combobox1.addItem("dll")
 51         self.combobox1.currentTextChanged.connect(self.textEdit1.clear)
 52         glayout.addWidget(self.button1,1,1)
 53         glayout.addWidget(self.button2,2,1)
 54         glayout.addWidget(self.label1,3,1)
 55         glayout.addWidget(self.combobox1,3,2)
 56         glayout.addWidget(self.button3,4,1)
 57         glayout.addWidget(self.lineEdit1,1,2,1,2)
 58         glayout.addWidget(self.lineEdit2,2,2,1,2)
 59         glayout.addWidget(self.textEdit1,4,2,10,2)
 60         
 61         self.setGeometry(20,50,500,450)
 62         self.setWindowTitle("GetFileVersionNo")#设置窗体标题
 63         
 64         self.setLayout(glayout)
 65         
 66     def getVer(self):
 67         if self.status == 0:
 68             self.textEdit1.clear()
 69             self.status = 1#状态设置为1,获取版本中
 70             self.changestatus()
 71             file_path = self.lineEdit1.text()
 72             if not os.path.exists(file_path):
 73                 self.showMsg("warning","请选择正确的路径")
 74                 return
 75             
 76             save_path = self.lineEdit2.text()
 77             if save_path == "":
 78                 self.showMsg("warning","请选择结果保存路径")
 79                 return
 80             tmp1 = str(save_path).split("/")[-1]
 81             #print("tmp:",tmp1)
 82             tmp2 = str(save_path).split(tmp1)[0]
 83             #print("tmp:",tmp2)
 84             if not os.path.exists(tmp2):
 85                 self.showMsg("warning","请选择正确的保存路径")
 86                 return
 87             
 88             self.writeToExcel(file_path,save_path)
 89             self.status = 0
 90             self.changestatus()
 91         else:
 92             self.showMsg("warning", "正在获取版本号,请等待...")
 93             
 94     def changestatus(self):
 95         if self.status == 0:
 96             self.myList=[]
 97             self.button1.setEnabled(True)
 98             self.button2.setEnabled(True)
 99             self.button3.setEnabled(True)
100             
101         else:
102             self.button1.setEnabled(False)
103             self.button2.setEnabled(False)
104             self.button3.setEnabled(False)
105             
106     def open_dir(self):
107         dir_path=QFileDialog.getExistingDirectory(self,"choose directory",r"C:\\")
108         if not os.path.exists(dir_path):
109             return -1
110         #dir_path = self.dir_path.replace('/','\\')#windows下需要进行文件分隔符转换
111         
112         #将获取的路径写入lineedit中
113         self.lineEdit1.setText(dir_path)
114         return (dir_path)
115         
116     def save_file_dialog(self):
117         save_fileName, ok2 = QFileDialog.getSaveFileName(self,
118                             "文件保存",
119                             r"C:\\",
120                             "Text Files (*.xls);;All Files (*)")
121         #print("save_fileName,ok2:",save_fileName,ok2)
122         #将获取的路径写入lineedit中
123         self.lineEdit2.setText(save_fileName)
124         
125         return(save_fileName)
126     
127     def showMsg(self,t,msg):
128         if(t=="warning"):
129             QMessageBox.information(self,"warning",msg,QMessageBox.Yes,QMessageBox.Yes)
130             self.status = 0#状态设置为1,获取版本中
131             self.changestatus()
132             
133     def traverse_dir(self,file_path):
134         #traverse the directory of file_path(the file are .dll)
135         #myList=[]#save result,如果该函数递归调用,则不能在此处保存结果,
136         #否则每次递归都会清楚之前保存的数据
137         try:
138             filelist = os.listdir(file_path)
139             for i in range(0,len(filelist)):
140                 print(i,filelist[i])
141                 tmp_path = os.path.join(file_path,filelist[i])
142                 tmp_path = tmp_path.replace('/','\\')#windows下需要进行文件分隔符转换
143                 print("tmp_path:",tmp_path)
144                 if os.path.isfile(tmp_path):
145                     #if str(list[i]).split(".")[1] =="dll":
146                     #if str(filelist[i])[-3:] == "exe":
147                     print("self.combobox1.currentText():",self.combobox1.currentText())
148                     #print("str(filelist[i])[-3:]:",str(filelist[i])[-3:])
149                     if str(filelist[i])[-3:] == self.combobox1.currentText():
150                         #judge if the filename ended with  ".dll"
151                         #print tmp_path,getFileVersion(tmp_path)
152                         print ("add to mylis",(filelist[i],self.getFileVersion(tmp_path)))
153                         self.myList.append((filelist[i],self.getFileVersion(tmp_path)))
154                         
155                         #将内容更新到textedit中去
156                         content = ""
157                         for item in self.myList:
158                             content = content + "%s %s\r\n"%(item[0],item[1])
159                         self.textEdit1.setText(content)
160                 else:
161                     self.traverse_dir(tmp_path)
162         except:
163             self.showMsg("warning","未知错误")
164             self.myList = []
165              
166         return self.myList
167     
168     def getFileVersion(self,file_name):
169         #get the version of file
170         try:
171             info = win32api.GetFileVersionInfo(file_name, os.sep)
172             ms = info['FileVersionMS']
173             ls = info['FileVersionLS']
174             version = '%d.%d.%d.%04d' % (win32api.HIWORD(ms), win32api.LOWORD(ms), win32api.HIWORD(ls), win32api.LOWORD(ls))
175             print("version:",version)
176         except:
177             version = " "
178         
179         return version
180     
181 
182     def writeToExcel(self,file_path,save_path):
183         #file_path = self.file_path
184         #save_path = self.save_path
185         #write to excel
186         print("create a workbook")
187         book = Workbook(encoding='utf-8')#create a workbook
188         sheet = book.add_sheet('Sheet1')#create a sheet
189         #set style
190         font = xlwt.Font() # 字体
191         font.name = 'Times New Roman'
192         font.bold = True
193         font.underline = False
194         font.italic = False
195         style = xlwt.XFStyle() # 创建一个格式
196         style.font = font # 设置格式字体
197         
198         #sheet.write(0, 0, label = 'Formatted value', style) # Apply the Style to the Cell
199         sheet.write(0, 0, "no",style)
200         sheet.write(0, 1, "file_name",style)
201         sheet.write(0, 2, "file_version",style)
202         list = self.traverse_dir(file_path)
203         
204         row=0
205         num=0
206         for item in list:
207             row += 1
208             num += 1
209             print(item[0] ,item[1])
210             sheet.write(row, 0, num, style)
211             sheet.write(row, 1,item[0] , style)
212             sheet.write(row, 2,item[1] , style)
213             
214         book.save(save_path)
215 
216 if __name__ == '__main__':
217     app = QApplication(sys.argv)
218     demo = GetFileVersionNo()
219     demo.show()
220     sys.exit(app.exec_())
221     

 

posted @ 2018-11-12 14:09  yanerfree  阅读(580)  评论(0编辑  收藏  举报