Jump to content
Sign in to follow this  
rg20

Windows 10 / Office SaveAs

Recommended Posts

Greetings all,

 

I have an app that runs fine in windows 7 but not windows 10.

issue : when entering the filename to save, it enters it into the saveAs dialog box, but Office still tries to save as "Diagram1" or "Presentation1"

 

$FileError = ""
        MonitorProcess2("VISIO")
        _DebugOut("Visio Done")

        MonitorProcess2("POWERPNT")

        _debugOut("Powerpoint Done")



        CloseSave($FileSavePathName, $SaveAsWindow)
        _DebugOut("Saved and closed Powerpoint")

        _VSO_DocumentSave($objVisioFile)
        while not _VSO_DocumentSaved($objVisioFile)
        WEnd
        _VSO_VisioClose($objVisioFile)
        _DebugOut("Saved and closed Visio")
    else
        _DebugOut("Filename Does not exist = "& $FilePathName)
    EndIf

the monitor process2 just makes sure the processes are complete before trying to save the files.

 

The closeSave function is below, but since I am opening the file with the proper name, this is not an issue

func CloseSave($SaveFile, $SaveAsWindow)
    _DebugOut("Save File ")
    _DebugOut($SaveFile)
    send("!{F4}")
    send ("!S")
    $title = WinGetTitle("[ACTIVE]")
    _DebugOut("WINDOW - current window is Powerpoint to enter filename " & $title)
    while not ($title = $SaveAsWindow)
        $title = WinGetTitle("[ACTIVE]")
    wend
    ControlSetText ($SaveAsWindow,"","[CLASS:Edit; INSTANCE:1]",$SaveFile)
    send ("!S")
        $title = WinGetTitle("[ACTIVE]")
    while not StringInStr($title,"Visio")
        $title = WinGetTitle("[ACTIVE]")
    wend
EndFunc

 

Edited by rg20

Share this post


Link to post
Share on other sites

You are correct, I was not calling that method as I had thought. (I have updated the original post to correct that)

 

I am using the controlsend.

 

The reason I use this is because Visio lauches a powerpoint app automatically, I seem to have an issue trying to get a handle on that application 

Edited by rg20

Share this post


Link to post
Share on other sites

