Jump to content

Recommended Posts

I updated the UDF by Patric Pendelin to use the MemoryDLL UDF.

There are only two new functions: _SevenZip_Load & _SevenZip_Free

The first function must be called before using any other functions included in the UDF and the other should be called to free memory when the UDF is no longer needed!

The size of binary from the module was excessive so I used the ZLMA UDF to compress it. It will be decompressed at run time before its loaded into memory.

The only advantage of using this UDF is that it removes the need to included any DLLs in your script.

A lot of functions haven't been added yet! :(

For those that dare: The API for the 7-Zip32.dll module is included in the attachment.

These functions work in the same way you would you use the standalone 7za.exe executable so the Help.chm file applies to these functions aswell.

Thats it, Enjoy! ;)

The code below is a sneak peak at the actually UDF, meaning it dosen't work without the other includes and the embed binary. - Download the attachment. :idea:

#include-once
#include "MemoryDLL.au3"
#include "LZMA.au3"
Global $__7ZIPDLL = Default, $__7ZIPINIT = False

#cs ===============================================================================
    Name:       7-Zip.au3
    Version:    1.0
    Datum:      08.07.2008

    Author: Patric Pendelin eMail: <patric.pendelin (a) gmx.de>
    Modified By: Decipher

    Script Function:

     _SevenZip_Load()
     _SevenZip_Extract($s_Archive, $s_Out="", $s_Pass="", $szCmdLine="", $s_Overwrite="", $hwnd=0, $szOutput="NULL", $dwSize=0) Extracts files from an archive
     _SevenZip_Add($s_Archive, $s_Out = "", $s_Typ = "7z32", $i_Comp = 5, $s_Pass = "", $szCmdLine = "", $hwnd = 0, $szOutput = "NULL", $dwSize = 0) Add files to an archive
     _SevenZip_GetVersion() Get 7_zip32.dll Version
     _SevenZip_GetRunning()
     _SevenZip_CheckArchive($s_Archive, $i_iMode = 0)
     _SevenZip_GetArchiveType($s_Archive)
     _SevenZip_GetFileCount($s_Archive)
     _SevenZip_GetUDFVersion() Returns UDF version number
     _SevenZip_Free()
#ce ===============================================================================

Func _SevenZip_Load()
    If Not $__7ZIPINIT Then
        $__7ZIPDLL = MemoryDllOpen(__7ZIPBIN())
        $__7ZIPINIT = True
    EndIf
EndFunc

Func _SevenZip_Free()
    If $__7ZIPINIT Then
        MemoryDllClose($__7ZIPDLL)
        $__7ZIPINIT = False
        $__7ZIPDLL = Default
    EndIf
EndFunc

