背景:
在工作中,需要对一个Excel表格的内容进行快速搜索关键字,然后点击选中对应的文本的超链接,但是该工作表格为xlsm的格式,常规用excel打开会加载很多的东西,速度超级慢,最近正在学习,python 所以想到用python来打开表格,快速定位到其中的关键字,然后打开对应的文本,提供一种思路:
(也可以用vba来读取,但是太慢了。。。)
原始表格如下:
关键字的获取是在Excel中的“I”列,超链接在J列,使用额openpyxl,查了很多资料都没法获得对应的超链接地址,于是就查看对应超链接 的格式,然后,创建对应文件的超链接,使用os.system()直接的打开对应的表格,这样达到了打开超链接的目的。代码如下:
# -*- coding: utf-8 -*-
"""
Created on Fri Aug 30 09:31:31 2019
@author: LS
"""
import openpyxl
import os
def get_file_name(i):
#获得链接的名字,日期格式分离,把日期当作字符串提取,然后再分离,这个可以依据自己的链接进行处理。
time_name=(str(ws.cell(column=5,row=i+1).value)).split(r'-')
time_name2=time_name[2].split()
#根据文件名字进行分类
if 'IDEABOOK' in ws.cell(column=1,row=i+1).value:
time_list=time_name[0]+time_name[1]+time_name2[0]
else:
time_list=time_name[0]+'_'+time_name[1]+'_'+time_name2[0]
#文件名字
filename_combie=ws.cell(column=1,row=i+1).value+'_L'+str(ws.cell(column=7,row=i+1).value)+'_St'+str(ws.cell(column=8,row=i+1).value)+'_'+time_list+'.xlsm'
print('Open:'+filename_combie)
return filename_combie
while True:
#输入关键字进行索引
print("------------------------------------------------.")
print("------------Input word to search----------------.")
print("----------IF you want quit input 'Q'------------.")
print("------------------------------------------------.")
Key_search=str(input('Input:'))
if Key_search=='Q':
break
#Key_search='无法识别二维码现象'
print('Your search:%s'%Key_search)
file_folder=os.getcwd() #文件的存放地址文件夹,可以改为自己的存放路径;
Tracking_list_name=file_folder+'\\'+'Tracking_List.xlsm'
# **打开excel文件,获取工作簿对象**
wb = openpyxl.load_workbook(Tracking_list_name) # 从工作薄中获取一个表单(sheet)对象
sheets = wb.sheetnames #print(sheets, type(sheets))
ws = wb.active
#获取表格的总列数
print('表格总共:{}行 {}列'.format(ws.max_row, ws.max_column))
#获取表格的第几列的数值以及清单
list_Tran=[]
Col_range=ws['I'] #关键字都再I列,所以就直接获取I列的数值,并存入数组,
for col in Col_range:
list_Tran.append(col.value)
#print(list_Tran)
#查找到对应的文件是否存在并且打开对应的文件。
list_Tran_no=[]
for i in range(0,len(list_Tran)):
if Key_search in list_Tran[i]:
print("there are an sample,in list: %d" %i)
#获得对应表格的时间并且改为名字的列表
print("---->No%d---->: Detailshow:%s"%(i,list_Tran[i]))
list_Tran_no.append(i)
i=123
# 关键字都再I列,所以就直接获取I列的数值,并存入数组,
if len(list_Tran_no)>=1:
while i>0:
print('input the index you want open:')
print('Open nothing input: -1')
i=int(input('Input index:'))
if i==-1:
break
getname=get_file_name(i)
os.system(file_folder+'\\Track_Doc_Version_001\\'+getname) #打开对应的文件
else:
print("There no refernece history.")
运行后效果
输入
输入‘Q’退出,当表格中有很多的数据时候,先进行内容输出,然后输入对应的序列号进行选择,打开对应的文件,每次打开一个,当关闭后,提示输入的字符,如果是-1,则退出到上一步。