找回密码
 加入
搜索
查看: 2883|回复: 3

[AU3基础] 【已解决】为什么我_ExcelBookClose关闭了相应的Excel文件没有结束掉相应的进程

[复制链接]
发表于 2012-3-5 17:56:53 | 显示全部楼层 |阅读模式
本帖最后由 mm33082 于 2012-3-8 23:34 编辑
#include <EditConstants.au3> 
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Excel.Au3>
#include <Array.au3>
;Opt("TrayIconHide", 0) ;隐藏默认托盘

Opt("TrayMenuMode",1)
;************GUI相关变量声明*****************
Dim $Main_Win,$TD_Root,$TD_Btn,$Report_Root,$Rep_Btn,$Copy_BTn,$Send_Mail ;GUI声明
Dim $TD_Exl_Root,$Rep_Exl_Root;input中excel文件路径
Dim $TD_Exl_ID,$Rep_Exl_ID;Excel对象标识(TD和测试报告的)
Dim $Bug_Id,$Bug_Stat,$Bug_Decb,$Bug_Prob,$Bug_Grde;“缺陷ID”、“状态”、“描述”、“出现概率”、“严重程度”所在的列号
Dim $Sheet_Name,$Excel_Sheet;分页相关
Dim $return_id
Dim $BegRow ;第一个缺陷ID为空的列号
Dim $About_If = "提示:"&"1.请预先关闭需要导入的Excel文件!"&@CRLF&"      2.请勿在导入过程结束前结束程序!"&@CRLF&"      2.请勿在导入过程中操作Excel!"
;*********************************************

;********************GUI设计******************
;
;
#Region ### START Koda GUI section ### Form=
$Main_Win = GUICreate("TestReport", 400, 140, 421, 368,-1,$WS_EX_ACCEPTFILES);主窗口且接收拖动
$TD_Root = GUICtrlCreateInput("", 8, 16, 289, 21,BitOR($GUI_SS_DEFAULT_INPUT,$ES_READONLY));创建
GUICtrlSetState($TD_Root, $GUI_DROPACCEPTED)
$TD_Btn = GUICtrlCreateButton("TD导出XLS", 304, 14, 89, 25)
$Report_Root = GUICtrlCreateInput("", 8, 51, 289, 21,BitOR($GUI_SS_DEFAULT_INPUT,$ES_READONLY))
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
$Rep_Btn = GUICtrlCreateButton("测试报告XLS", 304, 49, 89, 25)
$Copy_BTn = GUICtrlCreateButton("生成缺陷报告", 8, 83, 89, 25)
$Send_Mail = GUICtrlCreateButton("发送到FoxMail", 208, 83, 89, 25)
$About = GUICtrlCreateButton("关于", 304, 110, 89, 25)
GUISetState(@SW_SHOW,$Main_Win)
#EndRegion ### END Koda GUI section ###

;
;
;***********************************************
;Global $TD_Exl_Root,$TD_Exl_ID,$TD_Exl_ID_Attach,$Bug_Id,$Rep_Exl_Root,$Report_Root,$_File_Root,$Sheet_Name,$Excel_Sheet

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $TD_Btn
                        Open_Dialog("选择TD中导出BUG文件(Excel格式)",$TD_Root);选择TD导出BugList的对话框
                Case $Rep_Btn
                        Open_Dialog("选择测试报告Excel",$Report_Root);选择测试报告的对话框
                Case $Copy_BTn   ;开始进行运行生成
                        $TD_Exl_Root = GUICtrlRead($TD_Root);读取TD.xls的路径
                        $Rep_Exl_Root = GUICtrlRead($Report_Root);读取测试报告路径
                        If $TD_Exl_Root = "" Or $Rep_Exl_Root = "" Then;判断上面是否读取成功
                                error_msg("请选择文件");若读取失败弹出对话框提示
                        Else
                        TrayTip("提示","正在操作BUG列表Excel...",15,1)        
                        $TD_Exl_ID = _ExcelBookOpen($TD_Exl_Root,0);打开TD.xls
                        If $TD_Exl_ID <> 0 Then
                                $Bug_Id = Get_link_col($TD_Exl_ID,"缺陷 ID");获取“缺陷ID”所在的列号,且以“缺陷ID”为主要判断条件
                                If $Bug_Id <> 0 Then
                                error_msg("成功~’")
                        Else
                        error_msg("缺少必要项"&@CRLF&"‘缺陷ID’")
                        $re = _ExcelBookClose($TD_Exl_ID)
                        MsgBox(4096,"1",$re&@CRLF&@error)
                        EndIf
                        Else
                        error_msg("打开文件失败,请检查")
                EndIf
