Laden...

Forenbeiträge von muhtanten Ingesamt 53 Beiträge

07.08.2019 - 12:18 Uhr

Moin René,

du solltest dir OpenXML anschauen.
Dort gibt es auch das OpenXML Productivity Tool zum download. Damit kannst du dir die Datei anschauen und herausfinden wie ein Rechteck innerhalb eines Arbeitsblattes gespeichert und auch mit einem Makro verknüpft wird.

Ich habe mal kurz so ein Arbeitsblatt nachgebastelt. Das sieht dann ungefähr so aus:

Shape shape1 = new Shape(){ Macro = "[0]!Test", TextLink = "" };

Und der zugehörige Xml - Teil:

<xdr:sp macro="[0]!Test" textlink="">
      <xdr:nvSpPr>
        <xdr:cNvPr id="2" name="Rechteck 1" />
        <xdr:cNvSpPr />
      </xdr:nvSpPr>
      <xdr:spPr>
        <a:xfrm>
          <a:off x="666750" y="209550" />
          <a:ext cx="542925" cy="200025" />
        </a:xfrm>
        <a:prstGeom prst="rect">
          <a:avLst />
        </a:prstGeom>
usw.

Gruß
muhtanten

18.08.2017 - 16:21 Uhr

Moin Paschulke,

ich hatte in meiner Anwendung die gleichen Probleme. Das einzige was zuverlässig funktionierte war nach dem document.Activate() folgender Code:


                Process[] processes = Process.GetProcessesByName("WINWORD");
                if (processes.Count() > 0)
                {
                    AllowSetForegroundWindow(processes[0].MainWindowHandle);
                    System.Threading.Thread.Sleep(50);
                    SetForegroundWindow(processes[0].MainWindowHandle);
                }

Gruß
muhtanten

16.01.2016 - 10:55 Uhr

Der Ordner enthält lediglich die Definition der Eigenschaft. Die eigentlichen Inhalte findest du dann in den Userproperties der Items dieses Ordners.
Die Items deines Folders 'mf' haben ein Userproperty 'Bezeichnung' mit dem entsprechenden Werten siehe auch UserDefinedProperty

Gruß
muhtanten

14.01.2016 - 08:58 Uhr

Moin,

das vorhandene Formular erweitern wird nicht funktionieren. Du kannst aber ein eigenes Formular entwerfen und dann als Kontakteformular anbieten. Entwerfen eines Outlook-Formularbereichs

Gruß
muhtanten

13.01.2016 - 20:53 Uhr

Moin habalulu,

was bedeutet funktioniert nicht? Kommt eine Fehlermeldung? Funktioniert das auslesen nicht oder funktioniert das schreiben des neuen Werts nicht?

Gruß
muhtanten

16.12.2015 - 17:17 Uhr

Moin Christel,

hast du mal versucht ' Application.DefaultSaveFormat' auf einen Leerstring zu setzen?

Gruß
muhtanten

26.10.2015 - 22:12 Uhr

wie wäre es mit TouchUp ?

Gruß
muhtanten

09.07.2015 - 14:26 Uhr

Moin WMenzel,

du kannst in Excel ein Makro aufzeichnen und dir dann anschauen wie VBA das machen würde. Den generierten Code kann man in der Regel einfach nach C# überführen.

Gruß
muhtanten

01.07.2015 - 20:44 Uhr

Moin m.grauber,

OpenXml ist für denen Anwendungsfall nicht geeignet, da du damit nur Dokumente bearbeiten kannst. Die Anwendung kannst du damit nicht steuern. Sonst ist Office - Automation schon das richtige Stichwort, unter dem du alles finden solltest.

Gruß
muhtanten

29.06.2015 - 09:07 Uhr

Moin zusammen,

ich habe mittlerweile das Problem gelöst:

Die Postfächer werden nun nicht mehr als zusätzliches Postfach eines Kontos geöffnet, sondern als weiteres eigenständiges Konto. Dann kann man über die Accounts-Auflistung iterieren und anhand der gegebenen EMail - Adresse den Account ausfindig machen. Zu dem Account kann man dann den DeliveryStore auslesen.

Danke und Gruß
muhtanten

26.06.2015 - 07:26 Uhr

Das Problem ist, dass Ich noch kein MailItem (oder in meinem Fall AppointmentItem) habe. Ich weiß zwar von welchem Postfach ich mir diese holen soll, aber ich weiß nicht hinter welchem Store sich welches Postfach befindet.

25.06.2015 - 16:59 Uhr

Moin zusammen,

