資料夾下Excel內容搜尋 Python

2021-10-23 08:45:27 字數 4466 閱讀 7202

基於 pyqt5 和 xlrd 庫實現

當搜尋框為空時不進行搜尋

**如下:

import sys, os

qfiledialog

from pyqt5.qtgui import qicon

from pyqt5.qt import qlineedit

import xlrd

def __init__(self):

super().__init__()

self.title = 'searchexcel '

self.pathtextbox = qlineedit(self)

self.setwindowtitle(self.title)

self.pathtextbox.move(20, 20)

# create searchtextbox

self.searchtextbox = qlineedit(self)

self.searchtextbox.move(20, 80)

self.searchtextbox.textchanged.connect(self.ontextchange)

# create a openpathbutton in the window

self.openpathbutton = qpushbutton('開啟資料夾', self)

self.tablewidget = qtablewidget(self)

self.tablewidget.setobjectname("tablewidget")

self.tablewidget.setcolumncount(5)

self.tablewidget.setrowcount(0)

for i in range(3):

item = qtablewidgetitem()

self.tablewidget.setverticalheaderitem(i, item)

for i in range(5):

item = qtablewidgetitem()

item.settextalignment(qt.aligncenter)

self.tablewidget.sethorizontalheaderitem(i, item)

self.tablewidget.horizontalheader().setcascadingsectionresizes(true)

item = self.tablewidget.horizontalheaderitem(0)

item.settext(_translate("widget", "檔名"))

item = self.tablewidget.horizontalheaderitem(1)

item.settext(_translate("widget", "sheet"))

item = self.tablewidget.horizontalheaderitem(2)

item.settext(_translate("widget", "行"))

item = self.tablewidget.horizontalheaderitem(3)

item.settext(_translate("widget", "列"))

item = self.tablewidget.horizontalheaderitem(4)

item.settext(_translate("widget", "內容"))

self.tablewidget.setedittriggers(qabstractitemview.noedittriggers)

# connect openpathbutton to function on_click

self.openpathbutton.clicked.connect(self.on_click)

self.showmaximized()

@pyqtslot()

def on_click(self):

self.pathtextbox.settext(qfiledialog.getexistingdirectory(none, "請選擇資料夾路徑"))

def resizeevent(self, a0):

self.pathtextbox.resize(self.width() * 0.8, 40)

self.openpathbutton.move(self.width() * 0.85, 20)

self.openpathbutton.resize(self.width() * 0.1, 40)

self.searchtextbox.resize(self.width() - 40, 40)

self.tablewidget.setgeometry(20, 180, self.width() - 40, self.height() - 200)

self.tablewidget.horizontalheader().resizesection(0, int(self.tablewidget.width() * 0.3))

self.tablewidget.horizontalheader().resizesection(1, int(self.tablewidget.width() * 0.2))

self.tablewidget.horizontalheader().resizesection(2, int(self.tablewidget.width() * 0.05))

self.tablewidget.horizontalheader().resizesection(3, int(self.tablewidget.width() * 0.05))

self.tablewidget.horizontalheader().resizesection(4, int(self.tablewidget.width() * 0.4))

def ontextchange(self):

result_list =

searchtext = self.searchtextbox.text()

if len(searchtext) == 0:

self.tablewidget.setrowcount(0)

return

excel_dir_path = self.pathtextbox.text()

file_list = os.listdir(excel_dir_path)

if file_list is none:

self.tablewidget.setrowcount(0)

return

for file_name in file_list:

if file_name.endswith("xlsx") or file_name.endswith("xls"):

excel_file_path = os.path.join(excel_dir_path, file_name)

try:

excel = xlrd.open_workbook(excel_file_path, encoding_override="utf-8")

except ioerror:

print("open %s failed" % excel_file_path)

else:

all_sheet = excel.sheet_names()

for sheet_name in all_sheet:

each_sheet_by_name = excel.sheet_by_name(sheet_name)

for i in range(each_sheet_by_name.nrows):

for j in range(each_sheet_by_name.ncols):

if searchtext in str(each_sheet_by_name.row_values(i)[j]):

(file_name, sheet_name, i + 1, j + 1, each_sheet_by_name.row_values(i)[j]))

self.tablewidget.setrowcount(len(result_list))

for i in range(len(result_list)):

for j in range(5):

item = qtablewidgetitem()

self.tablewidget.setitem(i, j, item)

item.settext(_translate("widget", str(result_list[i][j])))

if __name__ == '__main__':

已知bug

對於日期格式搜尋無法搜尋,如格式為 

2018/5/31

的,沒有進行正確的字串轉換,所以無法搜尋

python呼叫別的資料夾下的py檔案

1.方法一 環境,python為2.7,pycharm工作區間。主檔案 dataprovider.py 需要運用dataouter.py中的函式,在同乙個comproj大資料夾下,分別在dataouter和dataprovider下?importsys fromsysimportpath0,sys....

執行某個資料夾下的全部py檔案

import os 執行乙個檔案裡所有的檔案,比如 def func path 先判斷這個path是檔案還是資料夾 isdir,isfile 如果是檔案 py結尾 if os.path.isfile path and path.endswith py 執行這個檔案 需要記怎麼執行檔案 os.syst...

svn隱藏資料夾下內容

在不將classes資料夾在版本庫刪除的前提下,隱藏classes資料夾下所有內容,在提交的時候不再提示.windows下,用svn圖形化介面.乙個用svn版本控制的web專案,check out下來,編譯之後,大量classes資料夾下的檔案是non versioned狀態.提交的時候好麻煩.這個...