EndIf
                        ;Open_Excel($Report_Root)
                Case $GUI_EVENT_CLOSE
                        ExitLoop
                        Exit
                Case $Send_Mail
                        Run(@ScriptDir&"\FoxMail.exe")
                Case $About
                        MsgBox(32,"关于",$About_If)
                Case $GUI_EVENT_DROPPED
                        If @GUI_DropId = $TD_Root Then
                                GUICtrlSetData($TD_Root, "")
                                GUICtrlSetData($TD_Root,@GUI_DragFile)
                        ElseIf @GUI_DropId = $Report_Root Then
                                GUICtrlSetData($Report_Root, "")
                                GUICtrlSetData($Report_Root,@GUI_DragFile)
                        Else
                                EndIf
                        
        EndSwitch
WEnd
;*****************打开选择文件对话框函数***********
;
;
Func Open_Dialog($Diglog_til,$Input)
        Local $temp,$Open_Root
        $Open_Root = FileOpenDialog($Diglog_til,@DesktopDir,"Excel 工作簿(*.xls;*.xlsx)",1,"")
        If @error = 2 Then
                error_msg("出错了")
        EndIf
        $temp = GUICtrlSetData($Input,$Open_Root)
        If $temp = 0 Or $temp = -1 Then
                error_msg("写入路径失败")
        EndIf
EndFunc
;

;**********提示框函数*******
Func error_msg($msg)
        MsgBox(0,"提示",$msg)
EndFunc
;**************************

;***********获取关键字(如 缺陷ID)所在的列,此处默认他们所在行为第一行
Func Get_link_col($ExcelHD,$keyword)
        Local $Value = 0 ;设置默认返回值
        Local $Array[15]
                $Array = _ExcelReadArray($ExcelHD,1,1,15) ;使用_excelreadarray函数。读取从第一行第一列到第15列的数据到数组$Array1中。
                                        ;MsgBox(0,"0",@error)
                For $i = 0 To 14
                ;_ArrayDisplay($Array1,"no")
                        If $Array[$i] == $keyword Then   ;比对数组$Array1中是否有值与“关键字”一致的。
                                $Value = $i + 1              ;将$i+1赋值给返回值$Array。这里的$value对应的就是列号了
                                ExitLoop
                                ;$Array_Value[0] = $j
                                ;$Array_Value[1] = $i
                                ;ExitLoop
                        Else
                                $value = 0
                        EndIf                
Next        
Return $Value ;返回$value值
EndFunc
;**********************************

;*******************获取关键字(“如空格”)所在的行号
Func Get_link_row($ExcelHD,$keyword,$col,$row) ;参数1,4
        Local $Value = 0

        $Array2 = _ExcelReadArray($ExcelHD,$row,$col,300,1) ;$col参数由get_link_col函数返回,从$col列的第一行开始读500行的数据到$array2中
        For $i = 0 To 499
                If $Array2[$i] == $keyword Then ;对比数组$array2中数据与关键字,是否有一致的项目。若有,将$i+1赋值给$value.即查找到的行号
                        $Value = $i + 1
                        ExitLoop
                Else
                        $Value = 0 
                EndIf
        Next
        Return $Value ;返回$Value,若为0 则说明无相同项
EndFunc
;****************************
附件测试Excel..
在所有excel文件都关闭后,进程中仍然有excel.exe..

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +15 收起 理由
afan + 15 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2012-3-8 14:58:38 | 显示全部楼层
_ExcelBookClose($TD_Exl_ID)
后面加上:
$TD_Exl_ID = 0
就可以了。

如有必须再加上ProcessClose("excel.exe");关闭最后打开的excel进程

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2012-3-8 21:47:10 | 显示全部楼层
$oExcel=$TD_Exl_ID.parent.application  ;取得打开工作簿的excel进程
$TD_Exl_ID.close(true) ;关闭并保存,如果不需保存用false
if $oExcel.workbooks.count=0 then $oExcel.quit  ;如果excel当前打开的工作簿个数为0,则进程退出
这样试下

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

 楼主| 发表于 2012-3-8 23:31:48 | 显示全部楼层
回复 2# smartzbs


    嗯。可以了。感谢您
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 06:54 , Processed in 0.092827 second(s), 30 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表