找回密码
 加入
搜索
查看: 8093|回复: 11

[AU3基础] 如何同时后台保存已打开的多个word文档或Excel文档?

  [复制链接]
发表于 2010-6-12 00:25:26 | 显示全部楼层 |阅读模式
本帖最后由 KLU3K 于 2010-6-13 19:06 编辑

想做一个关机程序,关机前保存所有已经打开的word和Excel文件。
路径可能很多,也就是说可能会有同时打开的不同路径中的相关文件。
想有什么操作一次性全部保存之后关机。不需要另存。只要保存一下就行。

ps.关机程序的代码已经有了。就是保持已打开的文件这步不知道怎么办了。一个固定的文件还好,但是文件一多就不会弄了。

另外追加一个问题,怎么判断一个word或一个Excel文件有没有保存?
说明白一点就是,如果是新建一个文档,那么就算不写任何内容也会出来一个空白文件。
但是有一种情况是直接启动word后也会有一个空白文档,如果直接保存会弹出对话框让你选择保存为XXX文件。
那么怎么判断这种情况存在呢?如果有这个情况存在的话就直接另存到桌面一个文件。
发表于 2010-6-12 10:32:38 | 显示全部楼层
激活窗口,发送保存的快捷键,譬如Excel的Alt+F、Ctrl+S。未经实践。
发表于 2010-6-12 11:15:06 | 显示全部楼层
学习了-谢谢!!
 楼主| 发表于 2010-6-12 18:24:05 | 显示全部楼层
用热键不是太好。还有别的方法么?
发表于 2010-6-13 01:07:49 | 显示全部楼层
#include <Excel.au3>
$var = WinList()
For $i = 1 to $var[0][0]
  If  StringInStr($var[$i][0], "xls") And IsVisible($var[$i][1])Then
        _ExcelWriteCell(_ExcelBookAttach($var[$i][0], "Title"), "If you can read this, then Success!", 1, 1) ;写入单元格
        _ExcelBookClose(_ExcelBookAttach($var[$i][0], "Title"), 1, 0) 
        MsgBox(0, "详细信息", "标题=" & $var[$i][0] & @LF & "句柄=" & $var[$i][1])
  EndIf
Next 
Func IsVisible($handle)
  If BitAnd( WinGetState($handle), 2 ) Then 
    Return 1
  Else
    Return 0
  EndIf
EndFunc
不知道是不是我的excel是精简版问题
这个脚本运行几次提示错误
C:\autoit3\Include\Excel.au3 (410) : ==> ??????(?????).:
$oExcel.Application.DisplayAlerts = $fDisplayAlerts
$oExcel.Application^ ERROR
最后一次就可以无错误执行,奇怪...
 楼主| 发表于 2010-6-13 18:53:55 | 显示全部楼层
Win7+Office2007测试无效。没任何反应。
我同时打开了1和2两个文件。没有保存也没关闭。也无任何报错。奇怪的是MsgBox也没有。
 楼主| 发表于 2010-6-13 18:59:15 | 显示全部楼层
#include <Word.au3>
#include <Excel.au3>

If ProcessExists("Excel.EXE") Or ProcessExists("WINWORD.EXE") Then
        $oExcel = ObjGet("", "Excel.Application")
        $oWord = ObjGet("", "Word.Application")
        If IsObj($oExcel) Or IsObj($oWord) Then
                MsgBox(0, "", "存在")
                _ExcelBookClose($oExcel)
                _WordQuit($oWord, -1)
        EndIf
Else
        MsgBox(0, "", "No")
EndIf
测试了一下,当打开多个word文档时可以全部保存。
但Excel打开多文档后只保存第一个打开的。剩下后打开的都不会保存。
 楼主| 发表于 2010-6-13 19:03:40 | 显示全部楼层
另外追加一个问题,怎么判断一个word或一个Excel文件有没有保存?
说明白一点就是,如果是新建一个文档,那么就算不写任何内容也会出来一个空白文件。
但是有一种情况是直接启动word后也会有一个空白文档,如果直接保存会弹出对话框让你选择保存为XXX文件。
那么怎么判断这种情况存在呢?如果有这个情况存在的话就直接另存到桌面一个文件。
发表于 2010-6-13 19:56:27 | 显示全部楼层
_ExcelBookClose($oExcel, 1, 0) 
发表于 2010-6-14 12:14:20 | 显示全部楼层
呵呵学习一下。。
发表于 2010-6-14 17:28:26 | 显示全部楼层
本帖最后由 弹指即就 于 2010-6-14 17:32 编辑

是否存在application对象?
$application=objget('','word.application') ;or Excel.application
;查无此据
if not isobj($application) then exit

依次关闭
for $each in $application.documents
;未保存?
if Not $each.saved then   $each.save
$each.close()
next
....


;或许有多个 application 实例
while isobj(objget('','word.application'))
....
$application.quit()
wend


;新建文档与保存过的
$doc.funllname 有明显差别
 楼主| 发表于 2010-6-15 20:05:09 | 显示全部楼层
回复 9# lynfr8

测试不行啊。出错。而且没有关闭也没保存。
E:\AutoIt3\Include\Excel.au3 (396) : ==> ??????(?????).:
Local $fDisplayAlerts = $oExcel.Application.DisplayAlerts
Local $fDisplayAlerts = $oExcel.Application^ ERROR
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-22 04:17 , Processed in 0.090314 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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