Please have a look at my PowerPoint UDF -  it allows to connect to an already running PowerPoint instance/presentation.

 


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2020-09-05 - Version 1.5.1.1) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2020-06-27 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (NEW 2020-06-27 - Version 1.3.2.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (2019-12-03 - Version 1.5.1.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki, WebDriver - Wiki

 

Share this post


Link to post
Share on other sites

Thank you Water for your helpful advice,

 

I remvoed the closesave function and added the following

$oPPT =_PPT_Open()
      _PPT_PresentationAttach($oPPT,"partialtitle")
      _PPT_PresentationSaveAs($oPPT, "c:\a\test")
        _DebugOut("Saved and closed Powerpoint")

When I was done, I could not find a file in the directory C:\a.

I would expect to see test.ppt

 

Not sure if an object is being returned or I'm doing something wrong.

I modified the presentationAttach script to allow for partial title search as the number keeps increasing.

Func _PPT_PresentationAttach($sString, $sMode = Default)
    Local $oPresentation, $iCount = 0, $sCLSID_Presentation = "{91493444-5A91-11CF-8700-00AA0060263B}" ; Microsoft.Office.Interop.PowerPoint.PresentationClass
    If $sMode = Default Then $sMode = "FilePath"
    While True
        $oPresentation = ObjGet("", $sCLSID_Presentation, $iCount + 1)
        If @error Then Return SetError(1, @error, 0)
        Switch $sMode
            Case "filename"
                If $oPresentation.Name = $sString Then Return $oPresentation
            Case "filepath"
                If $oPresentation.FullName = $sString Then Return $oPresentation
            Case "title"
                If $oPresentation.Application.Caption = $sString Then Return $oPresentation
            Case "partialtitle"
                If StringInStr($oPresentation.Application.Caption,$sString) Then Return $oPresentation
            Case Else
                Return SetError(2, 0, 0)
        EndSwitch
        $iCount += 1
    WEnd
EndFunc   ;==>_PPT_PresentationAttach

 

Share this post


Link to post
Share on other sites

PresentationAttach and PresentationSaveAs require a presentation object. Hence it should be:

$oPPT =_PPT_Open()
$oPresentation = _PPT_PresentationAttach("text you are looking for in the title", "partialtitle")
_PPT_PresentationSaveAs($oPPT, $oPresentation, "c:\a\test")
_DebugOut("Saved and closed Powerpoint")

N.B: It is always a good idea to check @error after having calld a function.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2020-09-05 - Version 1.5.1.1) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2020-06-27 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (NEW 2020-06-27 - Version 1.3.2.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (2019-12-03 - Version 1.5.1.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki, WebDriver - Wiki

 

Share this post


Link to post
Share on other sites

Awesome start, but missed a few things and still have one issue

 

If you open the PPT without saving it first, it seems like the environment can find it, but the attach can't attach to it

 

I created a slide deck named "hey you" in my documents folder then opened Powerpoint without saving it, so the default name was Presentation1 - Microsoft Powerpoint so my path looks like this

Row|Col 0|Col 1|Col 2
[0]||Presentation1|
[1]||hey you.pptx|C:\Users\....\Documents
 

then using this code, I put the Powerpoint.au3 in my local directory for now

 

#include "Powerpoint.au3"
#include "Visio.au3"
#include <misc.au3>
#include <File.au3>
#include <Debug.au3>

$oPPT =_PPT_Open()
$Presentations = _PPT_PresentationList($oPPT)
_ArrayDisplay($Presentations, "Sorted tree")
$oPresentation = _PPT_PresentationAttach("Presentation","title", True)
_PPT_SlideAdd($oPresentation)
_PPT_PresentationSaveAs($oPresentation, "C:\a\test" )

$oPresentation = _PPT_PresentationAttach("hey you","title", True)
_PPT_SlideAdd($oPresentation)

_PPT_PresentationSaveAs($oPresentation, "C:\a\test2" )

the attach with the "Presentation" does not get a second slide or saved

The "hey you" presentation does and is saved to the indicated pat as expected.

any thoughts?

Share this post


Link to post
Share on other sites

Seems to be a bug in the latest UDF version in function _PPT_SlideAdd.
Will need to rethink the function :( 
I think Alpha 3 doesn's have this bug - if needed I can post this version here or in the download Forum.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2020-09-05 - Version 1.5.1.1) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2020-06-27 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (NEW 2020-06-27 - Version 1.3.2.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (2019-12-03 - Version 1.5.1.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki, WebDriver - Wiki

 

Share this post


Link to post
Share on other sites
On 6/16/2017 at 11:31 AM, water said:

 

Thanks for the update, I wasn't sure if I was going crazy.

 

I would love to have the new version for testing

Share this post


Link to post
Share on other sites

A newer/fixed Version (Alpha 6) isn't available yet. But I think Alpha 4 doesn's have this bug:

PowerPoint Alpha 4.zip


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2020-09-05 - Version 1.5.1.1) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2020-06-27 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (NEW 2020-06-27 - Version 1.3.2.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (2019-12-03 - Version 1.5.1.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki, WebDriver - Wiki

 

Share this post


Link to post
Share on other sites

I have tried this and experienced the same bug.  I think there is an issue with the attach when the file is not saved, IE no directory listed

 

Func _PPT_PresentationAttach($sString, $sMode = Default)
    Local $oPresentation, $iCount = 0, $sCLSID_Presentation = "{91493444-5A91-11CF-8700-00AA0060263B}" ; Microsoft.Office.Interop.PowerPoint.PresentationClass
    If $sMode = Default Then $sMode = "FilePath"
    While True
        $oPresentation = ObjGet("", $sCLSID_Presentation, $iCount + 1)
        If @error Then Return SetError(1, @error, 0)  <-------------------This is the line kicking back the error message
        Switch $sMode
            Case "filename"
                If $oPresentation.Name = $sString Then Return $oPresentation
            Case "filepath"
                If $oPresentation.FullName = $sString Then Return $oPresentation
            Case "title"
                If $oPresentation.Application.Caption = $sString Then Return $oPresentation
            Case Else
                Return SetError(2, 0, 0)
        EndSwitch
        $iCount += 1
    WEnd
EndFunc   ;==>_PPT_PresentationAttach

 

I get this 

Share this post


Link to post
Share on other sites

Use

MsgBox(0, "Presentation Name", $oPresentation.Name)
MsgBox(0, "Presentation FullName", $oPresentation.FullName)
MsgBox(0, "Presentation Caption", $oPresentation.Application.Caption)

to make sure you use the correct values for _PPT_PresentationAttach.
The line you marked is called when none of the presentations fits the query string.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2020-09-05 - Version 1.5.1.1) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2020-06-27 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (NEW 2020-06-27 - Version 1.3.2.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (2019-12-03 - Version 1.5.1.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki, WebDriver - Wiki

 

Share this post


Link to post
Share on other sites

use your PPT script and try the below script code

but before you run it, just open PowerPoint, you should get a new presentation named "Presentation 1 - Microsoft Powerpoint" but don't save it to a directory

you can even substitue the full presentation name.

 

Once it's saved, it will then recognize the file.

 

#include "Powerpoint.au3"
#include "Visio.au3"
#include <misc.au3>
#include <File.au3>
#include <Debug.au3>

$oPPT =_PPT_Open()
$Presentations = _PPT_PresentationList($oPPT)
_ArrayDisplay($Presentations, "Sorted tree")
$oPresentation = _PPT_PresentationAttach("Presentation","title", True)

If @error Then
    MsgBox($MB_SYSTEMMODAL, "PowerPoint UDF: _PPT_PresentationAttach Example", "'" & $oPresentation & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    _PPT_Close($oPPT)
    Exit
EndIf

adding your messages into the PPT includes shows

>"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "\\abbvienet.com\data\R&D\R478\Excel Clinical Schedule Scripts\ppttest.au3"    
"\\abbvienet.com\data\R&D\R478\Excel Clinical Schedule Scripts\Powerpoint.au3" (144) : ==> Variable must be of type "Object".:
ConsoleWrite("Presentation Name" & $oPresentation.Name & @CRLF)
ConsoleWrite("Presentation Name" & $oPresentation^ ERROR
>Exit code: 1    Time: 0.6098

 

Edited by rg20

Share this post


Link to post
Share on other sites

My test crashes when i try to attach to an unsaved presentation.
As soon as I save the presentation the script works without Problem.
Seems you can't connect to a presentation that hasn't been saved yet. This is true for Office 2010. My System will be upgraded today to Office 2016.

Will check if it works for Office 2016 and Word.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2020-09-05 - Version 1.5.1.1) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2020-06-27 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (NEW 2020-06-27 - Version 1.3.2.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (2019-12-03 - Version 1.5.1.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki, WebDriver - Wiki

 

Share this post


Link to post
Share on other sites

I tested with Excel and the result is the same: You can't connect to an unsaved workbook.

I think the workaround is to create the new presentation by using _PPT_PresentationNew.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2020-09-05 - Version 1.5.1.1) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2020-06-27 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (NEW 2020-06-27 - Version 1.3.2.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (2019-12-03 - Version 1.5.1.0) - Download - General Help & Support - Wiki

Tutorials:
ADO - Wiki, WebDriver - Wiki

 

Share this post


Link to post
Share on other sites
On 6/20/2017 at 1:58 AM, water said:

I tested with Excel and the result is the same: You can't connect to an unsaved workbook.

I think the workaround is to create the new presentation by using _PPT_PresentationNew.

I wish I had that option, I might have to do a keystroke temporary save, then update save and delete the temp

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Danyfirex
      Hello!!!  
      In the past I had problems adding an application as a default for an extension in Windows 10. (It was easy in windows 7 using Registry) But since Windows 8 It requires to do some steps more. I wrote a tool (in other programming language) months ago for handling it. But now I just want to share an AutoIt version.
       
      Check on GitHub.
       
       
      Saludos
    • By WilliamasKumeliukas
      Hi,
      I started this project alone in May 2020 as project in my spare time at work, I'm working for a IT compagny that's started opening their services to residential customers few months ago and now my position in the company kinda drifted in the doom and gloom world of repetitive tasks like: Reinstallation of Windows 10.
      The procedure is very repetitive and I started feeling like being a robot which is the main reason I started this project.
       
      ==============================FAQ==================================
      1. Q: Do you want this project to be accomplished with the usage of AutoIT ONLY or 3rd party tools / Scripts (BAT / CMD / VBS) ? A: No, if I cannot find a way using AutoIT to accomplish a task I will move to my Plan B which consist of automating an 3rd party tool to accomplish the affected task until a solution is found. 2. Q: What do I get from helping/collaborating in this project? A: I will personally take the responsability to mention you in the credits of this project. 3. Q: If I have more questions, can I ask? A: Certainly! feel free to ask any questions related to this project! 4. Q: What is the main goal of this project? A: Automating Windows 10 configuration without user interaction needed (as much as possible) ______________________________________________________________________________________________________________________________
      Current progression of the project (more might be added in future)
      « Blue = Info || Yellow = Unfinished/Untested || Purple = Could be better || Green = Done ||Red = Not Yet Started »
      *** Very early Stage ***
      Connect Network Attached Storage(NAS) (Tested & Working - AutoIT only)
      Install Adobe Reader DC, 7zip, Google Chrome (Tested & Working - using 3rd party tool)
      Change OEM Information (Tested & Working - contains both AutoIT version and CMD script)
      Disable ScreenSaver (Require testing AutoIT only)
      Change Computer Name (Require testing AutoIT only) 
      Change Default Browser (Work - using 3rd party tool)
      Change .pdf / .pdfxml from Edge to Adobe Reader DC (AutoIT only)
      Change Edge to Google Chrome as Default Browser (Tested & Working - using 3rd party tool)
      Windows Updates (Currently working on it - AutoIT only)
      Install Office 
      Activate Office (Tested on 2010 & Working - CMD Script)
      Pin to taskbar Excel, Outlook, Word, Chrome (Tested & Working - using 3rd party tool)
      GUI currently featuring the following options 
      - TreeView to check case of desired tasks
      -  Redirect ConsoleWrite with timestamp messages in richedit (errors shown in red text)
                 *** To Do ***
       - Read informations needed for tasks like: OEM, ComputerName, NAS user/password etc... from a file
       - ListView for Windows Updates
       - Probably more
       
      ***  If this project interest you, Reply here This will greatly help me to see if you'd like this project to become real  ***
      ______________________________________________________________________________________________________________________________
      2020.09.21 Update: Since this topic reached over 200+ views without a single interest shown by community, pm me and i'll share with you W10 Configurator script  
       
      Best Regards,
      ~WilliamasKumeliukas
    • By Jgladden
      Dan - thanks for all that you do - this stuff is great. 
      Hoping you can assist with an issue we are having now that we have moved to Windows 10/Server 2016. The Chrome interactions were working flawlessly until moving over. Now my code fails when attempting to create the session. As you can see, our Chrome install is not in a standard location but I have validated the path to the binary. I have attached some detail below including system info, console output and the chrome log detail. I have tried several recommendations that have seen in various forums but none have made a difference
      Any assistance you can give would be greatly appreciated. 
      Thanks in advance, 
      chrome_Details.txt
    • By poddex
      Hello everyone.
      I always try to work with old Windows 10 versions as much as possible because I know mane compatibility issues with Windows 10 upgrading. 
      But I couldn't do anything else (I got drivers problem), and nothing couldn't help me besides upgrading, so I upgraded from 1807 to 1903.
      And...get another problem 😃
      I use AutoitX library in external project like this.
      ObjectAutoIt=New COMObject("AutoItX3.Control");
      ObjectAutoIt.AutoItSetOption("WinTextMatchMode",2);
              While ObjectAutoit.WinExists("",WindowHeader) Cycle 
                  ObjectAutoIt.WinClose("",WindowHeader);
              EndCycle;
      After upgrade I get that this line code 
      While ObjectAutoit.WinExists("",WindowHeader)
      become extremely low - ~ 20 seconds even if 10 windows open. But before upgrade it takes 0.5 s for a max.
      And every time that this code line passes through  - it takes ~20s, (20.115, for example), not less, not more. Something pauses it to work.
      How can I diagnose, what is that?
      I tried reinstall whole AutoIt, but no results.
      Thanks to all.
    • By Jahar
      Hi All,
      Please help me on how to fetch date/time of last windows 10 system restore point using autoit? Basically its about querying the last restore point.
×
×
  • Create New...