;===============================================================================
; Function Name:     _SevenZip_Extract
; Description:      Extracts files from an archive
;
; Parameter(s):     $s_Archive:     Fullpath to Archive-File
;                   $s_Out:         Specifies a destination directory where files are to be extracted. (Def. "")
;                   $s_Pass:        Specifies password. (Def. "")
;                   $szCmdLine:     Command Line Commands. (Def. "")
;                   $s_Overwrite:   Specifies the overwrite mode during extraction, to overwrite files already present on disk. (Def. "")
;                               -1: Overwrite All existing files without prompt.
;                               -2: Skip extracting of existing files.
;                               -3: aUto rename extracting file (for example, name.txt will be renamed to name_1.txt).
;                               -4: auto rename existing file (for example, name.txt will be renamed to name_1.txt).
;                   $hwnd:          The window handle of the application which calls 7-zip32.dll. (Def. 0)
;                   $szOutput:      The buffer because 7-zip32.dll returns the result. (Def. "NULL")
;                   $dwSize:        Größe des Puffers. When the result exceeds designated size, it is economized in this size.
;                                   If size is 1 or more, always NULL letter is added lastly.   (Def. 0)
;
; Syntax:            _SevenZip_Extract($s_Archive, $s_Out="", $s_Pass="", $szCmdLine="", $s_Overwrite="", $hwnd=0, $szOutput="NULL", $dwSize=0)
; Return Value(s):      On Success -Return 1
;                                   On Failure -@error
; Author(s):        Patric Pendelin <patric.pendelin (a) gmx.de>
;===============================================================================
Func  _SevenZip_Extract($s_Archive, $s_Out = "", $s_Pass = "", $szCmdLine = "", $s_Overwrite = "", $hwnd = 0, $szOutput = "NULL", $dwSize = 0)
    ; Set Output directory
    If $s_Out = "" Then
        Local $as_Res = StringSplit($s_Archive, "\")
        For $i = 1 To $as_Res[0] - 1
            $s_Out &= $as_Res[$i] & "\"
        Next
    EndIf
    ; (Overwrite mode) switch:
    If $s_Overwrite = 1 Then
        $s_Overwrite = "-aoa"; Overwrite All existing files without prompt.
    ElseIf $s_Overwrite = 2 Then
        $s_Overwrite = "-aos"; Skip extracting of existing files.
    ElseIf $s_Overwrite = 3 Then
        $s_Overwrite = "-aou"; Auto rename extracting file (for example, name.txt will be renamed to name_1.txt).
    ElseIf $s_Overwrite = 4 Then
        $s_Overwrite = "-aot"; Auto rename existing file (for example, name.txt will be renamed to name_1.txt).
    EndIf
    If $szCmdLine = "" Then $szCmdLine = ' x "' & $s_Archive & '" ' & $s_Overwrite & ' -o"' & $s_Out & '" -p"' & $s_Pass & '"'
    Local $aRet = MemoryDllCall($__7ZIPDLL, "int", "SevenZip", "hwnd", $hwnd, "str", $szCmdLine, "str", $szOutput, "int", $dwSize)
    Return SetError(@error, "", $aRet[0])
EndFunc   ;==> _SevenZip_Extract

;===============================================================================
; Function Name:     _SevenZip_Add
; Description:      Extracts files from an archive
;
; Parameter(s):     $s_Archive:     Fullpath to Archive-File
;                   $s_Out:         Specifies a destination directory where files are to be extracted. (Def. "")
;                   $s_Typ:         Specifies the type of archive.
;                   $i_Comp:        Sets level of compression. [0 | 1 | 3 | 5 | 7 | 9 ]
;                   $s_Pass:        Specifies password. (Def. "")
;                   $szCmdLine:     Command Line Commands. (Def. "")
;                   $hwnd:          The window handle of the application which calls 7-zip32.dll. (Def. 0)
;                   $szOutput:      The buffer because 7-zip32.dll returns the result. (Def. "NULL")
;                   $dwSize:        Größe des Puffers. When the result exceeds designated size, it is economized in this size.
;                                   If size is 1 or more, always NULL letter is added lastly.   (Def. 0)
;
; Syntax:            _SevenZip_Add($s_Archive, $s_Out = "", $s_Typ = "7z32", $i_Comp = 5, $s_Pass = "", $szCmdLine = "", $hwnd = 0, $szOutput = "NULL", $dwSize = 0)
; Return Value(s):      On Success -Return 1
;                                   On Failure -@error
; Author(s):        Patric Pendelin <patric.pendelin (a) gmx.de>
;===============================================================================
Func  _SevenZip_Add($s_Archive, $s_Out = "", $s_Typ = "7z32", $i_Comp = 5, $s_Pass = "", $szCmdLine = "", $hwnd = 0, $szOutput = "NULL", $dwSize = 0)
    If $szCmdLine = "" Then
        If $s_Pass = "" Then
            $szCmdLine = '-t' & $s_Typ & ' a "' & $s_Archive & '" "' & $s_Out & '" -mx=' & $i_Comp
        Else
            $szCmdLine = '-t' & $s_Typ & ' a "' & $s_Archive & '" "' & $s_Out & '" -p"' & $s_Pass & '" -mhe=on -mx=' & $i_Comp
        EndIf
    EndIf
    Local $aRet = MemoryDllCall($__7ZIPDLL, "int", "SevenZip", "hwnd", $hwnd, "str", $szCmdLine, "str", $szOutput, "int", $dwSize)
    Return SetError(@error, "", $aRet[0])
EndFunc   ;==> _SevenZip_Add

;===============================================================================
; Function Name:     _SevenZip_GetVersion
; Description:      The version of 7-zip32.dll is returned.
;
; Parameter(s):     None.
;
; Syntax:            _SevenZip_GetVersion()
; Return Value(s):      On Success -Return File Version
;                                   On Failure -@error
; Author(s):        Patric Pendelin <patric.pendelin (a) gmx.de>
;===============================================================================
Func  _SevenZip_GetVersion()
    Local $aRet = MemoryDllCall($__7ZIPDLL, "int", "SevenZipGetVersion")
    Return SetError(@error, "", $aRet[0])
EndFunc   ;==> _SevenZip_GetVersion

;===============================================================================
; Function Name:     _SevenZip_GetRunning
; Description:      Whether or not presently 7-zip32.dll while operating, you obtain.
;                   Application side before executing API which by all means accompanies file access such as compressing/thawing,
;                   it is necessary to check whether because of this feasibility.
;
; Parameter(s):     None.
;
; Syntax:            _SevenZip_GetRunning()
; Return Value(s):      On Success -Return 1(It is in the midst of executing.)
;                                   Return 0(Is not in the midst of executing, (feasibility).)
;                                   On Failure -@error
; Author(s):        Patric Pendelin <patric.pendelin (a) gmx.de>
;===============================================================================
Func  _SevenZip_GetRunning()
    Local $aRet = MemoryDllCall($__7ZIPDLL, "int", "SevenZipGetRunning")
    Return SetError(@error, "", $aRet[0])
EndFunc   ;==> _SevenZip_GetRunning

;===============================================================================
; Function Name:     _SevenZip_CheckArchive
; Description:      Whether or not presently 7-zip32.dll while operating, you obtain.
;                   As the archive file which the designated file supports
;                   It returns whether or not it is correct.
;
; Parameter(s):     $s_Archive:     Fullpath to Archive file
;
; Syntax:            _SevenZip_CheckArchive($s_Archive)
; Return Value(s):      On Success -Return 1 (At the time of correct archive file.)
;                                   Return 0 (When the file is illegitimate.)
;                                   On Failure -@error
; Author(s):        Patric Pendelin <patric.pendelin (a) gmx.de>
;===============================================================================
Func  _SevenZip_CheckArchive($s_Archive, $i_iMode = 0)
    Local $aRet = MemoryDllCall($__7ZIPDLL, "int", "SevenZipCheckArchive", "str", $s_Archive, "int", $i_iMode)
    Return SetError(@error, "", $aRet[0])
EndFunc   ;==> _SevenZip_CheckArchive

;===============================================================================
; Function Name:     _SevenZip_GetArchiveType
; Description:      Type of the archive file
;
; Parameter(s):     $s_Archive:     Fullpath to Archive file
;
; Syntax:            _SevenZip_GetArchiveType($s_Archive)
; Return Value(s):      On Success -Return 1 (ZIP type)
;                                   Return 2 (7z32 type)
;                                   On Failure -@error
; Author(s):        Patric Pendelin <patric.pendelin (a) gmx.de>
;===============================================================================
Func  _SevenZip_GetArchiveType($s_Archive)
    Local $aRet = MemoryDllCall($__7ZIPDLL, "int", "SevenZipGetArchiveType", "str", $s_Archive)
    Return SetError(@error, "", $aRet[0])
EndFunc   ;==> _SevenZip_GetArchiveType

;===============================================================================
; Function Name:     _SevenZip_GetFileCount
; Description:      Type of the archive file
;
; Parameter(s):     $s_Archive:     The number of files in the Archive file.
;
; Syntax:            _SevenZip_GetFileCount($s_Archive)
; Return Value(s):  On Success -Return Numer of files
;                   On Failure -@error 1:   Can´t opens a DLL file for use in MemoryDllCall.
;                               @error 2:   Error in MemoryDllCall
;
; Author(s):        Patric Pendelin <patric.pendelin (a) gmx.de>
;===============================================================================
Func  _SevenZip_GetFileCount($s_Archive)
    Local $aRet = MemoryDllCall($__7ZIPDLL, "int", "SevenZipGetFileCount", "str", $s_Archive)
    Return SetError(@error, "", $aRet[0])
EndFunc   ;==> _SevenZip_GetFileCount

#region ### BINARY ###
Func __7ZIPBIN()
        #cs
    Name:   7-ZIP32 BINARY Version 9.20.00.02
    Requirements:   Windows9x/Me/NT/200x/XP/Vista/7
    Author:     Akita Minoru ( Http://Akky.Xrea.Jp/support.Html )

Download the Library: 7-Zip-Library.7z

Basic Usage:

#include "7-Zip.au3"

_SevenZip_Load()

Dim $sCommandLine = "Accepts Switches and etc"
_SevenZip_Exec($sCommandLine) ; See the included 7-Zip.chm documentation

_SevenZip_Free()

Exit
Spoiler

censored.jpg

 

Link to post
Share on other sites
  • 1 month later...

Just a few questions... the _7zip_Exec that you reference in your example does not exist.  So I figured "ok I'll just use _7zip_Add" but when I was reading the documentation for it it says its for extracting files from the archive rather than creating an archive..... is this just a documentation error or am I crazy?

A great place to start Autoit 1-2-3

Link to post
Share on other sites
  • 5 years later...

@Decipher


Hello, may i ask someone to be that kind and provide example how to zip 2 files using this, im sure wonderfull work, that i just can't figure out how to use yet,
i got the attachements, and also got errors with basic example provided by the author, i figured out theres no :

 

_SevenZip_Exec

 

" function, but rather: "_SevenZip_Extract"

however i got errors :

"Return SetError(@error, "", $aRet[0])
Return SetError(@error, "", $aRet^ ERROR"

both when i use mentioned function, or "_SevenZip_CheckArchive"
for example:

 

#include "7-Zip.au3"

_SevenZip_Load()

_SevenZip_CheckArchive("C:\Users\24\Desktop\moto\7-Zip-Library.7z")
MsgBox(4096, "aret", $aRet) ; 
_SevenZip_Free()

Exit


i got LZMA.au3, memorydll.au3 in the folder as well as in the autoit3/include/ and 7-Zip.au3 in the folder

Can i ask for support please?
I just need to unzip .zip files, edit texts and zip again,

Edit:

ok screw it, for the posterity, this works like CHARM:
https://www.autoitscript.com/forum/topic/116565-zip-udf-zipfldrdll-library/?tab=comments#comment-813281


Best Regards!

 
Edited by ruskiem
notaone
Link to post
Share on other sites

Just as an FYI, the original poster of this UDF hasn't been here in 5 years.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to post
Share on other sites
  • 1 year later...

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
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By water
      I have started to rewrite the PowerPoint UDF similar to the Word, Excel and Outlook UDF. The new UDF will not be compatible with the existing one.
      I will add examples, documentation, a section in the wiki etc.
      So far the following functions have been coded - more are on the ToDo list.
      _PPT_Open: Open a connection to a running instance of PowerPoint or start a new one _PPT_Close: Close a PowerPoint instance _PPT_PresentationAttach: Attach to an already opened presentation _PPT_PresentationClose: Close a presentation _PPT_PresentationExport: Export one/multiple/all slides as PDF or XPS. _PPT_PresentationExportGraphic: Export one/multiple/all slides in a graphic format. _PPT_PresentationList: Returns a list of currently open presentations (added with version 1.0.0.0 2021-07-20) _PPT_PresentationNew: Create a new presentation _PPT_PresentationOpen: Open an existing presentation _PPT_Print: Print one/multiple/all slides of a presentation (added with version 1.0.0.0 2021-07-20) _PPT_PresentationSave: Save a presentation _PPT_PresentationSaveAs: Save a presentation to another location or with another type _PPT_ShapeDelete: Delete shape(s) (added with version 1.1.0.0) _PPT_SlideAdd: Add slide(s) to a presentation _PPT_SlideCopyMove: Copy, move, duplicate slide(s) _PPT_SlideDelete: Delete slide(s) _PPT_SlideShow: Show a presentation _PPT_TextFindReplace: Find & replace text throughout entire PowerPoint presentation (added with version 1.0.0.0 2021-07-20) Which functions do you want me to add to the UDF?
      ToDo list:
      create slide (JLogan3o13) - Done: _PPT_SlideAdd Apply template to slide (JLogan3o13) - Done: _PPT_SlideAdd Apply theme to slide (JLogan3o13) Cut/Copy/Duplicate/Move/Delete slide(s) (JLogan3o13) - Done: _PPT_SlideCopyMove, _PPT_SlideDelete Export slides (JLogan3o13) - Done: _PPT_PresentationExport Cut/Copy/Duplicate/Move/Delete shape(s) (JLogan3o13): Partially done : _PPT_ShapeDelete (added with version 1.1.0.0) ApplyAnimation, Select, SetDefaultProperties, and zOrder for shape(s) (JLogan3o13) Searching and replacing text (pcjunki) - Done: _PPT_TextFindReplace (added with version 1.0.0.0 2021-07-20) Export slides in a graphic format (JPG, GIF, PNG ...) (UEZ) - Done: _PPT_PresentationExportGraphic The UDF can be downloaded from the download forum.
       
    • By Hermes
      I have Index.html where it contains a frame with a source "frame1.html". I can select/highlight elements in index.html but unable to select/highlight elements inside the frame with the src "frame1.html", the autoit output is throwing error:
      __WD_Post: URL=HTTP://127.0.0.1:9515/session/2143396006437be4005db3b84acc1496/element/8be1c3c4-5bb1-42b1-8cde-7954765cbc61/element; $sData={"using":"css selector","value":"frameset:nth-of-type(1)"} __WD_Post: StatusCode=404; ResponseText={"value":{"error":"no such element","message":"no such element: Unable to locate element: {\"method\... __WD_Post ==> No match: {"value":{"error":"no such element","message":"no such element: Unable to locate element: {\"method\":\"css selector\",\"selector\":\"frameset:nth-of-type(1)\"}\n (Session info: chrome=90.0.4430.212)","stacktrace":"Backtrace:\n\tOrdinal0 [0x00FCE7D3+124883]\n\tOrdinal0 [0x00FCE7B1+124849]\n\tGetHandleVerifier [0x01218688+193832]\n\tGetHandleVerifier [0x0123C478+340760]\n\tGetHandleVerifier [0x012361F1+315537]\n\tGetHandleVerifier [0x012516BA+427354]\n\tGetHandleVerifier [0x01236176+315414]\n\tGetHandleVerifier [0x0125174A+427498]\n\tGetHandleVerifier [0x0125D6EB+476555]\n\tGetHandleVerifier [0x0125154B+426987]\n\tGetHandleVerifier [0x01234FFD+310941]\n\tGetHandleVerifier [0x01235D8E+314414]\n\tGetHandleVerifier [0x01235D19+314297]\n\tGetHandleVerifier [0x012F31EC+1089676]\n\tGetHandleVerifier [0x012F17C9+1082985]\n\tGetHandleVerifier [0x012F13A3+1081923]\n\tGetHandleVerifier [0x013ED9FD+2115741]\n\tOrdinal0 [0x0111B82E+1488942]\n\tOrdinal0 [0x010B5A7D+1071741]\n\tOrdinal0 [0x010B559B+1070491]\n\tOrdinal0 [0x010B54B1+1070257]\n\tOrdinal0 [0x010EFF53+1310547]\n\tBaseThreadInitThunk [0x770662C4+36]\n\tRtlSubscribeWnfStateChangeNotification [0x776B1B69+1081]\n\tRtlSubscribeWnfStateChangeNotification [0x776B1B34+1028]\n"}} Auto IT Script:
      #Include "wd_core.au3" #Include "wd_helper.au3" Local $sDesiredCapabilities, $sSession SetupChrome() _WD_Startup() $sSession = _WD_CreateSession($sDesiredCapabilities) _WD_Navigate($sSession, 'index.html') _WD_LoadWait($sSession) Local $index = _WD_FindElement($sSession, $_WD_LOCATOR_ByCSSSelector, "frameset:nth-of-type(1)") Local $index1 = _WD_FindElement($sSession, $_WD_LOCATOR_ByCSSSelector, "frameset:nth-of-type(1)", $index) Local $index2 = _WD_FindElement($sSession, $_WD_LOCATOR_ByCSSSelector, "frame:nth-of-type(1)", $index1) Local $index3 = _WD_FindElement($sSession, $_WD_LOCATOR_ByCSSSelector, "frameset:nth-of-type(1)", $index2) _WD_HighlightElement($sSession, $index2, 1) _WD_HighlightElement($sSession, $index3, 1) _WD_Shutdown() Func SetupChrome() _WD_Option('Driver', 'chromedriver.exe') _WD_Option('Port', 9515) _WD_Option('DriverParams', '--log-path="' & @ScriptDir & '\chrome.log"') $sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"goog:chromeOptions": {"w3c": true, "args":["start-maximized","disable-infobars"]}}}}' EndFunc ;==>SetupChrome  

      frame1.html index.html
    • By Hermes
      Hi, sometimes when I run my script in GUI (SciTe Editor) or as an executable file, the chrome driver launches but the chrome browser does not but when I re-run the script again - chrome driver launches and so does the browser. Here is the error that I'm getting:
      __WD_Post: StatusCode=0; ResponseText=WinHTTP request timed out before Webdriver... __WD_Post ==> Send / Recv error: WinHTTP request timed out before Webdriver _WD_CreateSession: WinHTTP request timed out before Webdriver _WD_CreateSession ==> Webdriver Exception: HTTP status = 0 Just wondering if there's a way to re-launch both the driver and browser without having to rerun the script/executable.
       
       
    • By Hermes
      Hello, the script below will read column A from an excel file - and if a value matches in the browser, it will click the corresponding link and click on a specific button to paste the data, then writes "Completed" in Column B. It will continue to read from the excel file and do the same thing for all the remaining rows.
      #Include "Chrome.au3" #Include "wd_core.au3" #Include "wd_helper.au3" #Include "WinHttp.au3" #include <MsgBoxConstants.au3> #include <File.au3> #include <IE.au3> #include <Array.au3> #include <INet.au3> #include <AutoItConstants.au3> #include <WinAPIFiles.au3> #include <GDIPlus.au3> #include <Excel.au3> #Include "WinHttp.au3" #Include "_HtmlTable2Array.au3" Local $sDesiredCapabilities, $sSession SetupChrome() _WD_Startup() $sSession = _WD_CreateSession($sDesiredCapabilities) _WD_LoadWait($sSession) _WD_Navigate($sSession, "table1.html") _WD_LoadWait($sSession) _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, "//table[@class='main']") Local $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//table[@class='main']") ;ConsoleWrite ("mat-table " & $sElement & @CRLF) Local $aArray1 = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, ".//td[contains(@class,'data')]", $sElement, True) sleep(1000) For $i = 0 to UBound($aArray1) - 1 $aArray1[$i] = _WD_ElementAction($sSession, $aArray1[$i], 'text') Next ;_ArrayDisplay($aArray1) ;Email variables $SmtpServer = "" ; address for the smtp-server to use - REQUIRED $FromName = "Hermes" ; name from who the email was sent $FromAddress = "sender@gmail.com" ; address from where the mail should come $ToAddress = "recipient@gmail.com" ; destination address of the email - REQUIRED, use commas (,) to add more email addresses $Subject = "File not found" ; subject from the email - can be anything you want it to be $Body = "File not found!" ; the messagebody from the mail - can be left blank but then you get a blank mail $AttachFiles = "" ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed $CcAddress = "" ; address for cc - leave blank if not needed $BccAddress = "" ; address for bcc - leave blank if not needed $Importance = "High" ; Send message priority: "High", "Normal", "Low" $Username = "" ; username for the account used from where the mail gets sent - REQUIRED $Password = "" ; password for the account used from where the mail gets sent - REQUIRED $IPPort = 25 ; port used for sending the mail $ssl = 0 ; enables/disables secure socket layer sending - put to 1 if using httpS $tls = 0 ; enables/disables TLS when required Local $oAppl = _Excel_Open() Local $sWorkbook = "c:\test.xlsx" Local $oWorkbook = _Excel_BookOpen($oAppl, $sWorkbook) ;open excel and pass both parameters If FileExists($sWorkbook) Then ;Check if the file exist. Local $oAppl = _Excel_Open() Local $sWorkbook = "c:\test.xlsx" Local $oWorkbook = _Excel_BookOpen($oAppl, $sWorkbook) ;open excel and pass both parameters Local $aArray2 = _Excel_RangeRead($oWorkbook,Default,$oWorkbook.ActiveSheet.Usedrange.Columns("A:A")) Local $iIdx Local $Skipline = 0 ;0==> first line Do Local $temprf For $i = 0 To UBound($aArray2) - 1 $temprf &= $aArray2[$i] _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, ".//a[contains(@class,'edit') and contains(text(),'Edit')]") Local $aElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, ".//a[contains(@class,'edit') and contains(text(),'Edit')]", $sElement, True) $iIdx = _ArraySearch($aArray1, $aArray2[$i]) If @error Then ContinueLoop _WD_ElementAction($sSession, $aElement[$iIdx], 'click') If $i < $Skipline Then ContinueLoop $oRange = $oWorkbook.ActiveSheet.Range("B" & $i + 1 & ":XFD" & $i + 1) _Excel_RangeCopyPaste($oWorkbook.Activesheet, $oRange) ;Paste Local $oTest4 = _WD_FindElement($sSession, $_WD_LOCATOR_ByCSSSelector, "pastebutton") _WD_ElementAction($sSession, $oTest4, 'click') Sleep(1000) ;Save Button Local $save3 = _WD_FindElement($sSession, $_WD_LOCATOR_ByCSSSelector, "button.button") _WD_ElementAction($sSession, $save3, 'click') _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "Completed", "B" & $i+1) sleep(1000) Next Until (Not @error) _Excel_Close($oWorkbook) Else _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl, $tls) Exit EndIf _WD_LoadWait($sSession) ;Attaching files to emails Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0, $tls = 0) Local $objEmail = ObjCreate("CDO.Message") $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>' $objEmail.To = $s_ToAddress Local $i_Error = 0 Local $i_Error_desciption = "" If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress $objEmail.Subject = $s_Subject If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then $objEmail.HTMLBody = $as_Body Else $objEmail.Textbody = $as_Body & @CRLF EndIf $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer If Number($IPPort) = 0 then $IPPort = 25 $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort ;Authenticated SMTP If $s_Username <> "" Then $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password EndIf ; Set security params If $ssl Then $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True If $tls Then $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendtls") = True ;Update settings $objEmail.Configuration.Fields.Update ; Set Email Importance Switch $s_Importance Case "High" $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High" Case "Normal" $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal" Case "Low" $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low" EndSwitch $objEmail.Fields.Update ; Sent the Message $objEmail.Send $objEmail="" EndFunc ;==>_INetSmtpMailCom Local $aDir = _FileListToArrayRec(@TempDir, "scoped_dir*;chrome_*", $FLTAR_FOLDERS, $FLTAR_NORECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH) Sleep(2000) For $i = 1 To $aDir[0] DirRemove($aDir[$i], $DIR_REMOVE) Next _WD_LoadWait($sSession) _WD_Shutdown() Func SetupChrome() _WD_Option('Driver', 'chromedriver.exe') _WD_Option('Port', 9515) _WD_Option('DriverParams', '--log-path="' & @ScriptDir & '\chrome.log"') $sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"goog:chromeOptions": {"w3c": true, "args":["start-maximized","disable-infobars"]}}}}' EndFunc ;==>SetupChrome If the excel file doesn't exists in the folder, it will send an email to a specific recipient.
      What i am trying figure out now is if the excel crashes while the script/loop is running, I want to relaunch the excel file continue to the last row before the excel crashed. So if the value of column B is not marked as "completed", it should continue from that row
      Appreciate any help that I can get to achieve this.
      table1.html test.xlsx
    • By robertocm
      change linked image paths in excel 2007 Open XML Files with AutoIt and 7-zip:
      #include <File.au3> #include <WinAPIFiles.au3> ;Required 7-zip Global $Path7z = @ProgramFilesDir & "\7-Zip" If Not FileExists($Path7z & "\7z.exe") Then MsgBox(16, "", "7z.exe not found in path " & $Path7z) Exit EndIf Global $bFileOpen Global $sFileRead ;Global $sOldImg = "C:\Users\MyUserName\Documents\MyImageFolder" ;Global $sNewImg = "C:\Users\ANOTHERUSERNAME\Documents\AnotherImageFolder" Global $sOldImg = "C:\Users\MyUserName\Documents\MyImageFolder\My%20Image1.png" Global $sNewImg = "C:\Users\ANOTHERUSERNAME\Documents\AnotherImageFolder\My%20Image1.png" Global $sFileSelectFolder = FileSelectFolder("Directory to change excel image paths", "") Global $sTempDir = @ScriptDir & "\TempDir" Global $sFileCoreXml = $sTempDir & "\docProps\core.xml" If FileExists($sTempDir) Then DirRemove($sTempDir, $DIR_REMOVE) ;Look for excel files in selected directory and subdirectories Global $aFileList = _FileListToArrayRec($sFileSelectFolder, "*.xls*", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH) If Not @error Then For $i = 1 To $aFileList[0] ;Discard some kind of temp files (locked files from antivirus?) If StringLeft($aFileList[$i], 1) = "~" Then ContinueLoop $bFileOpen = _WinAPI_FileInUse($aFileList[$i]) If $bFileOpen = 0 Then ;use x command to keep the folder stucture, -aoa Overwrite All existing files without prompt, use -r to unzip the subfolders from the zip file RunWait('"' & $Path7z & '\7z.exe" x -aoa -r -y "' & $aFileList[$i] & '" -o"' & $sTempDir & '"', $Path7z, @SW_HIDE) If FileExists($sFileCoreXml) Then $sFileRead = FileRead($sFileCoreXml) If __ReplaceImagePaths($sTempDir, $sOldImg, $sNewImg) = 1 Then Consolewrite("--> Image path replaced in file: " & $aFileList[$i] & @CRLF) EndIf ;Help File 7-zip.chm 'Switch can be used in any place in command line' RunWait('"' & $Path7z & '\7z.exe" a -r -tzip -y "' & $aFileList[$i] & '" "' & $sTempDir & '\*"', $Path7z, @SW_HIDE) Else If FileExists($sTempDir & "\EncryptedPackage") Then Consolewrite("Error password protected file: " & $aFileList[$i] & @CRLF) EndIf DirRemove($sTempDir, $DIR_REMOVE) Else Consolewrite("Error Locked file: " & $aFileList[$i] & @CRLF) EndIf Next Else MsgBox(16, "Error", "No excel files were found in the folder") EndIf Func __ReplaceImagePaths($sTempDir, $sFind, $sReplace) ;List all files with .xml.rels extension in the directory \xl\drawings\_rels Local $aFileListDrw = _FileListToArray($sTempDir & "\xl\drawings\_rels", "*.xml.rels", 1, True) If @error = 1 Then ;MsgBox (0, "", "Path was invalid") SplashTextOn("Title", "Path was invalid", -1, -1, -1, -1, 1, "", 24) Sleep(2000) SplashOff() Exit EndIf If @error = 4 Then ;MsgBox (0, "No files", "No files were found") SplashTextOn("Title", "No files were found", -1, -1, -1, -1, 1, "", 24) Sleep(2000) SplashOff() Exit EndIf Local $iRetval ;Loop through the array For $i = 1 To $aFileListDrw[0] $iRetval = _ReplaceStringInFile($aFileListDrw[$i], $sFind, $sReplace) Next If Not $iRetval = -1 Then Return 1 EndFunc  
      Some references:
      https://stackoverflow.com/questions/37145369/change-path-to-picture-links-in-excel http://www.jkp-ads.com/Articles/Excel2007FileFormat.asp EDITED:
      Note: it seems that if User Account Control (UAC) is enabled then 7zip is unable to overwrite the destination file (using the same name).
      In this case, a possible solution would be to rename the original excel file before (see _PathSplit in help file).
      In my case i prefer just to disable UAC
×
×
  • Create New...