Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Documents.Close et Quit en automation javascript

8 réponses
Avatar
smr78
Bonjour,
Je cherche à créer un document Word, à partir d'un programme html/javascript
exécuté sur un PC client équipé de Word 2000. Je me sers pour ce faire
d'instructions VBA transposées en javascript.

Je crée sous javascript une instance Word et j'ouvre (ou crée si n'existe
pas) le document filedocpath par le code suivant

try {
wordapp = GetObject("", "Word.Application");
}
catch(e) {
wordapp = new ActiveXObject("Word.Application");
}
try {
wordapp.Documents.Open(filedocpath);
}
catch(e){
createfile(filedocpath);
wordapp.Documents.Open(filedocpath);
}

Jusque là tout se passe bien, et je peux écrire dans le document et sauver
les modifs.
Le problème est que je les instructions "standards"
wordapp.Documents.Close()
wordapp.Quit()
pour fermer le document et quitter Word génèrent toutes deux des erreurs,
quelles soient isolées ou les deux dans cet ordre.
En cherchant sur le Web, j'ai trouvé une note dans la KB Microsoft

http://support.microsoft.com/default.aspx?scid=kb;en-us;315981
qui cite ce problème venant du fait que des événements Close et Quit ont le
même nom que les méthodes correspondantes.
Cependant, les solutions conseillées :
--------
Explicitly cast the object to the correct interface before you call the Quit
method. For example, you can use the following:
CType(oWordApp, Word._Application).Quit()

• Change the variable declaration to use the extended Class wrapper object
for the object. For example, instead of using Word.Application, change the
declaration to resemble the following:
Dim oWordApp As New Word.ApplicationClass()
----------
sont du code VBA pur et dur que je ne sais transposer en javascript.
J'ai essayé en vain :
wordapp = GetObject("", "Word._Application");

wordapp = new ActiveXObject("Word._Application");

J'ai essayé aussi diverses valeurs d'arguments optionnels des méthodes Close
et Quit. Nada.

Je n'ai pas le code d'erreur résultant des erreurs!
Merci d'avance pour toute suggestion ou solution.
Cordialement

8 réponses

Avatar
Anacoluthe
Bonjour !

'smr78' nous a écrit ...
Je cherche à créer un document Word, à partir d'un programme html/javascript
Le problème est que je les instructions "standards"
wordapp.Documents.Close()
wordapp.Quit()
pour fermer le document et quitter Word génèrent toutes deux des erreurs,
quelles soient isolées ou les deux dans cet ordre.
En cherchant sur le Web, j'ai trouvé une note dans la KB Microsoft
http://support.microsoft.com/default.aspx?scid=kb;en-us;315981
qui cite ce problème venant du fait que des événements Close et Quit ont le
même nom que les méthodes correspondantes.


Méthodes et événements ambigus : essayez peut-être en formulant
wordApp.Run("FileClose")
ou wordApp.Run("FileCloseAll")
WordApp.Run("FileExit")

Est-ce que ça 'passe' mieux ???

Anacoluthe
« L'ambiguïté est une richesse. »
- Jorge Luis BORGES

Avatar
smr78

Bonjour !

'smr78' nous a écrit ...
Je cherche à créer un document Word, à partir d'un programme html/javascript
Le problème est que je les instructions "standards"
wordapp.Documents.Close()
wordapp.Quit()
pour fermer le document et quitter Word génèrent toutes deux des erreurs,
quelles soient isolées ou les deux dans cet ordre.
En cherchant sur le Web, j'ai trouvé une note dans la KB Microsoft
http://support.microsoft.com/default.aspx?scid=kb;en-us;315981
qui cite ce problème venant du fait que des événements Close et Quit ont le
même nom que les méthodes correspondantes.


Méthodes et événements ambigus : essayez peut-être en formulant
wordApp.Run("FileClose")
ou wordApp.Run("FileCloseAll")
WordApp.Run("FileExit")

Est-ce que ça 'passe' mieux ???

Anacoluthe
« L'ambiguïté est une richesse. »
- Jorge Luis BORGES

Merci d'avoir répondu si vite.

Désolé, aucune des propositions ne "passe".
Je vais essayer, avec un debugger de script, de récupérer plus d'info sur
l'erreur;
J'ai essayé diverses combinaisons avec ou sans majuscule pour écrire
"FileClose" et "Run", mais je crois que ça n'a pas d'influence en automation?
Cordialement


Avatar
Youky
Hello,
A tester car je ne connais pas javascript
A partir de VB5 j'utilise ce code pour fermer Word,
Bonne chance
Youky
Dim AppWrd As Object
On Error Resume Next
Set AppWrd = GetObject(, "Word.Application")
AppWrd.Quit
Set AppWrd = Nothing


"smr78" a écrit dans le message de news:


Bonjour !

'smr78' nous a écrit ...
Je cherche à créer un document Word, à partir d'un programme
html/javascript



Le problème est que je les instructions "standards"
wordapp.Documents.Close()
wordapp.Quit()
pour fermer le document et quitter Word génèrent toutes deux des
erreurs,



