[Résolu][ActiveX][Javascript][Word]Comment effectuer divers traitements sur word via javascript

Je suis sur un projet où je dois développer une fusion automatique d’un template word. Je ne peux pas faire autrement que du Javascript.
L’idée de la fusion étant de charger sur Word mon template .doc, puis de dupliquer son contenu (page) X fois.
Au final, je dois obtenir un doc Word de X pages où chaque page aura le même contenu.

Le problème que je rencontre, c’est que je ne sais pas:

  • sélectionner l’intégralité du template
  • la copier en mémoire et l’insérer dans une nouvelle page

J’arrive à générer une nouvelle page MAIS, la page vierge se situe avant la page du template. Or je le veux après.
J’ai testé la méthode Merge pensant que ça allait répondre à mon besoin. Ce n’est pas le cas.

J’ai beau chercher sur MSDN, j’ai bien les méthodes mais je ne sais pas trop comment les utiliser sachant que les samples sont pour VB et C# principalement. La plupart du temps quand j’appelle lesdites méthodes, j’ai droit à un undefined (ex: wordApps.Selection.Copy(), wordApps.Range(start, end).Select(), …).
Et Visual Studio plante méchamment dès que je vois voir toutes les méthodes/propriétés que me propose ma variable wordApps.

Voici, un morceau de code javascript (la partie problématique se trouve dans la méthode Insert ci-dessous):

[code]function Word()
{
var wordObject;
var wordText;
var wordApps = new ActiveXObject(‘Word.Application’);

var wdDoNotSaveChanges = 0;
var wdPromptToSaveChanges = 1;
var wdSaveChanges = 2;

var word = this;

word.Open = function(filename) { 								
	if(wordApps != null)
	{
		wordApps.Visible = false;
		wordObject = wordApps.Documents.Open(filename);
		wordText = wordObject.Content;											
	}
}

	word.Merge = function(filename) {
	if (wordObject != null) {
		wordObject.Merge(filename);
	}
}

word.Insert = function(filename) {
	try {
		var wdCollapseEnd = 0;
		//wordApps.Selection.InsertNewPage();
		//wordApps.Selection.InsertFile(filename);
		wordApps.Selection.Collapse(wdCollapseEnd);
		wordApps.Range.SetRange(wordText.Start, wordText.End).Select();
		//wordObject.Range(wordText.Start, wordText.End).Select();
		//wordApps.Selection.SetRange(wordText.Start, wordText.End).Select();
		//wordApps.Selection.Select();
		wordApps.Range.InsertBreak();
		wordApps.Range.Copy();
		wordApps.Range.Past();
	}
	catch (e) {
		word.Close();
	}
}[/code]

J’espère que vous n’êtes pas perdu.

Bon, j’ai trouvé ni plus ni moins la solution permettant de copier le contenu d’un document word et de l’insérer dans une nouvelle page (cf le code ci-dessous).

word.Insert = function(filename) { try { wordObject.Select(); // Sélectionne tout le contenu du document wordApps.Selection.Copy(); // Copie en mémoire le contenu sélectionné wordApps.Selection.InsertNewPage(); // Crée une nouvelle page vierge wordApps.Selection.Paste(); // Colle le contenu copié } catch (e) { } }

Par contre, je ne sais pas comment faire pour sélectionner le contenu d’une page spécifique. Si vous avez une idée de quel méthode je dois utiliser, je serai bien content.

Edit: Sinon, si vous auriez une documentation complète sur l’utilisation de l’ActiveXObject sur Microsoft Word, je ne suis pas contre si vous n’avez pas la solution à ma 1e requête. C’est un peu le bordel sur msdn (ou je cherche très mal).

Bon, je me réponds, j’ai trouvé la solution bien que je la trouve pas top.
L’implémentation des différentes méthodes dans ma pseudo classe Word

[code] word.SelectLastPage = function(pagenumber) {
wordApps.Selection.GoTo(wdGoToPage, wdGoToAbsolute, pagenumber);
wordApps.Selection.EndOf(6, wdExtend);
}

word.SelectAllContents = function() {
	wordApps.Selection.Document.Select();
}

word.CopySelection = function() {
	wordApps.Selection.Copy();
}
word.PasteContentIntoNewPage = function() {
	wordApps.Selection.Collapse(0); // positionner le curseur à la fin du doc
	wordApps.Selection.InsertBreak();
	wordApps.Selection.Paste();
}[/code]

Le code pour la fusion, toussa:

// -- On copie en mémoire le Template modifié word_app.SelectAllContents(); word_app.CopySelection(); for(index=0; index< dimension; index++) { word_app.SelectLastPage(index+1); // -- Si != de dernière page, créer une page contenant le template if(index < dimension-1) { word_app.PasteContentIntoNewPage(); } }