#创作灵感#
- 一堆Excel文件,每个打开看太累了。写个脚本直接显示里面的内容多好。
- 最好这些内容可以直接复制到剪切板,方便以后编辑修改。
- 只需要将文件拖动到全屏置顶的文本框内,就能弹出Excel里的内容。
- 支持一次选取多个文件。
开干!
一、需要导入并安装这些包:【需要使用tkinter】
pip install windnd
pip install pywin32
pip install openpyxl
二、核心抽取Excel文件的代码:
if file_path[-4:]!='xlsx' and file_path[-3:]!='xls':
showinfo("error","请选择Excel文件!")
return ''
# 加载工作簿
workbook = openpyxl.load_workbook(file_path)
sheetnamelist = workbook.sheetnames
extracted_text = ""
# 遍历所有的sheet
for tmp_name in sheetnamelist
sheet = workbook[tmp_name]
extracted_text = extracted_text + '\n' + tmp_name + '\n'
# 遍历工作表的每一行和每一列,提取文本内容
for row in sheet.iter_rows(values_only=True):
extracted_text = extracted_text + '\n'
for cell in row:
if isinstance(cell, str):
extracted_text = extracted_text + cell + ','
return extracted_text
三、使用文件拖放工具,来处理拖放操作:
windnd.hook_dropfiles(self,func=self.on_drop) #使用windnd组件完成拖放。
四、将Excel文件里的内容弹出为文本框,并自动复制到剪切板
class MyContentDialog(tk.Toplevel):
def __init__(self, parent, d_btns={}, title='My Content',content=''):
tk.Toplevel.__init__(self, parent)
self.parent = parent
self.name = title
self.text_area = None
self.btns = []
self.text_size = (60, 20)
self.btn_size = (16, 1)
self.transient(parent) # 去掉最大最小化按钮
self.title(title)
self.protocol("WM_DELETE_WINDOW", self.cancel)
if not d_btns:
d_btns = {'OK': self.cancel}
self.init_input_box(d_btns,content)
def cancel(self):
self.parent.path_text.delete('0.0', 'end')
self.parent.path_text.insert('insert', '\n将Excel文件拖至本框内:\n')
self.destroy()
# self.withdraw()
# self.parent.grab_set()
def init_input_box(self, d_btns,content):
w, h = self.text_size
# 初始化文本框
if self.text_area: self.text_area.destroy()
self.text_area = scrolledtext.ScrolledText(self, width=w, height=h)
self.text_area.grid(row=0, column=0, columnspan=len(d_btns), padx=10, pady=5)
self.text_area.focus()
self.text_area.insert('end',content) # 末尾插入
# self.text_area.insert('insert', content) # #光标插入
w, h = self.btn_size
for name, cmd in d_btns.items():
# 初始化按钮
btn = Button(self, text=name, width=w, height=h)
btn.grid(row=1, column=i, pady=5)
btn.configure(command=cmd)
self.btns.append(btn)
def bind_btn_cmds(self, btn_cmds):
for i, btn in enumerate(self.btns):
btn.configure(command=btn_cmds[i])
def show(self):
self.grab_set()
self.deiconify()
self.update()
五、窗口全屏置顶:
class ExtractorApp(tk.Tk):
def __init__(self):
super().__init__()
self.title("")
self.geometry("500x100+600+0") # 初始大小
self.lift()
self.attributes("-topmost", True)
self.overrideredirect(1) # 为1时,Windows平台标题栏隐藏。
六、完整代码:
Excel文本内容抽取工具Python资源-CSDN文库