quelles soient isolées ou les deux dans cet ordre.
En cherchant sur le Web, j'ai trouvé une note dans la KB Microsoft
http://support.microsoft.com/default.aspx?scid=kb;en-us;315981
qui cite ce problème venant du fait que des événements Close et Quit
ont le



même nom que les méthodes correspondantes.


Méthodes et événements ambigus : essayez peut-être en formulant
wordApp.Run("FileClose")
ou wordApp.Run("FileCloseAll")
WordApp.Run("FileExit")

Est-ce que ça 'passe' mieux ???

Anacoluthe
« L'ambiguïté est une richesse. »
- Jorge Luis BORGES

Merci d'avoir répondu si vite.

Désolé, aucune des propositions ne "passe".
Je vais essayer, avec un debugger de script, de récupérer plus d'info sur
l'erreur;
J'ai essayé diverses combinaisons avec ou sans majuscule pour écrire
"FileClose" et "Run", mais je crois que ça n'a pas d'influence en
automation?

Cordialement




Avatar
Anacoluthe
Bonjour !

'smr78' nous a écrit ...
Méthodes et événements ambigus : essayez peut-être en formulant
wordApp.Run("FileClose")
ou wordApp.Run("FileCloseAll")
WordApp.Run("FileExit")


Désolé, aucune des propositions ne "passe".
J'ai essayé diverses combinaisons avec ou sans majuscule pour écrire
"FileClose" et "Run", mais je crois que ça n'a pas d'influence en automation?


Dans un script d'automation en vbs, majuscules comme minuscules,
wordApp.Run("commande") ou wordApp.Run "Commande" marchent bien ...
Pourquoi pas en javascript ? Si vous êtes certain de votre syntaxe
voyez plutôt sur un forum javascript :-p

Anacoluthe
« L'ambiguïté est une richesse. »
- Jorge Luis BORGES


Avatar
Anacoluthe
Bonjour !

'Youky' nous a écrit ...
A partir de VB5 j'utilise ce code pour fermer Word,
AppWrd.Quit
Set AppWrd = Nothing


Oui en vbscript aussi ça marche très bien, mais il semblerait (?)
que javascript va chercher l'événement du même nom, pourtant
c'est le même serveur :-(

Anacoluthe
« L'ambiguïté est une richesse. »
- Jorge Luis BORGES

Avatar
smr78
Quelques infos en plus :
J'ai oublié(!) de dire que j'affiche aussi le document Word dans une Iframe
de ma page-programme html/javascript pour voir le résultat de mes actions. Or
si j'inhibe cet affichage, je n'ai plus d'erreur, les commandes Close et Quit
passent!
En fait, afficher le document dans une Iframe fait que Word est connecté à
deux demandes celle de Internet Explorer qui affiche le document Word, et
celle de l'objet ActiveX que j'ai créé pour manipuler le document Word.

En laissant les deux "instances" de Word (une seule est visible) et en
activant le debugger de script, j'obtiens deux sortes de messages d'erreur
pour l'instruction Close :
- Cette méthode ou propriété n'est pas disponible car ce document est dans
une autre application
- Cette méthode ou propriété n'est pas disponible car une fenêtre de
document n'est pas active.

Ceci confirme qu'il y a bien un problème de deux instances concurrentes de
Word.

Autre manip :
Si je lance Word avant mon programme, il n'y a pas d'erreur non plus. Cela
parce qu'alors mon programme crée un objet Word grâce à l'instruction
wordapp = GetObject("", "Word.Application")
et non avec
wordapp = new ActiveXObject("Word.Application")

En fait, en passant par GetObject, tout le monde se connecte à la même
instance de Word.
Il me reste donc à trouver, comment fermer une instance Word créée avec un
ActiveX, alors qu'une autre existe par ailleurs.
PS j'ai essayé d'utiliser
wordapp = GetObject(filedocpath)
pour lancer Word et ouvrir mon doc en même temps avec GetObject, mais cette
instruction échoue.
Merci encore


Bonjour !

'Youky' nous a écrit ...
A partir de VB5 j'utilise ce code pour fermer Word,
AppWrd.Quit
Set AppWrd = Nothing


Oui en vbscript aussi ça marche très bien, mais il semblerait (?)
que javascript va chercher l'événement du même nom, pourtant
c'est le même serveur :-(

Anacoluthe
« L'ambiguïté est une richesse. »
- Jorge Luis BORGES




Avatar
smr78
Ouf, j'ai trouvé la bonne séquence :
Il faut d'abord vider l'Iframe contenant le clone du document Word en
traitement, puis lancer l'instruction Quit sans passer par l'instruction
Close.

Par contre, nouvelle question, lors de l'instruction Quit, je n'ai pas de
message d'alerte demandant si l'on veut sauver les corrections, bien que
j'utilise Quit(-2)

-2 étant la valeur que j'ai trouvée pour la constante wdPromptToSaveChanges
(trouvé sur
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbawd11/html/wohowConstants_HV01049731.asp

wdDoNotSaveChanges 0
wdPromptToSaveChanges -2
wdSaveChanges -1 )




