Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
NetOffice - Ein versionsunabhängiger Wrapper für MS-Office
user8744
myCSharp.de - Member



Dabei seit:
Beiträge: 1201

Themenstarter:

NetOffice - Ein versionsunabhängiger Wrapper für MS-Office

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 6 mal editiert, zum letzten Mal von user8744 am .
Attachments
private Nachricht | Beiträge des Benutzers
..Heinz..
myCSharp.de - Member



Dabei seit:
Beiträge: 135

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
xxxprod
myCSharp.de - Experte

Avatar #avatar-2329.gif


Dabei seit:
Beiträge: 1420
Herkunft: Österreich\Wien

beantworten | zitieren | melden

Habs nicht probiert aber auf sowas habe ich schon lange gewartet!!! :)

Hoffe bald einmal das Framework einsetzen zu können.

Lg, XXX
private Nachricht | Beiträge des Benutzers
user8744
myCSharp.de - Member



Dabei seit:
Beiträge: 1201

Themenstarter:

beantworten | zitieren | melden

Hallo Heinz

Die Signierung ist eine sinnvolle Option für eine Version 1.0 denke ich.
Momentan ist ja noch 0.8 Alpha(stable)

Sebastian
private Nachricht | Beiträge des Benutzers
Marsti
myCSharp.de - Member



Dabei seit:
Beiträge: 124

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Marsti am .
private Nachricht | Beiträge des Benutzers
JunkyXL
myCSharp.de - Experte

Avatar #avatar-3234.gif


Dabei seit:
Beiträge: 1732
Herkunft: Ein paar Bytes südlich von string

beantworten | zitieren | melden

Sehr gute Arbeit! Werde ich mir mal anschauen. Könnte das gut gebrauchen.
private Nachricht | Beiträge des Benutzers
MagicAndre1981
myCSharp.de - Member

Avatar #avatar-2623.jpg


Dabei seit:
Beiträge: 913
Herkunft: Nordhausen

beantworten | zitieren | melden

danke das schaue ich mir mal an.

Wie sieht es mit 32/64Bit (AnyCPU) Kompatibilität aus? Was muss man da alles beachten?
private Nachricht | Beiträge des Benutzers
user8744
myCSharp.de - Member



Dabei seit:
Beiträge: 1201

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von user8744 am .
private Nachricht | Beiträge des Benutzers
MagicAndre1981
myCSharp.de - Member

Avatar #avatar-2623.jpg


Dabei seit:
Beiträge: 913
Herkunft: Nordhausen

beantworten | zitieren | melden

Zitat von Sebastian.Lange
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
private Nachricht | Beiträge des Benutzers
..Heinz..
myCSharp.de - Member



Dabei seit:
Beiträge: 135

beantworten | zitieren | melden

Zitat von Sebastian.Lange
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.
private Nachricht | Beiträge des Benutzers
MagicAndre1981
myCSharp.de - Member

Avatar #avatar-2623.jpg


Dabei seit:
Beiträge: 913
Herkunft: Nordhausen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
user8744
myCSharp.de - Member



Dabei seit:
Beiträge: 1201

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
user8744
myCSharp.de - Member



Dabei seit:
Beiträge: 1201

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
MagicAndre1981
myCSharp.de - Member

Avatar #avatar-2623.jpg


Dabei seit:
Beiträge: 913
Herkunft: Nordhausen

beantworten | zitieren | melden

ok, ich spiele nun etwas damit rum.

Eine Frage. Warum packst du die große RAR immer mit in die Quellcodeverwaltung?
private Nachricht | Beiträge des Benutzers
user8744
myCSharp.de - Member



Dabei seit:
Beiträge: 1201

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
MagicAndre1981
myCSharp.de - Member

Avatar #avatar-2623.jpg


Dabei seit:
Beiträge: 913
Herkunft: Nordhausen

beantworten | zitieren | melden

Zitat von Sebastian.Lange
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.
private Nachricht | Beiträge des Benutzers
ManiacViper
myCSharp.de - Member



Dabei seit:
Beiträge: 5
Herkunft: Dresden

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1928
Herkunft: NRW

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Spontifixus
myCSharp.de - Member

Avatar #avatar-3052.gif


Dabei seit:
Beiträge: 408
Herkunft: Hannover

beantworten | zitieren | melden

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 :)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Spontifixus am .

Moderationshinweis von herbivore (27.06.2011 - 16:53:33):

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".

private Nachricht | Beiträge des Benutzers
mrbob
myCSharp.de - Member



Dabei seit:
Beiträge: 46

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
user8744
myCSharp.de - Member



Dabei seit:
Beiträge: 1201

Themenstarter:

beantworten | zitieren | melden

Hallo Heinz,

NetOffice Release 1.0 mit signierten Assemblies ist jetzt online. Siehe erster Beitrag.
private Nachricht | Beiträge des Benutzers
..Heinz..
myCSharp.de - Member



Dabei seit:
Beiträge: 135

beantworten | zitieren | melden

Habs getestet. Wunderbar :-)
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1928
Herkunft: NRW

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
ChrDressler
myCSharp.de - Member



Dabei seit:
Beiträge: 182
Herkunft: Sachsen

beantworten | zitieren | melden

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:
- direktes COM: ist an Unterschieden zwischen den Excelversionen gescheitert
- Xml-Writer von CarlosAg: ein recht gutes Teil, wenn man nur schreiben will, läuft voll ohne Excel. Ich aber muss in bestehende Blätter schreiben, und da gibts Schwierigkeiten mit der Zelladressierung.
- Ado.Net: immer wieder Fehler "Installierbares Isam nicht gefunden" auf diversen Maschinen in freier Wildbahn.

-christoph
private Nachricht | Beiträge des Benutzers
user8744
myCSharp.de - Member



Dabei seit:
Beiträge: 1201

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
user8744
myCSharp.de - Member



Dabei seit:
Beiträge: 1201

Themenstarter:

beantworten | zitieren | melden

Es gibt ein neues Release

NetOffice Release 1.1

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von user8744 am .
private Nachricht | Beiträge des Benutzers
Spontifixus
myCSharp.de - Member

Avatar #avatar-3052.gif


Dabei seit:
Beiträge: 408
Herkunft: Hannover

beantworten | zitieren | melden

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 :)
private Nachricht | Beiträge des Benutzers
seeba
myCSharp.de - Member



Dabei seit:
Beiträge: 76

beantworten | zitieren | melden

Hallo Sebastian,
super Arbeit!
Kann man das "Speichern als PDF" auch über deinen Wrapper ausführen?

Grüße
ebenfalls Sebastian
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von seeba am .
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

Hallo,

diese Antwort übernehme ich dann einfach mal :P

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Taipi88 am .
private Nachricht | Beiträge des Benutzers