【问题标题】:Why can't I save 2 excel files with AHK script?为什么我不能用 AHK 脚本保存 2 个 excel 文件?
【发布时间】:2019-11-22 16:42:24
【问题描述】:

我想从我公司的数据库中获取信息,单击“导出到 excel”按钮(一切正常),然后将导出的内容保存到特定文件夹中。

第一个工作正常,保存,然后退出。

第二个没有。第二个文件 TEST1 没有被删除,即使我在删除命令之后进入 MsgBox。

然后会弹出一个灰色的 Excel 窗口,其中没有工作表,一秒钟后它消失了,第二个导出的工作表仍然在那里。

如果不是唯一打开的 Excel 工作簿,我不知道它认为 X2 指的是什么。我是否需要以某种方式“真正”退出 X1 或其他什么?如果我尝试执行两个 saveAs,它似乎会失败。

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

+^g::

;; generate an excel spreadsheet from our DB

Sleep 5000

X1 := ComObjActive("Excel.Application")
X1.Visible := True

If FileExist("M:\Current Users\aparisi\MaryFiles\TEST.xlsx") {

    MsgBox, "We found TEST"
    FileDelete, "M:\Current Users\aparisi\MaryFiles\TEST.xlsx"  

}

X1.ActiveWorkbook.SaveAs("M:\Current Users\aparisi\MaryFiles\TEST.xlsx")
X1.Quit()

;; props

;; generate a 2nd excel spreadsheet from our DB

Sleep 5000

X2 := ComObjActive("Excel.Application")
X2.Visible := True

If FileExist("M:\Current Users\aparisi\MaryFiles\TEST1.xlsx") {

    MsgBox, "We found TEST1"
    FileDelete, "M:\Current Users\aparisi\MaryFiles\TEST1.xlsx"
    MsgBox, "We apparently just deleted TEST1"

}

X2.ActiveWorkbook.SaveAs("M:\Current Users\aparisi\MaryFiles\TEST1.xlsx")
X2.Quit()

WinActivate Act! Premium Plus - TenThirtyOneServices
WinWaitActive Act! Premium Plus - TenThirtyOneServices

CoordMode, Mouse, Screen

MouseMove, 1172, 312
Click
Click
Sleep 1000
MouseMove, 1154, 688
Click
Sleep 1000

Return

【问题讨论】:

    标签: excel com autohotkey


    【解决方案1】:

    试试这样的

    +^g::
    
    ;; generate an excel spreadsheet from our DB
    
    Sleep 5000
    
    X1 := ComObjCreate("Excel.Application")  ; create a new instance of Excel
    X1.Visible := true                       ; make Excel visible
    X1 := ComObjActive("Excel.Application")  ; make Excel active
    X1.Workbooks.Add()                       ; create a new blank workbook  in the active instance
    
    If FileExist("M:\Current Users\aparisi\MaryFiles\TEST.xlsx") 
    {
        MsgBox, "We found TEST"
        FileRecycle, M:\Current Users\aparisi\MaryFiles\TEST.xlsx
        Sleep 500
        If !FileExist("M:\Current Users\aparisi\MaryFiles\TEST.xlsx")
            MsgBox, "We just deleted TEST.xlsx"
        else
            MsgBox, "We could NOT delete TEST"
    }
    
    X1.ActiveWorkbook.SaveAs("M:\Current Users\aparisi\MaryFiles\TEST.xlsx")
    X1.Quit()
    X1 := ""                     ; clear the variable
    
    
    ;; props
    
    ;; generate a 2nd excel spreadsheet from our DB
    
    Sleep 5000
    
    X2 := ComObjCreate("Excel.Application")  ; create a new instance of Excel
    X2.Visible := true                       ; make Excel visible
    X2.Workbooks.Add()                       ; create a new blank workbook in the active instance of Excel
    
    X2 := ComObjActive("Excel.Application")
    X2.Visible := True
    
    If FileExist("M:\Current Users\aparisi\MaryFiles\TEST1.xlsx") 
    {
        MsgBox, "We found TEST1"
        FileRecycle, M:\Current Users\aparisi\MaryFiles\TEST1.xlsx
        Sleep 500
        If !FileExist("M:\Current Users\aparisi\MaryFiles\TEST1.xlsx")
            MsgBox, "We just deleted TEST1.xlsx"
        else
            MsgBox, "We could NOT delete TEST1.xlsx"
    }
    X2.ActiveWorkbook.SaveAs("M:\Current Users\aparisi\MaryFiles\TEST1.xlsx")
    X2.ActiveWorkbook.Close
    X2.Quit()
    X2 := ""  
    
    ; .....
    Return
    

    【讨论】:

    • 为什么要在活动实例中新建一个空白工作簿?它保存了两次,但现在它用空白工作簿覆盖了 TEST 文件(应该包含从我们的数据库中导出)
    • 编辑:如果我去掉 Workbooks.Add() 部分,一切都很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2016-10-26
    • 1970-01-01
    • 2013-03-03
    • 2020-02-17
    • 1970-01-01
    • 2021-02-05
    相关资源
    最近更新 更多