KLU3K 发表于 2010-6-12 00:25:26

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

本帖最后由 KLU3K 于 2010-6-13 19:06 编辑

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

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

另外追加一个问题,怎么判断一个word或一个Excel文件有没有保存?
说明白一点就是,如果是新建一个文档,那么就算不写任何内容也会出来一个空白文件。
但是有一种情况是直接启动word后也会有一个空白文档,如果直接保存会弹出对话框让你选择保存为XXX文件。
那么怎么判断这种情况存在呢?如果有这个情况存在的话就直接另存到桌面一个文件。

ferelove 发表于 2010-6-12 10:32:38

激活窗口,发送保存的快捷键,譬如Excel的Alt+F、Ctrl+S。未经实践。

masterpcc 发表于 2010-6-12 11:15:06

学习了-谢谢!!

KLU3K 发表于 2010-6-12 18:24:05

用热键不是太好。还有别的方法么?

lynfr8 发表于 2010-6-13 01:07:49

#include <Excel.au3>
$var = WinList()
For $i = 1 to $var
IfStringInStr($var[$i], "xls") And IsVisible($var[$i])Then
        _ExcelWriteCell(_ExcelBookAttach($var[$i], "Title"), "If you can read this, then Success!", 1, 1) ;写入单元格
        _ExcelBookClose(_ExcelBookAttach($var[$i], "Title"), 1, 0)
        MsgBox(0, "详细信息", "标题=" & $var[$i] & @LF & "句柄=" & $var[$i])
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最后一次就可以无错误执行,奇怪...

KLU3K 发表于 2010-6-13 18:53:55

Win7+Office2007测试无效。没任何反应。
我同时打开了1和2两个文件。没有保存也没关闭。也无任何报错。奇怪的是MsgBox也没有。

KLU3K 发表于 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打开多文档后只保存第一个打开的。剩下后打开的都不会保存。

KLU3K 发表于 2010-6-13 19:03:40

另外追加一个问题,怎么判断一个word或一个Excel文件有没有保存?
说明白一点就是,如果是新建一个文档,那么就算不写任何内容也会出来一个空白文件。
但是有一种情况是直接启动word后也会有一个空白文档,如果直接保存会弹出对话框让你选择保存为XXX文件。
那么怎么判断这种情况存在呢?如果有这个情况存在的话就直接另存到桌面一个文件。

lynfr8 发表于 2010-6-13 19:56:27

_ExcelBookClose($oExcel, 1, 0)

menfan1 发表于 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 有明显差别

KLU3K 发表于 2010-6-15 20:05:09

回复 9# lynfr8

测试不行啊。出错。而且没有关闭也没保存。
E:\AutoIt3\Include\Excel.au3 (396) : ==> ??????(?????).:
Local $fDisplayAlerts = $oExcel.Application.DisplayAlerts
Local $fDisplayAlerts = $oExcel.Application^ ERROR
页: [1]
查看完整版本: 如何同时后台保存已打开的多个word文档或Excel文档?