python 获取excel文本框_简单使用python做excel多文件批量搜索(带图形界面)(已更新)...

[Python] 纯文本查看 复制代码import xlwings as xw #引入xlwings处理excel

from tkinter import * #引入tkinter处理界面

import tkinter.filedialog #调用上传文件窗口类

import math

import threading #多线程

import string

#导入下面的库

import pythoncom

#基本变量

files=[]

result=[]

def search(file,word):

pythoncom.CoInitialize()#函数开头初始化,否则会出现' 尚未调用coinitialize'错误

app = xw.App(visible=False,add_book=False) #初始化 visible=False表示不在用户界面打开该excel add_book=False只打开不新建工作薄

wb = app.books.open(file) #打开已有excel文件

sheets = wb.sheets #读取工作簿

for sht in sheets:

rng = sht.range('a1').expand('table')

nrows = rng.rows.count #获取行数

ncols = rng.columns.count #获取列数

print("正在比对:%s"%(file))

#文本转字符

A=math.floor(ncols/26) #首字母

A=chr((A-1)+97) if (A-1)>=0 else "" #如26以内首字母为空 27首字母为A 55首字母为B

B=math.floor(ncols%26) #第二个字母 取26的余 按这个算法 B为第2列 Z为第26列 AA 为第27列 AB为第28列 BA为第53列

B=chr(B+97) if B>=0 else ""

col=("%s%s"%(A,B)) #合并

val=sht.range('a1:%s%d'%(col,nrows)).value #获取区域内容

for ii,i in enumerate(val): #遍历区域内容

for jj,j in enumerate(i):

if str(j).find(str(word))!=-1: #搜索该字符串

mess="成功找到数据位于表:%s 工作簿:%s 行:%d 列:%d 内容:%s"%(file,sht,ii+1,jj+1,j)

result.append(mess)

print(mess)

wb.close()#不加的话,Excel一直处于使用状态,无法打开Excel文件查看

app.quit() #退出excel

def MyThreading(num1,num2,searchText): #线程执行

for i in range(num1,num2):

print("打开文件%s"%(files[i]))

search(files[i],searchText)

return 0

def FileSelect():#文件选择

files.clear()

filename = tkinter.filedialog.askopenfilenames() #弹出多文件选择窗

if(len(filename)==0):

textbox.insert('end', "未选择任何文件!\n")

root.update()

print("未选择任何文件!\n")

else:

textbox.insert('end', "已选择文件\n")

for i in filename:

files.append(i)

print("\t\t%s\n"%(i))

textbox.insert('end', "%s\n"%(i))

textbox.see(tkinter.END)

root.update()

return 0

def start():

searchText=e.get() #从钩子获取内容

if len(files)==0:

print("未上传文件")

textbox.insert('end', "错误:未上传文件\n")

root.update()

return 0

if (not searchText) or searchText=="请输入需要搜索的字符串":

print("未输入需查询内容")

textbox.insert('end', "错误:未输入需查询内容\n")

root.update()

return 0

print("正在执行")

textbox.insert('end', "正在执行,页面可能稍有卡顿,请耐心等待\n")

root.update()

ThreadLen=10 if len(files)>10 else 1 #文件数量若小于10则只开一个线程

ThreadArr=[]

if ThreadLen>1:

for i in range(ThreadLen):#追加十个线程(若需要)

bei=math.floor(len(files)/ThreadLen)

print("执行线程%d至%d"%((i*bei),(i*bei+bei)))

t=threading.Thread(target=MyThreading,args=((i*bei),(i*bei+bei),searchText))

ThreadArr.append(t)

#追加线程执行剩余文件搜索

print("执行线程%d至%d"%(0,len(files)))

t=threading.Thread(target=MyThreading,args=(0,len(files),searchText))

ThreadArr.append(t)

for i in ThreadArr:

i.start() #循环执行所有线程

for i in ThreadArr:

i.join() #循环等待所有线程执行结束

print("执行结束")

if len(result)==0:

textbox.insert('end', "没有找到该字符串\n")

else:

textbox.insert('end', "执行结束,执行结果如下:\n")

for i in result:

textbox.insert('end', "%s\n"%(i))

result.clear()

textbox.see(tkinter.END) #查看文本框底部

root.update() #更新文本框

#构建用户界面

root=Tk()

root.title("excel内容搜索") #窗口标题

root.geometry('450x300+585+265') #初始化窗口大小和位置

root.resizable(0, 0) #设置窗口大小不可更改

#输入框

e = StringVar()#字符串钩子

enrty=Entry(root,width=20,textvariable=e).grid(row=0,column=0,columnspan=2,padx=40,pady=5)

e.set("请输入需要搜索的字符串")

#上传文件按钮

getFile = Button(root,text="点击选择文件",command= FileSelect).grid(row=1,column=0,columnspan=2,padx=40,pady=5)

#开始按钮

startBtn = Button(root,text="START",command= start).grid(row=2,column=0,columnspan=2,padx=40,pady=5)

#消息框

textbox = Text(root,width=50,height=10)

textbox.grid(row=3,column=0,columnspan=2,padx=40,pady=5)

textbox.insert("end", "日志消息:\n")

root.mainloop() #执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值