用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

  

优质内容筛选与推荐>>
1、c#中abstract与virtual的区别(转)
2、使用C#开发百度空间验证码自动填写的工具
3、视在功率、有功功率和无功功率的单位
4、面向对象之封装
5、c++中的枚举类型


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号