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)

 #coding=utf-8
'''
Created on 2018年11月12日 @author: yanerfree get the version number of the file (.dll/.exe) in bulk
批量获取文件版本号,适合量少的,因为是单线程
'''
import os
import sys
import win32api
import xlwt
from xlwt import *
import time
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import * #测试调试输出开关,正式发布需调整为False
mytest = True
mytest = False class GetFileVersionNo(QWidget):
def __init__(self):
super().__init__()
self.setupUi()
self.myList = []#save result
self.status = 0#记录目前是否在获取版本状态下 def setupUi(self): glayout = QGridLayout()
glayout.setSpacing(10)
self.button1 = QPushButton("需要获取版本号的文件路径")
self.button1.clicked.connect(self.open_dir)
self.button2 = QPushButton("选择文件保存位置")
self.button2.clicked.connect(self.save_file_dialog)
self.lineEdit1 = QLineEdit()
self.lineEdit2 = QLineEdit()
self.button3 = QPushButton("获取版本号")
#self.button3.setCheckable(True)
self.button3.clicked.connect(self.getVer)
self.textEdit1 = QTextEdit() self.label1 = QLabel(" 选择文件类型:")
self.combobox1 = QComboBox()
self.combobox1.addItem("exe")
self.combobox1.addItem("dll")
self.combobox1.currentTextChanged.connect(self.textEdit1.clear)
glayout.addWidget(self.button1,1,1)
glayout.addWidget(self.button2,2,1)
glayout.addWidget(self.label1,3,1)
glayout.addWidget(self.combobox1,3,2)
glayout.addWidget(self.button3,4,1)
glayout.addWidget(self.lineEdit1,1,2,1,2)
glayout.addWidget(self.lineEdit2,2,2,1,2)
glayout.addWidget(self.textEdit1,4,2,10,2) self.setGeometry(20,50,500,450)
self.setWindowTitle("GetFileVersionNo")#设置窗体标题 self.setLayout(glayout) def getVer(self):
if self.status == 0:
self.textEdit1.clear()
self.status = 1#状态设置为1,获取版本中
self.changestatus()
file_path = self.lineEdit1.text()
if not os.path.exists(file_path):
self.showMsg("warning","请选择正确的路径")
return save_path = self.lineEdit2.text()
if save_path == "":
self.showMsg("warning","请选择结果保存路径")
return
tmp1 = str(save_path).split("/")[-1]
#print("tmp:",tmp1)
tmp2 = str(save_path).split(tmp1)[0]
#print("tmp:",tmp2)
if not os.path.exists(tmp2):
self.showMsg("warning","请选择正确的保存路径")
return self.writeToExcel(file_path,save_path)
self.status = 0
self.changestatus()
else:
self.showMsg("warning", "正在获取版本号,请等待...") def changestatus(self):
if self.status == 0:
self.myList=[]
self.button1.setEnabled(True)
self.button2.setEnabled(True)
self.button3.setEnabled(True) else:
self.button1.setEnabled(False)
self.button2.setEnabled(False)
self.button3.setEnabled(False) def open_dir(self):
dir_path=QFileDialog.getExistingDirectory(self,"choose directory",r"C:\\")
if not os.path.exists(dir_path):
return -1
#dir_path = self.dir_path.replace('/','\\')#windows下需要进行文件分隔符转换 #将获取的路径写入lineedit中
self.lineEdit1.setText(dir_path)
return (dir_path) def save_file_dialog(self):
save_fileName, ok2 = QFileDialog.getSaveFileName(self,
"文件保存",
r"C:\\",
"Text Files (*.xls);;All Files (*)")
#print("save_fileName,ok2:",save_fileName,ok2)
#将获取的路径写入lineedit中
self.lineEdit2.setText(save_fileName) return(save_fileName) def showMsg(self,t,msg):
if(t=="warning"):
QMessageBox.information(self,"warning",msg,QMessageBox.Yes,QMessageBox.Yes)
self.status = 0#状态设置为1,获取版本中
self.changestatus() def traverse_dir(self,file_path):
#traverse the directory of file_path(the file are .dll)
#myList=[]#save result,如果该函数递归调用,则不能在此处保存结果,
#否则每次递归都会清楚之前保存的数据
try:
filelist = os.listdir(file_path)
for i in range(0,len(filelist)):
print(i,filelist[i])
tmp_path = os.path.join(file_path,filelist[i])
tmp_path = tmp_path.replace('/','\\')#windows下需要进行文件分隔符转换
print("tmp_path:",tmp_path)
if os.path.isfile(tmp_path):
#if str(list[i]).split(".")[1] =="dll":
#if str(filelist[i])[-3:] == "exe":
print("self.combobox1.currentText():",self.combobox1.currentText())
#print("str(filelist[i])[-3:]:",str(filelist[i])[-3:])
if str(filelist[i])[-3:] == self.combobox1.currentText():
#judge if the filename ended with ".dll"
#print tmp_path,getFileVersion(tmp_path)
print ("add to mylis",(filelist[i],self.getFileVersion(tmp_path)))
self.myList.append((filelist[i],self.getFileVersion(tmp_path))) #将内容更新到textedit中去
content = ""
for item in self.myList:
content = content + "%s %s\r\n"%(item[0],item[1])
self.textEdit1.setText(content)
else:
self.traverse_dir(tmp_path)
except:
self.showMsg("warning","未知错误")
self.myList = [] return self.myList def getFileVersion(self,file_name):
#get the version of file
try:
info = win32api.GetFileVersionInfo(file_name, os.sep)
ms = info['FileVersionMS']
ls = info['FileVersionLS']
version = '%d.%d.%d.%04d' % (win32api.HIWORD(ms), win32api.LOWORD(ms), win32api.HIWORD(ls), win32api.LOWORD(ls))
print("version:",version)
except:
version = " " return version def writeToExcel(self,file_path,save_path):
#file_path = self.file_path
#save_path = self.save_path
#write to excel
print("create a workbook")
book = Workbook(encoding='utf-8')#create a workbook
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, label = 'Formatted value', style) # Apply the Style to the Cell
sheet.write(0, 0, "no",style)
sheet.write(0, 1, "file_name",style)
sheet.write(0, 2, "file_version",style)
list = self.traverse_dir(file_path) row=0
num=0
for item in list:
row += 1
num += 1
print(item[0] ,item[1])
sheet.write(row, 0, num, style)
sheet.write(row, 1,item[0] , style)
sheet.write(row, 2,item[1] , style) book.save(save_path) if __name__ == '__main__':
app = QApplication(sys.argv)
demo = GetFileVersionNo()
demo.show()
sys.exit(app.exec_())