über die Kontoeinstellungen kann man in Outlook zusätzliche Postfächer öffnen (siehe Bild) . Über die 'Stores' - Auflistung des NameSpace's kann man über diese Postfächer iterieren. Dort wird allerdings nur der DisplayName angeboten. Wie kann man die EMail - Adresse dieser Postfächer ermitteln?

Gruß
muhtanten

08.02.2015 - 20:57 Uhr

Moin,

schau mal was du mit deiner Zählervariable 'n' machst, wann du sie erhöhst und wann du sie benutzt.

Gruß
muhtanten

09.10.2014 - 06:55 Uhr

Moin Schweinebauch,

du meinst vermutlich die Einstellung unter Seite einrichten - Papier - Papierzufuhr erste Seite. Dort kann der Schacht für die erste Seite bestimmt werden.

Meine Herangehensweise wäre: Ein Makro aufzeichnen, während ich die Papierzufuhr auf den Standardschacht stelle (löschen wird nicht funktionieren, dort wird Word zumindest einen Standardwert erwarten). Anschließend kann dieses Makro normalerweise relativ einfach in C# - Code umgewandelt werden. Dann kannst du mit einer kleinen Anwendung jedes Dokument öffnen und die Einstellungen dort vornehmen.

Gruß
muhtanten

24.06.2014 - 09:02 Uhr

Moin xxpoddyxx,

beim abrufen der Zelle musst du auf die Angabe der Zeile verzichten, da der Range ja nur aus der einen ListRow besteht.
Des weiteren gibt die Value2 - Eigenschaft kein Range-Objekt zurück. Folgendermaßen kann es funktionieren:

string rolle = listRow.Range.Cells[1].Value2.ToString();

Gruß
muhtanten

29.04.2014 - 20:30 Uhr

Moin zaimen

mit den BusinessDataConnectivity Service kannst du Daten von externen Datenquellen in einer Sharepointliste darstellen. BDC

Gruß
muhtanten

31.03.2014 - 15:24 Uhr

Moin Stefan,

wenn du auf Listen zugreifen kannst, kannst du auch auf DocumentLibrarys zugreifen. Denn eine DocLib ist auch nur eine Liste.MSDN: DocLib

24.01.2014 - 11:57 Uhr

Moin cordell,

auch das Sheet hat eine Unprotect() Methode.

Worksheet sheet = Application.ActiveWorkbook.ActiveSheet;
sheet.Unprotect();

Gruß
muhtanten

20.01.2014 - 20:21 Uhr

Moin 23994,

mit OpenXML kannst du wahnsinnig schnell Dokumente bearbeiten. Mit dem Open XML SDK 2.0 Productivity Tool kannst du Quellcode generieren lassen der dir dann zeigt wie z.B. Shapes hinzugefügt werden können. Wenn du bei Interop bleiben möchtest, kannst du das mit Application.Screenupdating = false/true etwas beschleunigen.

Gruß
muhtanten

16.01.2014 - 16:44 Uhr

Moin zusammen,

wenn in einem Worddokument ausgeblendeter Text enthalten ist, kann dieses Dokument über die Sharepointsuche (mit dem ausgeblendeten Text als Suchbegriff) nicht gefunden werden. Kann man dieses Verhalten beeinflussen, oder ist das ein Feature das man hinnehmen muss?

Danke und Gruß
muhtanten

28.11.2013 - 21:53 Uhr

moin x-03

versuch mal die HTMLBody Eigenschaft anzupassen

Gruß
muhtanten

14.11.2013 - 18:18 Uhr

Moin tecla,

das kann schon funktionieren. Dein WordAddin kann aus einem beliebigen Range das WordXML auslesen. Daraus kann dann ein WordProcessingDocument erstellt werden.

Gruß
muhtanten

03.11.2013 - 15:59 Uhr

Moin CSharpProg,

Word ist einem sehr behilflich, wenn man solche Fragen hat. Du kannst dir z.B. ein Makro aufzeichnen um zu schauen wie Word das in VBA machen würde. Als zweites könntest du dir mit den Open XML SDK 2.0 Productivity Tool anschauen wie so ein fertiges Dokument von 'innen' ausschaut.

Gruß
muhtanten

13.10.2013 - 22:13 Uhr

Moin telfa,

die EntryID sollte sein was du suchst.

Gruß
muhtanten

23.08.2013 - 23:48 Uhr

Moin lazy,

mit dem Table Interface kannst du sehr effizient Inhalte filtern.

Gruß
muhtanten

22.06.2013 - 18:38 Uhr

Moin Ulf,

