myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Office-Technologien » Manipulation von Word --> deployment
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Manipulation von Word --> deployment

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Roschi
myCSharp.de-Mitglied

Dabei seit: 21.01.2011
Beiträge: 6


Roschi ist offline

Manipulation von Word --> deployment

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo

ich hoffe ihr könnt mir helfen

mir fehlt irgendwie der Schubs in die richtige Richtung....

folgende Situation:

Ich habe eine App (VS 2010 c# O2010) geschrieben, die alle Wordfiles in einem Verzeichnis öffnet, manipuliert und wieder speichert. Ich verwende dafür die interop.word (für word 2007)

soweit so gut...

die App ist getestet, und läuft stabil.

jetzt habe ich das Problem, dass ich nicht weiss, welche wordversion der User installiert hat und wie ich jetzt die interop für 2007 ins setup verpacke, damit es beim User installiert wird...

oder muss ich meine App umprogrammieren, damit sie mit allen (2002 - 2010) Versionen von Word funkt.

ich bin leider neu im Bereich Office-Programmierung und wäre für jeden Tipp dankbar

LG Roschi
21.01.2011 09:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
der-schlingel der-schlingel ist männlich
myCSharp.de-Mitglied

avatar-3239.jpg


Dabei seit: 13.10.2007
Beiträge: 799
Entwicklungsumgebung: VS 2005/ 2008 Pro
Herkunft: Österreich/Wien


der-schlingel ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

hast du hier schon reingeschaut?  [FAQ] Office, Word, Outlook in eigener Anwendung

Darin gibt es auch einen Punkt mehrere Versionen von Office zu unterstützen der darauf verlinkt:  Allgemeiner COM-Wraper für Latebinding
21.01.2011 09:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Roschi
myCSharp.de-Mitglied

Dabei seit: 21.01.2011
Beiträge: 6

Themenstarter Thema begonnen von Roschi

Roschi ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo

du bist eine Wucht!

ich werde mir das heute abend genauer anschauen (ist quasi ein "privates" Projekt)

ich habe gestern den ganzen abend damit verbracht danach zu suchen

danke einstweilen

mfg Roschi
21.01.2011 10:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Roschi
myCSharp.de-Mitglied

Dabei seit: 21.01.2011
Beiträge: 6

Themenstarter Thema begonnen von Roschi

Roschi ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo

erstmal danke für deinen Tipp mit dem Wrapper, er hat mich schon sehr weit gebracht !!

ich möchte auf Bilder in einem Wordfile zugreifen

C#-Code:
            // Word.Application-Objekt erzeugen
            ComObject word = new ComObject("Word.Application");

            // Sichtbar machen
            word.SetProperty("Visible", true);

            // Dokument-Auflistung abrufen
            ComObject documents = word.GetObjectReturningProperty("Documents");

            //  Dokument öffnen
                      ComObject document = documents.InvokeObjectReturningFunction("Open", @"D:\xy.doc");

            ComObject Shapes = document.GetObjectReturningProperty("Shapes");

            int PicCount = (int)Shapes.GetProperty("Count");


            for (int i = PicCount; i > 0; i--)
            {
                  if (Shapes[i].Type == Microsoft.Office.Core.MsoShapeType.msoPicture) // <------------

                        {
                             Shapes[i].Delete();   // <------------
                        }             }

mein Problem sind jetzt die letzten Zeilen....

ich habe keine Ahnung wie ich das ComObjekt Shapes durchgehen kann um zB wenn es sich um ein Bild handelt diesen Shape zu löschen


ich hoffe du kannst mir helfen

LG Roschi

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Roschi am 22.01.2011 17:45.

22.01.2011 17:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
user8744
myCSharp.de-Mitglied

Dabei seit: 22.06.2007
Beiträge: 1.150


user8744 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich versteh dein Problem garnicht so genau.
Es steht doch schon da. Du musst den Code nur gegen LateBinding Code austauschen.

Statt msoPicture verwendest du die Zahl für die die Konstante steht.
28.01.2011 03:09 Beiträge des Benutzers | zu Buddylist hinzufügen
Roschi
myCSharp.de-Mitglied

Dabei seit: 21.01.2011
Beiträge: 6

Themenstarter Thema begonnen von Roschi

Roschi ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo

mein Problem ist:

ComObject Shapes = document.GetObjectReturningProperty("Shapes");

liefert ein ComObject

ich würde aber so wie bei Interop ein array erwarten, damit ich mit shapes[i] auf ein shape zugreifen kann.

da ich noch nie mit latebinding zu tun hatte, weiss ich jetzt nicht, wie ich shapes casten soll, damit es ein array wird, bzw. ob es eine Möglichkeit gibt, direkt auf eines der Array-Elemente zuzugreifen, um zu überprüfen, ob es sich um ein "msoPicture" handelt.

ich hoffe jetzt ist mein Problem etwas klarer und ihr könnt mir helfen....

danke schon mal für eure Bemühungen
28.01.2011 08:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
user8744
myCSharp.de-Mitglied

Dabei seit: 22.06.2007
Beiträge: 1.150


user8744 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hm, Rainbirds Wrapper berücksichtigt nicht das Properties in COM auch Parameter haben können sehe ich gerade. Teste mal ob die Shape Items als Funktion abgegriffen werden (Office Produkte sind diesbezüglich sehr uneinheitlich)

C#-Code:
ComObject shapeObject = Shapes.InvokeObjectReturningFunction("Item", i);
int shapeType = (int)shapeObject.GetProperty("Type");

// do whatever you want

shapeObject .Dispose();

Falls das nicht klappt musst du Rainbirds Wrapper erweitern also die
Funktion GetProperty überladen(oder optional in c#4) und zwar wie folgt.

C#-Code:
public object GetProperty(string propertyName, params object[] parameters)
{
    // Methode aufrufen und Rückgabewert zurückgeben
    return _realComObject.GetType().InvokeMember(propertyName, BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, _realComObject, parameters);
}

Der Wrapper wäre hinsichtlich der Performance noch optimierbar sehe ich gerade
falls du Probleme dahingehend haben solltest.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von user8744 am 28.01.2011 13:16.

28.01.2011 09:57 Beiträge des Benutzers | zu Buddylist hinzufügen
Roschi
myCSharp.de-Mitglied

Dabei seit: 21.01.2011
Beiträge: 6

Themenstarter Thema begonnen von Roschi

Roschi ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Sebastian

Danke für deinen Tipp!!!

damit hat es geklappt


für alle die es interessiert der fertige code

C#-Code:
           // Word.Application-Objekt erzeugen
            ComObject word = new ComObject("Word.Application");

            // Sichtbar machen
            word.SetProperty("Visible", true);

            // Dokument-Auflistung abrufen
            ComObject documents = word.GetObjectReturningProperty("Documents");

            // Neues Dokument erzeugen
            ComObject document = documents.InvokeObjectReturningFunction("Open", @"D:\xy.doc");

            ComObject Shapes = document.GetObjectReturningProperty("Shapes");

            int PicCount = (int)Shapes.GetProperty("Count");


            for (int i = PicCount; i > 0; i--)
            {

               ComObject shapeObject = Shapes.InvokeObjectReturningFunction("Item", i);
                int shapeType = (int)shapeObject.GetProperty("Type");

                // Microsoft.Office.Core.MsoShapeType.msoPicture
                if(shapeType == 13)
                {
                    shapeObject.InvokeFunction("Delete");
                }

                shapeObject.Dispose();
            }


                  // Verweise auf Dokument und Dokumentauflistung entsorgen
            document.Dispose();
            documents.Dispose();



            // Word beenden ohne zu speichern
            word.InvokeProcedure("Quit", 0);

            // Word-Instanz entsoregn
            word.Dispose();
29.01.2011 17:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 9 Jahre.
Der letzte Beitrag ist älter als 9 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 20.10.2020 08:42