Quelques infos en plus :
J'ai oublié(!) de dire que j'affiche aussi le document Word dans une Iframe
de ma page-programme html/javascript pour voir le résultat de mes actions. Or
si j'inhibe cet affichage, je n'ai plus d'erreur, les commandes Close et Quit
passent!
En fait, afficher le document dans une Iframe fait que Word est connecté à
deux demandes celle de Internet Explorer qui affiche le document Word, et
celle de l'objet ActiveX que j'ai créé pour manipuler le document Word.

En laissant les deux "instances" de Word (une seule est visible) et en
activant le debugger de script, j'obtiens deux sortes de messages d'erreur
pour l'instruction Close :
- Cette méthode ou propriété n'est pas disponible car ce document est dans
une autre application
- Cette méthode ou propriété n'est pas disponible car une fenêtre de
document n'est pas active.

Ceci confirme qu'il y a bien un problème de deux instances concurrentes de
Word.

Autre manip :
Si je lance Word avant mon programme, il n'y a pas d'erreur non plus. Cela
parce qu'alors mon programme crée un objet Word grâce à l'instruction
wordapp = GetObject("", "Word.Application")
et non avec
wordapp = new ActiveXObject("Word.Application")

En fait, en passant par GetObject, tout le monde se connecte à la même
instance de Word.
Il me reste donc à trouver, comment fermer une instance Word créée avec un
ActiveX, alors qu'une autre existe par ailleurs.
PS j'ai essayé d'utiliser
wordapp = GetObject(filedocpath)
pour lancer Word et ouvrir mon doc en même temps avec GetObject, mais cette
instruction échoue.
Merci encore


Bonjour !

'Youky' nous a écrit ...
A partir de VB5 j'utilise ce code pour fermer Word,
AppWrd.Quit
Set AppWrd = Nothing


Oui en vbscript aussi ça marche très bien, mais il semblerait (?)
que javascript va chercher l'événement du même nom, pourtant
c'est le même serveur :-(

Anacoluthe
« L'ambiguïté est une richesse. »
- Jorge Luis BORGES






Avatar
ClémentMarcotte
Bonjour,

Je ne sais pas s'il y en a qui causent Javascript dans ce coin-là, mais tu
peux aussi essayer

news://msnews.microsoft.com/microsoft.public.fr.scripting


"smr78" a écrit dans le message de
news:
Ouf, j'ai trouvé la bonne séquence :
Il faut d'abord vider l'Iframe contenant le clone du document Word en
traitement, puis lancer l'instruction Quit sans passer par l'instruction
Close.

Par contre, nouvelle question, lors de l'instruction Quit, je n'ai pas de
message d'alerte demandant si l'on veut sauver les corrections, bien que
j'utilise Quit(-2)

-2 étant la valeur que j'ai trouvée pour la constante
wdPromptToSaveChanges

(trouvé sur

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbawd11/html/wohowConstants_HV01049731.asp


wdDoNotSaveChanges 0
wdPromptToSaveChanges -2
wdSaveChanges -1 )




Quelques infos en plus :
J'ai oublié(!) de dire que j'affiche aussi le document Word dans une
Iframe


de ma page-programme html/javascript pour voir le résultat de mes
actions. Or


si j'inhibe cet affichage, je n'ai plus d'erreur, les commandes Close et
Quit


passent!
En fait, afficher le document dans une Iframe fait que Word est connecté
à


deux demandes celle de Internet Explorer qui affiche le document Word,
et


celle de l'objet ActiveX que j'ai créé pour manipuler le document Word.

En laissant les deux "instances" de Word (une seule est visible) et en
activant le debugger de script, j'obtiens deux sortes de messages
d'erreur


pour l'instruction Close :
- Cette méthode ou propriété n'est pas disponible car ce document est
dans


une autre application
- Cette méthode ou propriété n'est pas disponible car une fenêtre de
document n'est pas active.

Ceci confirme qu'il y a bien un problème de deux instances concurrentes
de


Word.

Autre manip :
Si je lance Word avant mon programme, il n'y a pas d'erreur non plus.
Cela


parce qu'alors mon programme crée un objet Word grâce à l'instruction
wordapp = GetObject("", "Word.Application")
et non avec
wordapp = new ActiveXObject("Word.Application")

En fait, en passant par GetObject, tout le monde se connecte à la même
instance de Word.
Il me reste donc à trouver, comment fermer une instance Word créée avec
un


ActiveX, alors qu'une autre existe par ailleurs.
PS j'ai essayé d'utiliser
wordapp = GetObject(filedocpath)
pour lancer Word et ouvrir mon doc en même temps avec GetObject, mais
cette


instruction échoue.
Merci encore


Bonjour !

'Youky' nous a écrit ...
A partir de VB5 j'utilise ce code pour fermer Word,
AppWrd.Quit
Set AppWrd = Nothing


Oui en vbscript aussi ça marche très bien, mais il semblerait (?)
que javascript va chercher l'événement du même nom, pourtant
c'est le même serveur :-(

Anacoluthe
« L'ambiguïté est une richesse. »
- Jorge Luis BORGES