Laden...

Exceltabelle in Word-Dokument befüllen

Erstellt von Xeres vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.526 Views
X
Xeres Themenstarter:in
16 Beiträge seit 2003
vor 12 Jahren
Exceltabelle in Word-Dokument befüllen

Hallo,

ich möchte gerne ein Word-Dokument befüllen.
Das funktioniert mit einfachen Strings und sogar mit einer eigenen (normalen Word)-Tabelle auch ganz gut.
Nun habe ich allerdings eine Word-Vorlage, die ein Excel-Element beinhaltet.
Ich würde gerne dieses Objekt ansprechen und befüllen / verändern.

Ich habe nun bereits einige Zeit gesucht, aber irgendwie finde ich keine Lösung.

Kleine Besonderheit: Ich nutze Silverlight und hierbei die AutomationFactory (also COM-Zugriff).

Im Prinzip müsste ich nur wissen, wie ich dieses Objekt anspreche.

Was ich bereits probiert habe:


                dynamic oWord = AutomationFactory.CreateObject("Word.Application");

                oWord.Visible = true;

                object oTemplatePath = "C:\\tmp\\test.dotx";
                dynamic oWordDoc = oWord.Documents.Add(ref oTemplatePath);

                dynamic tbl = oWordDoc.Tables[0];

Allerdings liefert die letzte Zeile eine Fehlermeldung.

Hat jemand eine Idee?

Noch eine 2te kleine Nebenfrage: Gibt es irgendwo eine Doku, was für Möglichkeiten man innerhalb des "Word.Application"-Objekt hat?

Vielen Dank schonmal!

Gruß

G
47 Beiträge seit 2011
vor 12 Jahren

Hallo Xeres,

bist du sicher, dass du mit Tables auf eingebettete Exelobjekte zugreifst?
Ich hab das grad mal ausprobiert und bei mir gibt er nur die Word-Tabellen an.

Auf eingebettete Exceltabellen müsstest du mit InlineShapes zugreifen können.

Gruß Gwinn

1.029 Beiträge seit 2010
vor 12 Jahren

Hi,

Gwinn hat hier auf jeden Fall Recht - ein Blick in InlineShapes sollte helfen.

Meiner Meinung nach findet man sowas selbst am leichtesten raus, indem man den Makrorekorder "anschmeisst".

Das kommt z.B. beim Hinzufügen der Exceltabelle dabei raus (VBA):

Sub AddExcelTable()
    Selection.InlineShapes.AddOLEObject ClassType:="Excel.Sheet.12", _
        LinkToFile:=False, DisplayAsIcon:=False
End Sub

Das ist jetzt zwar keine Lösung (kA wie man bei C# mit OleObjekten arbeitet) - sollte allerdings ein guter Startpunkt zum Finden sein 😉

LG
Achim

PS: Änderungen in der Excel-Tabelle bekommt der MakroRecorder nicht einmal mit.

1.029 Beiträge seit 2010
vor 12 Jahren

Hi,

das Ganze ist einfacher wie erwartet - hat mich gerade interessiert.

So könnte das z.B. aussehen:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using wd = Microsoft.Office.Interop.Word;
using xl = Microsoft.Office.Interop.Excel;

namespace ConsoleApplication4
{
	class Program
	{
		static void Main(string[] args)
		{
			// Word starten
			wd.Application wdApp = new wd.Application();
			// sichtbar machen
			wdApp.Visible = true;

			object shType = "Excel.Sheet.12"; //14 geht nicht (warum auch immer...)
			object misssing = Type.Missing;
			object comFalse = false;

			// Neues Dokument öffnen
			wdApp.Documents.Add();

			// excel-tabelle in's dokument einfügen
			wd.InlineShape shape = wdApp.Selection.InlineShapes.AddOLEObject(ref shType, ref misssing, ref comFalse, ref comFalse, ref misssing, ref misssing, ref misssing, ref misssing);

			// Format wird benötigt, um an das eigentliche Objekt zu kommen
			wd.OLEFormat format = shape.OLEFormat;

			//format.Objekt kann wie Excel.Application verwendet werden, casten geht bei mir nicht.
			Console.WriteLine(format.Object.ActiveSheet.Name);
			Console.ReadLine();
		}
	}
}

Schätze das sollte weiterhelfen.

LG
Achim

EDIT:
Was deine Nebenfrage angeht: Was meinst du mit Möglichkeiten?
Einfach nur IntelliSense anstatt deinen Dynamics? Kannst ja mal einfach Interop versuchen 😛 Alternativ: Mach dir Word und den VBA-Editor auf (Alt+F11) - da hast du auch rudimentäre Inellisense und kannst vergleichen...

X
Xeres Themenstarter:in
16 Beiträge seit 2003
vor 12 Jahren

Vielen Dank für eure Antworten.

InlineShapes war das, was mir zur Lösung geholfen hat.

@ Taipi88:

Unter Silverlight kann ich nur mit dynamics arbeiten. Daher habe ich auch keine IntelliSense. Aus dem Grund hatte ich nachgefragt.

Danke für deine Hilfe 😃