用AutoHotkey根据Excel表一键填写浙江省资产负债表

登录:国家税务总局浙江省电子税务局

在【打印】页面导出到Excel表,脚本是模拟手工按Tab键来切换输入框,有些区域是不需要填写的,也就不需要按Tab键,

所以需要标识出来,有两种方式(2选1):

  1. Excel表”C,G“两列内有数值而网页上为灰色或无输入框的相应单元格标上任意背景色。见下图
  2. Excel表”C,G“两列内有数值而网页上为灰色或无输入框的相应单元格地址记录到脚本的addrExclude内。

(默认已填写 C19,C25,C34,C35,G15,G21,G22,G34,G35 这几个单元格。

方法1比较直观,但需要手工操作,以后导出的表格默认不带背景色,都需要手工处理,麻烦些。

方法2比较省事,靠脚本控制,更一劳永逸。

然后鼠标激活第一个要填的框(货币资金的期末余额),按F1即可。

脚本使用见置顶贴

F1::
    addrExclude := "C19,C25,C34,C35,G15,G21,G22,G34,G35" ;有数值但不填的单元格地址
    rLoop := 5 ;要填的数据-起始行
    rMax := 33 ;要填的数据-最后一行
    Send("{Ctrl Down}a{Ctrl Up}")
    ;获取Excel表数据
    ctlID := ControlGetHwnd("Excel71", "Ahk_class XLMAIN")
    idObject := -16
    If DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", ctlID, "UInt", idObject&=0xFFFFFFFF, "Ptr", -VarSetCapacity(IID,16)+NumPut(idObject==0xFFFFFFF0?0x46000000000000C0:0x719B3800AA000C81,NumPut(idObject==0xFFFFFFF0?0x0000000000020400:0x11CF3C3D618736E0,IID,"Int64"),"Int64"), "Ptr*", pacc) = 0
        win := ComObject(9, pacc, 1)
    xl := win.Application
    st := xl.ActiveSheet
    rLoop := 5
    arr := []
    While(rLoop <= rMax)
    {
        idx := A_Index
        arr[idx] := []
        For _, col In ["C","G"]
        {
            cellLoop := st.Cells(rLoop,col)
            ;If (!(cellLoop.Value ~= "\d") || cellLoop.Interior.ColorIndex != -4142) ;无数字或有背景色,Tab键要跳过
            If (!(cellLoop.Value ~= "\d") || addrExclude ~= cellLoop.Address(False,False) . "(\D|$)") ;无数字或在addrExclude内,Tab键要跳过
                arr[idx][A_Index] := "skip"
            Else If (cellLoop.Value > 0)
            {
                Try
                    arr[idx][A_Index] := RTrim(RegExReplace(Round(cellLoop.Value,2), "^-?\d+\.\d*?\K0+$"), ".")
                Catch
                    MsgBox(cellLoop.Address . "`n" . cellLoop.Value)
            }
        }
        rLoop++
    }
    For _, arrRow In arr
    {
        Loop(2)
        {
            If arrRow.HasKey(A_Index)
            {
                If (arrRow[A_Index] != "skip")
                    Send(arrRow[A_Index] . "{Tab 2}")
            }
            Else
                Send("{Tab 2}")
            Sleep(200)
        }
    }
Return

  

原文地址:https://www.cnblogs.com/hyaray/p/10817025.html

时间: 2024-08-30 14:47:21

用AutoHotkey根据Excel表一键填写浙江省资产负债表的相关文章

python读取excel表并把数据转存为字典

excel表如下: 我们需要通过使用python的xlrd方法先读取excel,再遍历赋值给字典.代码如下: import xlrd class Read_Ex(): def read_excel(self): #打开excel表,填写路径 book = xlrd.open_workbook("../Data/test.xlsx") #找到sheet页 table = book.sheet_by_name("Sheet1") #获取总行数总列数 row_Num =

如何将EXCEL表导入MYSQL

    在平时的工作学习中,难免会遇到需要把EXCEL表中的数据导入到MYSQL中,比如要把EXCEL中的数据进行核对,或者要把测试用例导入到TestLink中.本人搜集相关的资料并加以实践总结出了以下几种方法: 1.使用PHP Excel Parser Pro软件,但是这个软件为收费软件: 2.可将EXCEL表保存为CSV格式,然后通过phpmyadmin或者SQLyog导入,SQLyog导入的方法为: ·将EXCEL表另存为CSV形式: ·打开SQLyog,对要导入的表格右击,点击“导入”-

MFC:使用ODBC操作EXCEL表

方案一:利用现成的第三方库:CSpreadSheet 使用CSpreadSheet操作EXCEL的局限性:你只能够在EXCEL中创建表,然后才能够采用ODBC的方式操作EXCEL表,否则查询语句中FROM后面的表名称无法填写. 限制 该控件需要MFC(微软基础类库)支持.未测试是否支持Unicode编码.控件以ODBC读写 Excel文件,需要ODBC驱动程序.Excel文件必须列标记.且首行列标记唯一(字段).禁止 删除工作簿,仅允许删除工作簿内容.列值类型参照程序数据类型.不采用Excel格

AutoHotkey使用Excel的Com对象可能导致进程残留问题的原因及解决方案

在AutoHotkey脚本中,对Excel的应用体验很不错,xl := ComObjActive("Excel.Application")就和当前Excel表连接了, 通过xl变量就能调用VBA代码操作Excel,也能监视Excel事件,这种事件能对所有工作表都能效,通用性很好. 本人就是因为偷懒,声明了Global xl,这样在任何函数内都能直接使用,非常方便, 否则要么是每个函数都需要多传入xl参数,或者每个函数声明为Global,这样也能使用外面的变量,都不太理想. 直到近期,才

Fort.js – 时尚、现代的表单填写进度提示效果

Fort.js 是一款用于时尚.现代的表单填写进度提示效果的 JavaScript 库,你需要做的就是添加表单,剩下的任务就交给 Fort.js 算法了,使用非常简单.提供了Default.Gradient.Sections 以及 Flash 四种效果,满足开发的各种场合需要. 您可能感兴趣的相关文章 太赞了!超炫的页面切换动画效果[附源码下载] 创意无限!一组网页边栏过渡动画[附源码下载] 真是好东西!13种非常动感的页面加载动画效果 你见过吗?9款超炫的复选框(Checkbox)效果 时尚设

Python+Selenium进行UI自动化测试项目中,常用的小技巧3:写入excel表(python,xlsxwriter)

我们在项目中可能用到excel表生成,下面的代码就是对excel表的操作: 1 import xlsxwriter 2 import datetime 3 4 class write_excel(): 5 def __init__(self,path): 6 now = datetime.datetime.now() 7 fname = 'TestReport' + now.strftime("%Y-%m-%d") 8 self.row = 0 9 self.xl = xlsxwrit

PLSQL导入Excel表中数据

PL/SQL 和SQL Sever导入excel数据的原理类似,就是找到一个导入excel数据的功能项,按照步骤走就是了.下面是一个些细节过程,希望对像我这样的菜鸟有帮助.  www.2cto.com 1.准备excel表. 右击数据表—选择edit data. 选择数据,右击,选择Copy to Excel 2.调整excel表 可以删除A列和F列,然后把你的数据粘到BCDE列,这样做的好处就是在导入excel的时候,绝对不会出现因为格式或其他文字问题导致错误. 3.准备导入 选择tool—O

cocos2dx3.2开发 RPG《Flighting》(三)从Excel表中加载需要的数据

一.前言 在一个游戏里面,需要用到的数据一般都是由游戏策划提供的(这里的策划还是由我自己担任啦哈哈).什么是需要用到的数据?例如我创建一个角色A,A有他自己的攻击力,防御力,速度等,再创建一个角色B,B也有自己的攻击力,防御力,速度等.每个角色都有一些基础属性,但是对应不同的角色,属性的值有可能不同.我们不可能在代码里面把这些数据写死.最好的办法是从一个文件(通常是Excel表格)中读入数据,这样就方便管理和修改. 二.正文 1.Excel <Flighting>游戏里面用到了4个Excel表

JAVA笔记-如何向Excel表单中高效的批量写入百万条数据

今天,一朋友问我使用JAVA有没有什么办法导出百万级的数据到Excel工作表. 当时我的第一个念头就是这真的是一个好疯狂的念头.然后就想假如真的有这样类似的需求,我自己应该怎么做呢? ps: 首先科普一下基础知识 Excel 2003及以下的版本.一张表最大支持65536行数据,256列.也就是说excel2003完全不可能满足百万数据导出的需求. Excel 2007-2010版本.一张表最大支持1048576行,16384列: 笔者使用的是office 2010,更高的版本笔者没有使用过,暂