python_Excel_xlwt的更多相关文章

随机推荐

  1. Material Design 设计规范总结(2)

    本文是Material Design设计规范总结的第二部分,是进行UI设计与前端开发的必备参考资料. 八.布局 (1)所有可操作元素最小点击区域尺寸:48dp X 48dp. (2)栅格系统的最小单位 ...

  2. Shiro(三):Spring-boot如何集成Shiro(下)

    上一篇文章介绍了shiro在spring-boot中通过filter实现authentication流程(通过设置filterMaps也可以达到authorization的目的):这篇文章主要介绍sp ...

  3. Muduo网络库实战(一):安装和配置

    1. 参考资料 <Muduo_网络库使用手册> 2. 实战记录 1) muduo依赖项安装 centos安装cmake命令:# yum install cmake centos安装libb ...

  4. C++课程设计,12306模拟写起来就是这么粗暴

    这篇文章很详细,也很多希望可以好好看看!看完C++稳过! 一.12306应该具备那些功能 1.查询(一个月以内的): 1.查车票:出发地+目的地+出发时间->显示经过两站车票信息 (余票,车次信 ...

  5. 图论--割边--Tarjan模板

    #include<iostream> #include<stdio.h> #include<vector> using namespace std; const i ...

  6. muduo网络库源码学习————线程本地单例类封装

    muduo库中线程本地单例类封装代码是ThreadLocalSingleton.h 如下所示: //线程本地单例类封装 // Use of this source code is governed b ...

  7. MySQL导出数据到文件中的方法

    MySQL导出数据到文件中的方法 1.导出数据到txt文件中实例:把数据表studscoreinfo中所有数据导出到指定的位置方法:select * from 表名 into outfile 指定导出 ...

  8. basicRF双向灯光控制

    题目: 实现基于BasicRF无线点对点通信的双向灯光控制,具体要求如下: 1> 节点A 和节点B 的PANID设置为0x1234,通道号设置为17,节点地址自定义.<2> 按下节点 ...

  9. java读源码 之 list源码分析(ArrayList)---JDK1.8

    java基础 之 list源码分析(ArrayList) ArrayList: 继承关系分析: public class ArrayList<E> extends AbstractList ...

  10. Jmeter系列(11)- 并发线程组Concurrency Thread Group详解

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html Concurrency Thread ...