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. Spring.getBean()流程和循环依赖的解决

    getBean流程介绍(以单例的Bean流程为准) getBean(beanName) 从BeanFactory中获取Bean的实例对象,真正获取的逻辑由doGetBean实现. doGetBean( ...

  2. IT服务,共享经济的下一个风口?

    前两天,在上千名CIO参加.释放10亿采购需求的2017华南CIO大会暨信息技术交易会上,一款"一站式IT工程师共享平台"成为大会关注焦点--这就是神州数码旗下的神州邦邦. 其实最 ...

  3. 求x>0时,y=x^3-6x^2+15的极值

    解: 当x→∞时,y也→∞,所以y没有最大值. y=x3-6x2+15=-4*(x/2)*(x/2)*(6-x)+15 而根据几何平均数小于等于算术平均数的定理,(x/2)*(x/2)*(6-x)在x ...

  4. #Week5 Regularization

    一.The Problem of Overfitting 欠拟合(high bias):模型不能很好地适应训练集: 过拟合(high variance):模型过于强调拟合原始数据,测试时效果会比较差. ...

  5. 题解 AT4867 【[ABC155D] Pairs】

    题目 两次二分 首先对ans进行二分,在\([-10^{18},10^{18}]\)之间 考虑怎么check 对于每个ans,枚举每个\(a_i\),二分查找有几个\(a_j\),使得\(a_i\ti ...

  6. python selenium(定位方法)

    一.定位方法 注意:元素属性必须唯一存在 #id定位 find_element_by_id() #name定位 find_element_by_name() #class_name定位 find_el ...

  7. 分治思想--快速排序解决TopK问题

    ----前言 ​ 最近一直研究算法,上个星期刷leetcode遇到从两个数组中找TopK问题,因此写下此篇,在一个数组中如何利用快速排序解决TopK问题. 先理清一个逻辑解决TopK问题→快速排序→递 ...

  8. 「newbee-mall新蜂商城开源啦」 前后端分离的 Vue 版本即将开源

    新蜂商城 Vue 版本 2019 年 10 月份我在 GitHub 开源仓库中上传了新蜂商城项目的所有源码,至今已经有小半年的时间了,感兴趣的可以去了解一下这个 Spring Boot 技术栈开发的商 ...

  9. ubuntu文件系统修改( for arm)

    系统:ubuntu14.04 镜像:ubuntu-rootfs.img for aarch64 创建一个文件夹 ubuntu-mount mkdir ubuntu-mount 将ubuntu-root ...

  10. Git使用教程之SSH连接方式配置(二)

    什么是GitHub?这个网站就是提供Git仓库托管服务的. 什么是SSH Key?你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,大白话理解就是这两个仓库如果要进行远程同步,则我们需 ...