du solltest dir Office-Automation anschauen. Dort kannst du dann das Event Workbook.BeforeSave oder Workbook.BeforeClose registrieren.

Gruß
muhtanten

26.04.2013 - 11:11 Uhr

Moin dynatech,

die Fehlermeldung ist doch gar nicht so schlecht. Versuch mal deine Aufgabe als object und nicht als TaskItem zu übergeben.

Gruß
muhtanten

19.03.2013 - 15:46 Uhr

den Parameterlosen Konstruktor meine ich.

siehe: MSDN - Memorystream

Gruß
muhtanten

19.03.2013 - 15:39 Uhr

Moin Campy,

mit dem passenden Konstruktor geht das.

Gruß
muhtanten

14.03.2013 - 15:08 Uhr

Mit Automation aus der WinForms - Anwendung geht das, mit deinem AddIn nicht.
In der WinForms-Anwendung kopierts du beim Click auf den Button nichts in die Zwischenablage, sondern erzeugts dir eine neue WordInstanz. Dann kannst du mit der Methode Add(template) oder Open(Document) dein Dokument öffnen oder erzeugen. Mit diversen Methoden z.B. Application.Selection.InsertText oder wie auch immer sie heißen kannst du beliebigen Text (formatiert oder auch nicht) oder was auch immer hinzufügen. In deiner WinForms - Anwendung kannst du dich auf das Event Document.Close() registrieren und wenn der Anwender Das Dokument oder Word schließt kannst du dir den Text in Word schnappen und wieder in deiner Anwendung anzeigen lassen. Also Automation anstatt AddIn.

Gruß
muhtanten

13.03.2013 - 09:01 Uhr

Moin darkface,

ein AddIn ist für deinen UseCase wahrscheinlich nicht die beste Idee. Du solltest dich mit Word Automation beschäftigen
Word automatisieren

Gruß
muhtanten

20.02.2013 - 14:41 Uhr

Hallo BloodyFunFrog,

bist du dir sicher das es sich um InlineShapes handelt? InlineShapes kenne ich nur als Bilder o.ä. Textboxen kenn ich nur als Shapes. Bei Shapes kommt man dann mit

Shapes[i].TextFrame.TextRange

weiter.

Gruß
muhtanten

/EDIT/ sorry, meine Antwort war Quatsch 8o

08.02.2013 - 09:08 Uhr

Hallo Gogeta,

ich habe mir gestern mal die Mühe gemacht dein Problem nachzustellen. Also bei mir stand in fieldText " MERGEFIELD" mit einem führenden Leerzeichen. Das Trim() habe ich so eingefügt:

if (fieldText.Trim().StartsWith("MERGEFIELD"))

Wenn dein Code abgearbeitet wird, macht ein Update() keinen Sinn, da es dann keine Felder mehr gibt.
Die Zeilen:

if (fieldName == "Name")
                 {
                     myMergeField.Select();
                     WordDoc.Selection.TypeText(name_txt.Text);
                 }
 

