基於 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狀態.提交的時候好麻煩.這個...