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

Signet Word Excel

3 réponses
Avatar
laurent.spahlholz
Bonjour,

Je mets en place un site Web en ASP.NET/C#. Pour celui-ci, je dois
g=E9n=E9rer un document word auquel j'ai ajout=E9 des signets afin de les
traiter dans mon code. Jusque l=E0 tout fonctionne.

Mon probl=E8me est que dans mon fichier word, j'ai un tableau excel
incorpor=E9 et j'aimerais bien pouvoir ajouter =E9galement des valeurs
dedans.

Est ce que c'est possible? Si oui comment le coder?

Voici pour l'instant mon code:

Microsoft.Office.Interop.Word.Application msWord =3D new
Microsoft.Office.Interop.Word.Application();
msWord.Visible =3D true; // Cette variable permet d'ouvrir le document
Word cr=E9=E9
Microsoft.Office.Interop.Word._Document nvDoc;
object missing =3D System.Reflection.Missing.Value;

/* Emplacement du template */
object templateName =3D @"C:\Inetpub\wwwroot\CRA dev\TemplateWord
\Facture.dot";

/* Cr=E9ation du document */
nvDoc =3D msWord.Documents.Add(ref templateName, ref missing, ref
missing,
ref missing);

/* D=E9finition des signets */
FacturationRegie maFactureForfait =3D new FacturationRegie();
maFactureForfait.SelectFacture(this.Key.Text, "numfacture");

object fileName =3D @"C:\Inetpub\wwwroot\CRA dev\TemplateWord\Mon
nouveau document.doc";
// Sauver le document
nvDoc.SaveAs(ref fileName, ref missing, ref missing, ref missing,
ref missing,
ref missing, ref missing, ref
missing, ref missing, ref missing,
ref missing, ref missing, ref
missing, ref missing, ref missing,
ref missing);

3 réponses

Avatar
Jean-Guy Marcil
was telling us:
nous racontait que :

Bonjour,

Je mets en place un site Web en ASP.NET/C#. Pour celui-ci, je dois
générer un document word auquel j'ai ajouté des signets afin de les
traiter dans mon code. Jusque là tout fonctionne.

Mon problème est que dans mon fichier word, j'ai un tableau excel
incorporé et j'aimerais bien pouvoir ajouter également des valeurs
dedans.

Est ce que c'est possible? Si oui comment le coder?

Voici pour l'instant mon code:

Microsoft.Office.Interop.Word.Application msWord = new
Microsoft.Office.Interop.Word.Application();
msWord.Visible = true; // Cette variable permet d'ouvrir le document
Word créé
Microsoft.Office.Interop.Word._Document nvDoc;
object missing = System.Reflection.Missing.Value;

/* Emplacement du template */
object templateName = @"C:InetpubwwwrootCRA devTemplateWord
Facture.dot";

/* Création du document */
nvDoc = msWord.Documents.Add(ref templateName, ref missing, ref
missing,
ref missing);

/* Définition des signets */
FacturationRegie maFactureForfait = new FacturationRegie();
maFactureForfait.SelectFacture(this.Key.Text, "numfacture");

object fileName = @"C:InetpubwwwrootCRA devTemplateWordMon
nouveau document.doc";
// Sauver le document
nvDoc.SaveAs(ref fileName, ref missing, ref missing, ref missing,
ref missing,
ref missing, ref missing, ref
missing, ref missing, ref missing,
ref missing, ref missing, ref
missing, ref missing, ref missing,
ref missing);


Je ne peux pas répondre en C#, mais voici trois petites Sub VBA qui
manipulent des objets Excel.
Il faut aussi savoir que le code est différent selon le type d'objet ("en
ligne" ou "flottant").

Le SendKeys est un peu barbare, mais je ne vois pas d'autres moyen de
déactiver l'objet...

'_______________________________________
Option Explicit
'_______________________________________
Sub ModifierToutesInlinshapeExcel()

Dim Shp As InlineShape
Dim Doc As Document
Dim objEXL As Object
Dim rgeDebut As Range

Set Doc = ActiveDocument
Set rgeDebut = Selection.Range

For Each Shp In Doc.InlineShapes
If Shp.Type = wdInlineShapeEmbeddedOLEObject Then
If Shp.OLEFormat.ProgID = "Excel.Sheet.8" Then
Shp.OLEFormat.Activate
Set objEXL = Shp.OLEFormat.Object
With objEXL.ActiveSheet
.Cells(1, 1).Value = "Nouveau Texte"
End With
SendKeys "{ESC}"
End If
End If
Next Shp

rgeDebut.Select

End Sub
'_______________________________________

'_______________________________________
Sub ModifierToutesShapeExcel()

Dim Shp As Shape
Dim Doc As Document
Dim objEXL As Object
Dim rgeDebut As Range

Set Doc = ActiveDocument
Set rgeDebut = Selection.Range

For Each Shp In Doc.Shapes
If Shp.Type = msoEmbeddedOLEObject Then
If Shp.OLEFormat.ProgID = "Excel.Sheet.8" Then
Shp.OLEFormat.Activate
Set objEXL = Shp.OLEFormat.Object
With objEXL.ActiveSheet
.Cells(1, 1).Value = "Texte"
End With
SendKeys "{ESC}"
End If
End If
Next Shp

rgeDebut.Select

End Sub
'_______________________________________

'_______________________________________
Sub ModifierSpecifiqueInlineShapeExcel()

Dim Shp As InlineShape
Dim Doc As Document
Dim objEXL As Object
Dim rgeDebut As Range

Set Doc = ActiveDocument
Set rgeDebut = Selection.Range

Set Shp = Doc.InlineShapes(1)

Shp.OLEFormat.Activate
Set objEXL = Shp.OLEFormat.Object
With objEXL.ActiveSheet
.Cells(1, 1).Value = "Texte Unique"
End With
SendKeys "{ESC}"

rgeDebut.Select

End Sub
'_______________________________________

--

Salut!
_______________________________________
Jean-Guy Marcil - Word MVP

Word MVP site: http://www.word.mvps.org

Avatar
carriere_59
Object objEXL;
Microsoft.Office.Interop.Excel.Range rgeDebut;
foreach (Microsoft.Office.Interop.Word.InlineShape Shp in
nvDoc.InlineShapes)
{
if (Shp.OLEFormat.ProgID == "Excel.Sheet.8")
{
Shp.OLEFormat.Activate();
objEXL = Shp.OLEFormat.Object;
Microsoft.Office.Interop.Excel.Worksheet monXlSheet =
(Microsoft.Office.Interop.Excel.Worksheet)objEXL;
rgeDebut = monXlSheet.get_Range("C2", "C2");
}
}

Voilà ce que j'ai essayé de faire en C#. ça fonctionne presque car mon
document word sélectionne l'objet excle seulement au moment de
convertir objEXL, j'ai une erreur de cast. Je ne sais pas du tout
comment convertir en C# cette partie de code.
With objEXL.ActiveSheet
.Cells(1, 1).Value = "Texte Unique"
End With

Je pense que je suis obligé d'utiliser le get_Range
Avatar
carriere_59
J'ajouterai que mon objEXL ne comporte aucune propriété si je ne le
caste pas