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

Posted hyaray

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用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

  

 

以上是关于用AutoHotkey根据Excel表一键填写浙江省资产负债表的主要内容,如果未能解决你的问题,请参考以下文章

AutoHotkey监控Excel事件应用---根据当前列的值高亮行

用AutoHotkey一键完成Xmind里的几个功能

用啥软件可以一键打开一个网页或者EXCEL

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

EXCEL 我想用日期命名自动建立多个工作表

用AutoHotkey和WinSCP访问坚果云 2022年4月18日