Fragen zur Entwicklung mit NetOffice z.B. wie sende ich eine E-Mail oder wie öffne ich ein Word Dokument bitte im Forum Office-Technologien und nicht hier.
**
NetOffice - .NET Wrapper Assemblies für den Zugriff auf Microsoft Office, Excel, Word, Outlook, PowerPoint, Access
http://netoffice.codeplex.com **
Office Integration ohne Versionsbeschränkung
Alle Objekte, Methoden, Properties und Events der Office Versionen 2000, 2002, 2003, 2007, 2010 enthalten
Attribute Konzept und XML Source Doku zur Information welche Office Version(en) die jeweilige Methode oder Property anbietet (siehe angehängtes Bild)
Syntaktisch und semantisch identisch zu den Interop Assemblies
Reduzierter und besser lesbarer Code durch automatische Verwaltung von COM Proxies
Keine Deployment Hürden, keine problematische Registrierung, keine Abhängigkeiten, keine Interop Assemblies, kein VSTO notwendig
Mit jeder .NET Version ab 2.0 verwendbar
Problemlose Addin Entwicklung
Dokumenation und Beispielprojekte inkl. Addins für alle Office Produkte in C# und VB.NET auch online verfügbar
Beispielcode für die Erstellung eines neuen TaskItem in Outlook(Example02.csproj)
// Initialize Api COMObject Support
LateBindingApi.Core.Factory.Initialize();
// Create an Outlook Application object.
Outlook.Application outlookApplication = new Outlook.Application();
// Create a new TaskItem.
Outlook.TaskItem newTask = outlookApplication.CreateItem(OlItemType.olTaskItem) as Outlook.TaskItem;
// Configure the task at hand and save it.
newTask.Subject = "check for NetOffice.DeveloperToolbox updates";
newTask.Body = "check updates here: http://netoffice.codeplex.com";
newTask.DueDate = DateTime.Now;
newTask.Importance = OlImportance.olImportanceHigh;
newTask.Save();
// close outlook and dispose
outlookApplication.Quit();
outlookApplication.Dispose();
Fragen, Kritik, Verbesserungsvorschläge und Bug Reports sind natürlich sehr willkommen.
Schlagwörter: Office Excel Word Outlook PowerPoint Access
Screenshot: IntelliSense Unterstützung in C# für Versionsinformation eines Property.
Hallo Sebastian,
habe NetOffice getestet und finde es super 😃 Richtig schnell und im Vergleich zum normalen LateBinding einfach zu programmieren.
Was evtl. noch fehlt, ist eine Signierung der DLLs.
Habs nicht probiert aber auf sowas habe ich schon lange gewartet!!! 😃
Hoffe bald einmal das Framework einsetzen zu können.
Lg, XXX
Klingt sehr gut. Gibt es auch die Möglichkeit beim Erstellen anzugeben, welche (minimale/exakte) Application-Version verwendet werden soll?
Also für den Fall, dass mehrere Installiert sind und man sich daher nicht sicher sein kann, dass gerade die gewünschte Version als Standardanwendung eingetragen ist.
Sehr gute Arbeit! Werde ich mir mal anschauen. Könnte das gut gebrauchen.
> Codejunky <
danke das schaue ich mir mal an.
Wie sieht es mit 32/64Bit (AnyCPU) Kompatibilität aus? Was muss man da alles beachten?
Hallo MagicAndre,
Guter Punkt!
Ich erstelle gerade einen kleinen Guide bzw. kurze Übersicht zu dem Thema.
Release 0.9 (Beta) wird auch x64 Assemblies für alle .NET Versionen ab .NET 2.0 enthalten. Das Release erscheint in der Nacht vom 5. zum 6. Juni also spätestens kommenden Montag morgen 😉 UPDATE: Seperate Assemblies für andere Plattformen sind nicht nötig. NetOffice funktioniert auch plattformunabhängig.
Hallo Marsti,
Ja, du kannst dem Application Objekt im Constructor die gewünschte ProgId übergeben und damit eine spezifische Version starten.
Sebastian
Edit: Das Release wird sich wohl verzögern da sich Office x64 prinzipiell nicht auf WindowsXP(x64) installieren lässt und ich kein anderes System zu Hause habe. Schade.
Ich erstelle gerade einen kleinen Guide bzw. kurze Übersicht zu dem Thema.
Release 0.9 (Beta) wird auch x64 Assemblies für alle .NET Versionen ab .NET 2.0 enthalten.
Danke 👍
Die Signierung ist eine sinnvolle Option für eine Version 1.0 denke ich.
Das wäre super 😁 Wäre schade, wenn man die DLL nicht in signierten Projekten einsetzen könnte, denn die Komponente ist super.
ah, noch etwas. Wird es das Projekt auch als NuGet Paket geben?
@Sebastian.Lange
installiere die 90 Tage Win7 x64 Trial, da kannst du es testen.
Ich habe von NuGet bisher nur gelesen, ich muss mich erstmal informieren was ich dazu tun müsste. Wenns ohne Hürden umsetzbar ist, klar warum nicht.
EDIT 08.07.2011: Nein, auch Version 1.1 wird es nicht als NuGet-Paket geben.
Ich wusste nicht das Windows7 x64 als Trial erhältlich ist. Danke für den Tipp!
Ich bin mir sicher das neue Release diese Woche noch fertig zu bekommen.
Ich habe Release 0.9 soeben fertig gestellt und in der technischen Dokumentation einen entsprechnden Eintrag zur 32Bit/64Bit Thematik verfasst.
Documentation > Tec_Documentation_German > Tec_Documentation_German_32Bit_64Bit
Sofern der Fragen offen lässt solls mir doch bitte einer sagen 😉
ok, ich spiele nun etwas damit rum.
Eine Frage. Warum packst du die große RAR immer mit in die Quellcodeverwaltung?
Du meinst das Release Tag?
Bei kleineren Bugfixes bzw. Anpassungen/Erweiterungen update ich das Tag ohne auf der Codeplex Seite jedesmal ein neues Release zu erstellen. Wenn du z.B. ein Issue erstellst kümmere ich mich sofort um den Fehler und update dieses Release Tag quasi noch am gleichen Tag. Das Release auf der Webseite muss immer etwas warten. 3 neue Releases am Tag würden keinem nützen glaube ich.
Du meinst das Release Tag?
ja, ich will nur den trunk. Kannst du die Quellcodeverwaltung aufsplitten in trunk, tags, branches und dann wenn du eine Version fertig hast erstellst du einen Tag und keine RAR? SVN und große Dateien ist nicht wirklich schnell. TSVN kackt öfters mal ab und ich muss aufräumen und nochmals updaten.
Hallo,
lassen mit NetOffice auch die Office-Anwendungen in die eigene Applikation einbetten?
Ich muss für ein aktuelles Projekt Excel-Dateien innerhalb meiner Anwendung anzeigen. Bisher habe ich es mit einem WebBrowser-Control versucht. Dies funktioniert jedoch ohne Änderung an der Registry nicht richtig.
Daniel
Hallo!
@ManiacViper:
Der Wrapper ist lediglich als background-Worker gedacht, d.h. Office-Dokumente erstellen und bearbeiten. Für die Anzeige musst du leider andere Wege gehen.
Nobody is perfect. I'm sad, i'm not nobody 🙁
Hallo Sebastian,
coole API - ich brauche sie gerade wieder für ein kleines Projekt. Vielen Dank dafür!
Und (wie könnte es anders sein) dazu gleich eine Frage. Ich muss mit meinem Programm große Datenmengen (>50.000 Zeilen, 6 Spalten) in Excel importieren. Wenn ich die händisch (Zelle für Zelle) hinzufüge dauert das ewig.
Gibt es eine Möglichkeit das zu beschleunigen, beispielsweise über einen CSV-Import?
EDIT: Da habe ich wohl nicht klar genug formuliert. Die Frage bezieht sich ganz konkret auf die netoffice-API: Ist ein CSV-Import mit dieser API möglich? Und wenn ja, wie?
Viele Grüße,
Markus 😃
Bitte die Frage nur in direktem Bezug zu "NetOffice - Ein versionsunabhängiger Wrapper für MS-Office" beantworten, denn wir sind hier in ".NET-Komponenten und C#-Snippets" und nicht in "Entwicklung".
Moin moin,
die API hört sich Interessant an. Leider bin ich noch nicht dazugekommen sie mal zu testen.
Aber eine Frage habe ich schon. Muss auf dem Zielrechner des Anwenders Office installiert sein?
Mfg.
Mr. Bob
Hallo,
ja - Office muss installiert sein - die API ist "nur" eine LateBinding-Wrapper um
die OfficeAPI - Vorteil: Es muss keine bestimmte Office-Version installiert sein.
Es handelt sich dabei nicht um eine vollständig neue Implementierung der OfficeAPI 😁
LG
Achim
Habs getestet. Wunderbar 😃
Hallo!
@Spontifixus:
Da müsstest du mal prüfen, ob das mit der Open-Funktion möglich ist, oder ob es dafür eine spezielle Import-Funktion gibt.
Nobody is perfect. I'm sad, i'm not nobody 🙁
Genial!
Ich habe zwar nur Excel getestet, muss aber sagen: Hut ab! Auch allem wg. der vielen Arbeit, die ganzen Properties nachzubauen und alles so fein zu dokumentieren und zu "bebeispielen".
Nur zur Info: Ich habe bisher versucht:
-christoph
Dankeschön, NetOffice ist allerdings nicht von Hand gemacht sondern mit einem Codegenerator erstellt den ich dafür entwickelt habe, den gibt es auch auf Codeplex.
Nochwas: Eine italienische IT-Firma ist an mich heran getreten ob es möglich ist MS-Project zu integrieren. Dankenswerte Weise wurden mir die beiden verfügbaren MS-Project Versionen(2007 und 2010) dafür zur Verfügung gestellt. In den nächsten Tagen werde ich das umsetzen jedoch fehlt mir jede Kentniss über das Produkt. Wenn jemand Lust hat sich dem NetOffice Team anzuschliessen und ein wenig Beispielcode dafür zur schreiben zu stellen wäre das toll. Eine Liste welche OpenSource Projekte inzwischen von Interop und VSTO auf NetOffice umgestellt haben veröffentliche ich demnächst.
Es gibt ein neues Release
Es behebt einen kritischen Fehler im Eventsystem von NetOffice.
Sie dazu Issue 16314
Der Support für MS-Project verzögert sich leider etwas da die Italiener ausgesprochen träge reagieren was die Tests betrifft.
Hallo Sebastian,
danke für den Hinweis, ich hab das wie von dir vorgeschlagen über Copy'n'Paste (CSV-Daten in die Zwischenablage kopieren und dann in den entsprechenden Bereich kopieren) gelöst. Das funktioniert extrem schnell.
Viele Grüße,
Markus 😃
Hallo Sebastian,
super Arbeit!
Kann man das "Speichern als PDF" auch über deinen Wrapper ausführen?
Grüße
ebenfalls Sebastian
Hallo,
diese Antwort übernehme ich dann einfach mal 😛
NetOffice ist ein Wrapper - wenn etwas über das Objektmodell geht, dann kann es meines Wissens nach auch NetOffice.
Der einfachste Weg ist finde ich den "Makro-Recorder" anzuwerfen, die gewünschte Aktion durchzuführen und sich danach den VBA-Code anschauen,
wie ich es nachfolgend getan habe.
Der aufgenommene VBA-Code sieht so aus:
Sub ExportActiveDocAsPdf()
ActiveDocument.ExportAsFixedFormat OutputFileName:= _
"Dateiname.pdf", ExportFormat:=wdExportFormatPDF, _
OpenAfterExport:=True, OptimizeFor:=wdExportOptimizeForPrint, Range:= _
wdExportAllDocument, From:=1, To:=1, Item:=wdExportDocumentContent, _
IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:= _
wdExportCreateNoBookmarks, DocStructureTags:=True, BitmapMissingFonts:= _
True, UseISO19005_1:=False
End Sub
Daraus macht man dann in C# beispielsweise folgendes:
// export the newly created document as a pdf
newDocument.ExportAsFixedFormat(@"Dateipfad.pdf", WdExportFormat.wdExportFormatPDF,
false, WdExportOptimizeFor.wdExportOptimizeForPrint, WdExportRange.wdExportAllDocument, 1, 1,
WdExportItem.wdExportDocumentContent, true, true, WdExportCreateBookmarks.wdExportCreateNoBookmarks, true, true, false);
Eine lauffähige Version könnte dann so aussehen:
using NetOffice.WordApi.Enums;
using Word = NetOffice.WordApi;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
// Initialize Api COMObject Support
LateBindingApi.Core.Factory.Initialize();
// start word and turn off msg boxes
Word.Application wordApplication = new Word.Application();
wordApplication.DisplayAlerts = WdAlertLevel.wdAlertsNone;
// add a new document
Word.Document newDocument = wordApplication.Documents.Add();
// insert some text
wordApplication.Selection.TypeText("This text is written by NetOffice");
// export the newly created document as a pdf
newDocument.ExportAsFixedFormat(@"Dateipfad.pdf", WdExportFormat.wdExportFormatPDF,
false, WdExportOptimizeFor.wdExportOptimizeForPrint, WdExportRange.wdExportAllDocument, 1, 1,
WdExportItem.wdExportDocumentContent, true, true, WdExportCreateBookmarks.wdExportCreateNoBookmarks, true, true, false);
// close document unsaved
newDocument.Close(false, null, null);
// exit word
wordApplication.Quit();
wordApplication.Dispose();
}
}
}
LG
Achim
Super, vielen Dank. Ich probier' das dann mal! 😃
Hallo Sebastian,
wie sieht es mit Nuget aus? Ist da etwas geplant? 😁
Ab sofort verfügbar ist:
Ein ausführlicher Performance Vergleich ist nun zusätzlich verfügbar:
Performance Vergleich: Interop, Dynamics, Visual Basic, NetOffice
Geplant für Release 1.3
Die fetten ReleaseTags im Quellcode habe ich entfernt.
danke, nun noch ein NuGet Package und ich bin glücklich. NuGet ist das beste was ist seit langen bei .Net gibt. Aktuell muss man sich deine Version laden, sie in seinem eigenen Projekt in einem Ordner einfügen sowie in die Versionskontrolle packen. Mit NuGet kann man sich das alles sparen.
Hallo,
Ich erkenne den sinvollen Grundgedanken von Nuget und bei den häufigen NetOffice Releases der letzten Zeit wäre das sicher sehr nützlich gewesen. Jedoch habe ich mich nach gründlichem Überlegen dazu entschlossen vorläufig kein Nuget Packet anzubieten da ich mit einigen Aspekten der technischen Umsetzung nicht einverstanden bin. Ich würde das Thema gerne in in einem extra Thread weiter diskutieren sofern du magst.
[noch mehr offtopic]
Hallo 😃
Ich möchte einfach mal DANKE sagen ! Gute Arbeit ! 😃
Beste Grüsse
Diräkt
[/noch mehr offtopic]
Ab sofort verfügbar ist die NetOffice Developer Toolbox.
Die Developer Toolbox ist ein Productivity Tool für den Office-Entwickler.
Es umfasst die folgenden Funktionalitäten:
**- Office Compatibility
Die Dokumenation befindet sich hier:
Developer Toolbox Online Dokumenation
Ich möchte die einzelnen Funktionen ganz kurz umschreiben.
Office Compatibility
Wer eine Office Lösung entwickelt die mit mehreren oder allen Office Versionen kompatibel sein muss, steht vor dem Problem das er nur die Funktionalitäten ansprechen darf die in allen unterstützen Versionen zur Verfügung stehen. NetOffice bietet daher als einzige API einen entsprechenden Hinweis als IntelliSense Text, während der Entwicklung an, von welcher Office Version die jeweilige Funktionalität unterstützt wird. Auch wenn dieses Feature eine grosse Hilfe darstellt, reicht es in der Praxis nicht aus um sicherzustellen das man mit allen Versionen einer Office Anwendung kompatibel ist. Die Office Compatibility Komponente führt eine statische Code-Analyse mit Hilfe von Mono.Cecil durch und analysiert Assemblies die NetOffice verwenden darauf mit welchen Office Versionen sie kompatibel sind. Eine entsprechende Übersicht hilft dem Entwickler die inkompatiblen Aufrufe zu identifizieren.
Application Observer
Wer über längere Zeit an grösseren Office Lösungen arbeitet kennt das Problem.
Ein Fehler triff auf, der Debugging Prozess wird abgebrochen, vorhandener Cleanup Code wird damit nicht ausgeführt. Die Instanz der Office Anwendung wird nicht beendet und verbleibt im Speicher. Schnell befinden sich innerhalb weniger Minuten viele dieser verwaisten Instanzen im Speicher die via Task-Manager entfernt werden müssen. Der Application Observer überwacht die Anzahl laufender Instanzen von ausgewählten Office Anwendungen und zeigt diese Information auf Wunsch als Tray-Icon an. Darüber hinaus kann man einen systemweiten Hotkey festlegen um diese Instanzen schnell und unkompliziert zu entfernen. Die Hotkey Klasse stammt dabei von MyCSharp. Vielen Dank an Floste. Einen entsprechenden Hinweis im Code und in der About Box habe ich natürlich nicht vergessen.
Registry Editor
Der Registry Editor ist ein technischer und optischer Klon des bekannten Windows Registry Editors. Er bietet jedoch nur die Schlüssel für MS-Office an. Nerviges scrollen wird dadurch überflüssig.
Addin Guard
Entwickler die COMAddins für eine Office Anwendung schreiben haben oft das Problem das Sie nicht sicher sind ob Ihr Addin ordnungsgemäss geladen wird.
Bei einem auftretenden Fehler, z.B. einer fehlenden Abhängigkeit setzen Office Anwendungen das Ladeverhalten von Addins komentarlos zurück oder markieren es als deaktiviert. Viele Entwickler bauen daher MessageBox Ausgaben in ihren Code und prüfen permanent mit nervösem Blick die Registry-Werte Ihres Addins.
Addin Guard schafft hier Abhilfe in dem es das Ladeverhalten von Addins also ihren Aktivierungsstatus überwacht und ein Meldungsfenster oder eine Tray-Benachrichtung anzeigt wenn sich das Ladeverhalten ändert. Auf Wunsch kann Addin Guard das Ladeverhalten auch direkt zurücksetzen.
Outlook Security
Ein Entwickler der MS-Outlook via COM ansprechen bzw. automatisieren möchte steht vor dem Problem das Outlook einen Security Dialog einblendet, der zur Autoriserung auffordert, wenn man auf bestimmte Teile des Objektmodells zugreift. Mit Einführung dieses Sicherheits-Features wurde sehr schnell ein Tool mit dem Namen ClickYes populär das im Hintergrund läuft und diesen Dialog automatisch bestätigt. Outlook Security tut es dem bekannten Tool ClickYes nach indem es diesen Dialog automatisch bestätigt und hat darüber hinaus noch einen weiteren Vorteil. Die tatsächliche Funktionalität ist in das beiliegende Assembly NetOffice.OutlookSecurity.dll ausgelagert. Wer möchte kann dieses Assembly nutzen oder den Source Code direkt einbinden. Ein Addin kann damit seine eigene ClickYes Funktionalität mitbringen und auf dem Zielsystem muss kein extra Tool installiert werden. Wie man das Assembly NetOffice.OutlookSecurity.dll nutzt ist in der Online Dokumentation beschrieben.
Die Developer Toolbox benötigt das .NET 4 Framework.
Das Client Profile ist dabei ausreichend.
Für die Toolbox gibt es ein Update(Version 0.8.2) das 2 Bugs in der Office Compatibility Komponente behebt. Der 1.Bug verursachte eine Fehlermeldung während der Assembly Analyse, der 2. Bug verursachte eine falsche Anzeige im Filter-Modus des anschliessenden Reports.
Edit: Gleich noch ein Update(Version 0.8.3) hinterher.
Die Office Compatibility Komponente hat jetzt 73 Test Assemblies erfolgreich passiert. In Version 0.9 wird der detailierte Report der Analyse übersichtlicher und ansprechender aussehen und darüber hinaus auch direkt speicherbar sein
Hallo!
Habe NetOffice heute auch mal getestet: Läuft wirklich toll.
Evtl. noch ein kleiner Hinweis:
Wenn man z.B. Application in einer using-Anweisung verwendet, erwarte ich, dass neben Dispose gegebenenfalls weitere Methoden (z.B. Quit) automatisch aufgerufen werden.
Zusätzlich sollte evtl. auch ein Destructor eingerichtet werden (siehe auch Dispose implementieren und verwenden (IDisposable)), welcher Dispose(false)
aufruft.
Ich benutze zwar z.Zt. noch einen eigenen Wrapper, bin aber geneigt, auf NetOffice umzusteigen.
Nobody is perfect. I'm sad, i'm not nobody 🙁
Danke für deinen Hinweis. Quit() für Applications am Ende eines using Blocks aufzurufen ist eine sinnvolle Sache aber eben auch nur in diesem Context.
Ansonsten darf Quit() nie automatisch aufgerufen werden auch nicht wenn das Objekt vom GC entsorgt wird. Oft genug will man das die Anwendung weiterlebt auch wenn man sich technisch von ihr getrennt hat.
Ich muss erstmal intensiv drüber grübeln.
Das Proxy Management ist eine BasisApi (LateBindingApi.Core) verpackt.
Diese weiss natürlich nichts über irgendwelche Quit Methoden und soll es auch nicht. Möglich wäre es allerdings trotzem, wenn ich den Application Objekten ein zusätzliches Interface(IQuit o.ä.) spendiere. Ich werde nach dem Ende meiner Überlegungen meinen Entwurf hier kurz vorstellen.
In eigener Sache:
Die Developer Toolbox in der Version 0.8.6 ist online mit einer technisch und optischer verbesserten Office Compatibility Komponente.
Ab sofort verfügbar ist NetOffice 1.3
Neue Features im Überblick:
Mehr Überladungen für Methoden mit optionalen Parametern
NetOffice kann leider keine optionalen Parameter anbieten da viele Methoden Überladungen haben die in unterschiedlichen Office-Versionen definiert sind. Würde NetOffice diese zu einer einzigen Methode mit optionalen Parametern zusammenfassen würde die Information verloren gehen welche Version die jeweilige Methode anbietet. Ich hatte deswegen in der Vergangenheit viel Mail-Verkehr quer über die ganze Welt, Leute die mir Beispielprojekte mit optionalen Parametern geschickt und Vorschläge gemacht haben, vielen Dank dafür. Die Information welche Office Version die jeweilige Methode anbietet wird in NetOffice via XML Dokumentation als IntelliSense angezeigt. Ich möchte diese IntelliSense Unterstützung nicht zugunsten der optionalen Parameter opfern. Ich bin schon ein wenig stolz darauf das versionsunabhängige Office-Entwicklung mit NetOffice nicht einfach nur möglich ist sondern das man hierbei auch aktiv unterstützt wird. Dafür gibt es nun 3 zentrale Features:
1.) Während der Entwicklung durch die XML Dokumentation die anzeigt welche Office Version die jeweilige Funktionalität anbietet
2.) Nach der Entwicklung durch die Developer Toolbox die eine Code Analyse durchführt und dem Entwickler aufzeigt mit welchen Office Versionen sein Code funktioniert
3.) Das neue EntityIsAvailable Feature (siehe unten) das ermöglicht zur Laufzeit zu ermitteln ob eine Funktionalität zur Verfügung steht
Es wäre schade diese besondere Trademark von NetOffice aufzuweichen daher bietet NetOffice keine optionalen Parameter. Als Ersatz für Methoden mit optionalen Parametern bot NetOffice bisher jeweils eine minimale und eine maximale Funktionsüberladung an. In solche Fällen wo Methoden sehr viele optionale Parameter enthalten und der Entwickler nur einen oder wenige davon nutzen wollte ist dies jedoch nicht optimal, daher gibt es nun für Methoden mit optionalen Parametern nun die entsprechend Anzahl an Überladungen wie optionale Parameter existieren. Ich hoffe damit einen adäquaten Ersatz für optionale Parameter hergestellt zu haben.
Einfache Prüfung zur Laufzeit möglich ob ein spezfisches Feature zur Verfügung steht
Oftmals ist es hilfreich und sinnvoll zur Laufzeit zu prüfen ob ein bestimmtes Property oder Methode von der aktuellen Office Version angeboten wird.
Daher bietet jedes Objekt in NetOffice nun die Metode 'bool EntityIsAvailable(string name);' an. Dazu ein Beispiel:
// Neue E-mail in Outlook erstellen
Outlook.MailItem mailItem = outlookApplication.CreateItem(OlItemType.olMailItem) as Outlook.MailItem;
// BodyFormat ist nicht verfügbar in Outlook 2000, wir prüfen zur Laufzeit ob es zur Verfügung steht
if(mailItem.EntityIsAvailable("BodyFormat"))
mailItem.BodyFormat = OlBodyFormat.olFormatPlain;
mailItem.Body = "kind regards from NetOffice;
mailItem.Subject = "Hello";
mailItem.Display();
mailItem.Close(OlInspectorClose.olDiscard);
Enumeratoren für Listen ohne nativen Enumerator Support
Einige Auflistungstypen in Office, insbesondere in Outlook verfügen über ein Default Item(in .NET bekannt als this indexer), einen Count,
jedoch leider nicht über einen Enumerator der ein einfaches foreach ermöglicht. In den von Microsoft seperat breit gestellten Primary Interop Assemblies wurden diese Enumeratoren daher manuell ergänzt. NetOffice tut das jetzt auch. Eine Liste welche Objekte dies betrifft findet sich hier:Issue #16739
Integrierte Debug Console
Die Debug Console enthält eine bewusst simpel gehaltene Log-Funktion, sie zeichnet automatisch alle COMExceptions auf die bei der Interaktion mit Office auftreten. Ich erhoffe mir dadurch einen schnelleren und besseren Support im NetOffice Discussion Board. Wer von Office eine Exception bekommt und dazu eine Frage im Board oder hier im Forum Office-Technologien stellen möchte, fügt den Inhalt der Debug Console seinem Posting an, so kann Ihm oder Ihr schneller geholfen werden.
Verbesserter Beispielcode
Der Beispielcode wurde hinsichtlich der neuen Features überarbeitet, dazu gibt es 2 neue Beispiele und ein 1 neues Tutorial für die Nutzung von EntityIsAvailable und der Debug Console.
Developer Toolbox 0.9
Die Developer Toolbox hat nun technisch und optisch ihren finalen Stand erreicht.
Da NetOffice 1.3 neue Funktionsüberladungen und zusätzliche Enumeratoren mitbringt, ist ein Update der Developer Toolbox auf Version 0.9 erforderlich wenn man die Office Compatibility Komponente für die Code-Analyse nutzt.
In diesem Sinne liebe Freunde, happy Coding!
Das kling super. Gleich mal testen.
Hallo,
Ich habe ein kurzes Update nachgeschoben. Grund ist das Issue #17015
Einige wenige Methoden in Office verwenden Out Parameter. NetOffice hatte das jedoch aufgrund meiner Unachtsamkeit bisher nicht unterstützt bzw. die betreffenden Parameter nicht mit dem out Qualifizerer angeboten. Dieses Missgeschick ist nun behoben.
@Sebastian.Lange: Erstmal vielen Dank für tolle Bibliothek. Ich hätte gern eine Frage über die Meldung von Bibliothek. Wenn Frage in diesem Thread nicht erlaubt ist, bitte für mich in richtigen Ort verschieben. Danke.
Stand: Ich habe auf meinem Rechner Microsoft Office 2010 installiert außer MS Access. Ich nutze noch die Version 2003 für MS Access. Bitte siehe Anhang.
Frage: Ich würde gern mit deiner Bibliothek alle Kontrolle von aller Formularen in einer MS Access Dateien ermitteln. Der Code sieht ungefähr so aus
LateBindingApi.Core.Factory.Initialize();
Access.Application application = new Access.Application();
try
{
application.OpenCurrentDatabase(@"D:\Temp\tri.mdb", false);
foreach (AccessObject frm in application.CurrentProject.AllForms)
{
application.DoCmd.OpenForm(frm.Name, Access.Enums.AcFormView.acDesign, Missing.Value, Missing.Value, Access.Enums.AcFormOpenDataMode.acFormPropertySettings, Access.Enums.AcWindowMode.acWindowNormal);
foreach (var contron in application.Forms[frm.Name].Controls) //Hier tritt Fehler auf
{
//Tu was
}
application.DoCmd.Close(Access.Enums.AcObjectType.acForm, frm.Name, Access.Enums.AcCloseSave.acSaveYes);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Ich habe dann Exception bekommen. Es lautet
"Class not exists: NetOffice.AccessApi.Checkbox"
"Class not exists: NetOffice.AccessApi.Combobox"
Wie konnte ich diese Meldung verstehen? Danke.
Hallo,
Da es sich -möglicherweise- um ein Fehlverhalten der API handeln könnte ist das Posting hier meiner Ansicht nach berechtigt, die Lösungssuche erfolgt dann allerdings via PM. Wenn klar ist was passiert ist sollte man die Auflösung natürlich anschliessend hier posten. Daher hast du jetzt auch gleiche eine PM von mir.
So, wie sich rausstellte handelte es sich tatsächlich um einen -quasi- Fehler.
NetOffice untersucht COM Proxies zur Lauzfzeit und ermittelt die namensgleiche Wrapper Klasse, so wird einem Proxy vom Typ Application in Word automatisch die Wrapperklasse NetOffice.WordApi.Application zugeordnet. Im hier vorliegenden Fall
hat der Proxy seinen Namem einfach klein geschrieben zurück gegeben was ich so noch nie erlebt habe.
Ich habe nur einen einzige Zeile im Code ändern müssen damit nichts mehr case-sensitive läuft 😉 Behoben!
Ich habe soeben das NetOffice Release 1.4 veröffentlicht.
Was ist neu?:
Ankündigung:
Die nächste NetOffice Version wird in VB.NET implementiert sein(bis auf den Kern)
Auswirkungen für C# Entwickler entstehen dadurch allerdings nicht. Es geht im nächsten Release darum den bestehenden VBA Code dieser Welt via Copy'n'Paste zu VB.NET portierbar zu machen. Das ist mit C# jedoch nicht zu erreichen. Ausserdem wird sich die nächste Version nach aussen als COM Interop Assembly darstellen, dies ermöglicht ein direktes einbetten der NetOffice Assemblies. Damit das eigene Assembly dabei nicht übermässig aufgebläht wird gibt es dafür in der Developer Toolbox eine Shrink Komponente die eine abespeckte NetOffice Version basierend auf dem eigenen Assembly erstellt. Anmerkungen/Wünsche und Vorschläge sind mir dazu natürlich willkommen.
EDIT: Ich habe inzwischen festgestellt das Visual Basic einige Unzulänglichkeiten mitbringt die eine Umstellung auf VB.NET vielleicht unmöglich machen. Just for Info
Hallo,
Ich habe soeben ein Update auf das Release 1.4.1 online gestellt.
Im Release 1.4.0 hatte sich bedauerlicher Weise ein Fehler im neu eingeführten SafeMode eingeschlichen. Der SafeMode(bool Settings.EnableSafeMode;) dient dazu nicht vorhandene Funktionalität einer Office Version automatisch zu erkennen und beim Aufruf eine EntitityNotSupportedException auszulösen. Entwickler können ihre Fehlerbehandlung dadurch besser anpassen bzw. besser erkennen das es sich um eine nicht unterstützen Aufruf handelt. Das Feature wird durch einen Cache unterstützt der fälschlicher Weise bei Dispose Aufrufen gelöscht wurde, ausserdem war der SafeMode per Voreinstellung aktiviert was natürlich nicht sein sollte und das Problem verschärft hat.
Ich habe für NetOffice einen Twitter Account eingerichtet in dem ich Issues und Updates durchgebe. @net_office
Ich habe die NetOffice Developer Toolbox um eine weiteres Feature ergänzt.
Office UI
Jeder Office Entwickler der die klassische Oberfläche in Office ergänzt oder modifiziert kennt möglicherweise das Problem das UI Elemente (unbeabsichtigt) nicht ordnungsgemäss entfernt werden. Das Ergebniss sind "UI Leichen" die persistent in Office verbleiben und die man manuell oder via Code wieder entfernen muss.
Die manuelle Entfernung ist dabei je nach Office Version garnicht mal so einfach, darum bietet die Office UI Komponente einen Weg das auf einfachem Weg zu erledigen. Als Nebeneffekt sind Manipulationen die dem Benutzer in der Form nicht offen stehen ebenfalls möglich.
Ich habe gerade die finale Version des NetOffice Visual Studio Projekt Assistent online gestelt.
Verfügbar sind Assistenten für:
Sowohl C# als auch VB.NET werden unterstützt.