überschreiben deine Felder. Wenn due dein Dokument öffnest und (bevor dein Programm läuft) alles markierst und F9 drückst sollte ebenfalls das gleiche passieren (die Beispieldaten verschwinden und es steht dort <<Name>>.
Was für eine Exception kommt denn?

Gruß
muhtanten

P.S.: OpenXML ist vollkommen genial um Office Dokumente zu bearbeiten!

07.02.2013 - 21:21 Uhr

Moin,

der Debugger könnte helfen!

Es ist nicht gut, wenn man Code kopiert, ohne ihn zu verstehen.
Dein fieldText fängt nicht mit "MERGEFIELD" an, sondern mit " MERGEFIELD"! Trim() an passender Stelle! Das Fields.Update() kannst du dir auch sparen, da nach der Methode keine zu aktualisierenden Felder mehr vorhanden sind.

Gruß
muhtanten

07.02.2013 - 12:21 Uhr

Moin Gogeta,

Felder werden, wenn ich mich recht entsinne nicht automatisch aktualisiert. Versuch mal nach dem setzen des Textes

ActiveDocument.Fields.Update()

Gruß
muhtanten

04.02.2013 - 16:31 Uhr

Moin Franz,

in diesem Fall bietet sich Office OpnXML an. Damit kannst du Office Dokumente erstellen und bearbeiten, ohne das Office installiert sein muss.

OpenXML - MSDN

Gruß
muhtanten

19.09.2012 - 16:35 Uhr

Hallo chriscolm,

die ID ist vom Typ StringValue und du versuchst unterschiedliche Objekte zu vergleichen. Mit ID.Value sollte es funktionieren.

Gruß
muhtanten

04.09.2012 - 19:54 Uhr

Das muss aber ein verdammt altes Office sein.
Seit Office 2003 sollte man Word - Dokumente als docx abspeichern können. Das was ich bisher gepostet habe gilt alles erst für Office 2007 Dokumente. Also einfach alles vergessen 🙁

Gruß
muhtanten

04.09.2012 - 15:36 Uhr

Der Pfad zur DOCX - Datei wird dort erwartet.

So oder ähnlich könnte man anfangen:


using (WordprocessingDocument wpDoc = WordprocessingDocument.Open(openFileDialog1.FileName, true))
            {
                 MainDocumentPart mainPart = wpDoc.MainDocumentPart;
                foreach (Table tab in mainPart.Document.Body.Descendants<Table>())
                {
                    foreach (TableRow row in tab.Descendants<TableRow>())
                    {
                        foreach (TableCell cell in row.Descendants<TableCell>())
                        {
                            TableCellProperties cellProps = cell.TableCellProperties;
                            if(cellProps.VerticalMerge != null)
                                MessageBox.Show("Ich bin Teil eines Verbundes");
                        }
                    }
                }
            

Gruß
muhtanten

04.09.2012 - 10:38 Uhr

Bei Interop steh ich auf dem Schlauch. Ich habe gerade versucht das mit Interop zu reproduzieren, es gibt allerdings ComExceptions wenn man auf eine Zeile mit verbundenen Zellen zugreifen will.

Mit OpenXML ist es allerdings auch nicht wirklich trivial. Wenn das Dokument in Word geöffnet ist (Interop) kann es nicht gleichzeitig mit OpenXML geöffnet werden.
Du kannst einfach die Assembly DocumentFormat.OpenXml hinzufügen (zu finden im Internet?) und brauchst das SDK nicht unbedingt installieren.

Gruß
muhtanten

04.09.2012 - 08:36 Uhr

Hallo marcial187,

ich habe mir das gerade mal im OpenXML angeschaut. Die Zellen scheinen keine Höhe zu haben, sondern nur die Zeilen. (Macht ja eigentlich auch Sinn)

Im OpenXML enthalten die einzelnen Zellen die Information ob sie Teil eines Verbundes sind

<w:tc>
      <w:tcPr>
        <w:tcW w:w="6410" w:type="dxa" />
        <w:vMerge />
      </w:tcPr>
      <w:p w:rsidR="00B44181" w:rsidRDefault="00B44181" />
</w:tc>

vMerge zeigt hier an, dass es sich um einen vertikalen Verbund handelt.

Gruß
muhtanten

18.04.2012 - 07:55 Uhr

Moin

am einfachsten ist es, wenn du dir ein Makro aufzeichnest und dann schaust was VBA daraus macht. Meistens, und auch in diesem Fall, ist dann der Weg zum C# Code relativ einfach.

Gruß
muhtanten

12.02.2012 - 14:18 Uhr

Hallo Christoph,

schau mal hier: Programmieren des Outlook 2010-Lösungsmoduls

Gruß
muhtanten

01.02.2012 - 20:13 Uhr

Moin,
mit GetSharedDefaultFolder kannst du Kalender anderer Personen öffnen für die du berechtigt bist.

Gruß
muhtanten

08.01.2012 - 00:31 Uhr

Wenn du ein Range hast (z.B. ThisDocument.Content) kannst du dort mit Tables.Add(...) eine Tabelle hinzufügen. Die Add - Methode gibt dir ein Tables-Objekt zurück. Damit kannst du dann die einzelnen Zellen befüllen:
z.B.

Tables tab = ...ThisDocument.Content.Tables.Add(...);
tab.Rows[1].Cells[1].Range.Text = "Hallo";

für die linke obere Zelle

Gruß
muhtanten

03.01.2012 - 21:03 Uhr

versuch mal Globals.ThisAddin.addRow()

Gruß muhtanten

17.12.2011 - 22:24 Uhr

Hallo Jörg,

pack die einzelnen Bereiche einfach in ContentControls, diese kannst du dann nach dem editieren relativ einfach identifizieren.

Gruß
muhtanten

16.02.2011 - 08:08 Uhr

Moin ChrisBa

guckst du

http://www.connectionstrings.com/sql-server-2005

Gruß
muhtanten

07.02.2010 - 18:16 Uhr

Hallo c#starter

im Parameter 'sender' sollte die Textbox drin sein.

Gruß
muhtanten