Loading

基于AHK和SQLite实现的快速查找

工作中常常有这样的需求:在SDTM转换过程中,需要查找某个指标得到对应的code,类似于字典结构的key-value之间的关系。而相应的参考文档为excel文件,其中包含7000多条数据,经常需要复制指标然后去excel里进行筛选查找,无论是考虑搜索效率或是自动化实现都略有不足,因此使用AHK和SQLite进行高效快速查找。

思路

  1. 将excel导出为SQLite数据库

  2. 采用DB Browser for SQLite程序进行查找

  3. AHK实现自动化功能

还有一些其他的思路:

  • 查找步骤由程序完成后返回结果,AHK直接复制最准确的结果到剪切板
    缺点:返回结果只有一个,且不一定是想要的那个结果

  • 使用类似于代码补全的工具,输入对应的文字返回相应的多条记录
    放弃原因:没找到该类工具,自己实现有难度且浪费时间(输入法的词库功能勉勉强强,只能做好一个大而全的库以后才能有比较好的对应关系)

1. Excel导出SQLite数据库

这里我使用Python的pandas、sqlalchemy库,来读取Excel并输出SQLite数据库

Excel文件

相应的Python代码


import os
import pandas as pd
from sqlalchemy import create_engine

# 设定工作目录
os.chdir(os.path.dirname(__file__))
# 读取1.xls中的Sheet表单
df = pd.read_excel('1.xls',sheet_name='Sheet')
# 生成sdtm.db数据库,表名为terminology
engine = create_engine('sqlite:///sdtm.db')
df.to_sql('terminology',engine,index=False)

2. 利用DB Browser for SQLite查找相应的字段

DB Browser for SQLite是一款免费开源工具(以下简称SQLite工具),支持中文,打开后可以在图示位置进行搜索

DB Browser for SQLite

3. AHK实现自动化功能

我打算实现选择某段文字,按下快捷键后跳转到SQLite工具得到搜索结果。
于是我采取以下步骤实现:

  1. 复制选择文字(相当于按下Ctrl+C)
  2. 利用CMD命令打开sdtm.db(需要设置db文件的默认程序为SQLite工具)
  3. 自动化点击浏览数据,并在搜索框输入复制得到的文字

以下是相关代码:

app.ahk


;---------------搜索受控术语--------------------
;调整窗口大小函数,避免相对坐标发生变化
ResizeWin(Width = 0,Height = 0)
{
WinGetPos,X,Y,W,H,A
if %Width% = 0
Width := W

if %Height% = 0
Height := H

WinMove,A ,,%X%,%Y%,%Width%,%Height%
}

;搜索函数,包含点击步骤
Search()
{
CoordMode, Mouse, Client
Click, 123,64
Click, 536,95
Send, ^a
Send, ^v
Click, 273,495
Click, 320,170
}

#s:: ;按下win+S执行搜索
clipboard:=
Send, ^{c}
ClipWait
;判断软件是否已经打开
if WinExist("ahk_exe DB Browser for SQLite.exe")
{
    WinActivate
    ResizeWin(1000,610)
    Search()
}
if !WinExist("ahk_exe DB Browser for SQLite.exe")
{
    Run, cmd /c start D:\work\tools\query\sdtm.db
    ;循环判断软件是否处于前台激活状态
    while True{
        if WinActive("ahk_exe DB Browser for SQLite.exe"){
            ResizeWin(1000,610)
            Search()
            Break
        }
    }
}
return

;---------------搜索受控术语--------------------

posted @ 2022-07-15 11:32  TicklTock  阅读(434)  评论(0编辑  收藏  举报