SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.


OpenXml,Sharepoint, Word - The main part is missing

Unbeantwortet Dieser Beitrag hat 3 Antworten

Ohne Rang
32 Beiträge
LuckB erstellt 8 Dez 2009 12:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

ich möchte mir aus den Informationen aus Sharepoint Listen mit Hilfe von OpenXML 2.0 mir Worddokumente(.docx) generieren und diese entweder in einer Dokumentenbibliothek speichern bzw. diese dem Benutzer zum Download/zum Öffnen anbieten.

Um diese lange "Ladezeit"(deployen, issreset...) zu vermeiden habe ich das Ganze zu testzwecken innerhalb einer consolenanwendung entwickelt.

Dort funktioniert auch alles wunderbar.

Wenn ich nun aber den Code in ein Webpart einbinde und auf dem Sharepointserver ausführe wird das Worddokument ohne Probleme generiert jedoch lässt es sich nicht öffnen.

Wordmeldung:

"Diese Datei kann in Microsoft Office nicht geöffnet werden, weil Teile fehlen oder ungültig sind."

Wenn ich die Datei mit dem Document Reflector öffnen möchte bekomm ich folgende Meldung:

Error: "The specified package is invalid. The main part is missing".

 

Mittlerweile hab ich den Code zum Generieren des Worddokuments (des Inhalts) aufs minimale heruntergebrochen, was den Fehler aber nicht beseitigt.

Auszug:

using (MemoryStream newDoc = new MemoryStream())
{
        using (WordprocessingDocument wpDoc = WordprocessingDocument.Create(newDoc, WordprocessingDocumentType.Document))
        {
            MainDocumentPart mainDocPart = wpDoc.AddMainDocumentPart();
           
            mainDocPart.Document = new DocumentFormat.OpenXml.Wordprocessing.Document();

            var element =
                new Document(
                    new Body(
                        new Paragraph(
                            new Run(
                                new Text("Dies ist ein Text")))));

            mainDocPart.Document = element;
            mainDocPart.Document.Save();
        }

}

Anschließend wird das Dokument mitHilfe des MemoryStreams eben zu einer Dokumentbibliothek hinzugefügt.

Wenn ich den Code in der Consolenanwendung ausführe wird das Dokument korrekt gefüllt und gespeichert, wenn ich den Code auf dem Sharepointserver ausführe wird das Dokument mit den zuvor beschriebenen Fehlern gespeichert.

Die beiden Dokumente unterscheiden sicht auch in ihrer Dateigröße.

Zu den besagten Fehlermeldungen habe ich keinerlei relevante Infos finden können und ich verzweifle langsam etwas.

 

Würde mich freuen, falls mir jemand von Euch weiterhelfen kann.

Vielen Dank schonmal.

 

Gruss

Alle Antworten

Ohne Rang
115 Beiträge
A C Als Antwort am 5 Jun 2012 13:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

gibt es zu dem Problem bereits eine Lösung? Denn ich versuche mich ebenfalls daran, mit dem Ergebnis, dass lokal die Datei korrekt erstellt wird, aber in der Doc-Lib nur das leere Word-Dokument erzeug wird...

 

 

Aus der Ferne betrachtet, sieht alles ganz anders aus.

Ohne Rang
23 Beiträge
StefanBauer Als Antwort am 5 Jun 2012 14:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Kannst du bitte auch etwas Code posten mit dem du das Word Document erstellst ?

Danke!!

Ohne Rang
115 Beiträge
A C Als Antwort am 5 Jun 2012 15:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich hab das Problem gefunden, eigentlich identisch mit dem geposteten code, jedoch fehlte eine Kleinigkeit:

 

using (MemoryStream newDoc = new MemoryStream())
{
using (WordprocessingDocument wpDoc = WordprocessingDocument.Create(newDoc, WordprocessingDocumentType.Document))
{
MainDocumentPart mainDocPart = wpDoc.AddMainDocumentPart();

mainDocPart.Document = new DocumentFormat.OpenXml.Wordprocessing.Document();

var element =
new Document(
new Body(
new Paragraph(
new Run(
new Text("Dies ist ein Text")))));

mainDocPart.Document = element;
mainDocPart.Document.Save();

wpDoc.close(); // wichtig

string fileLink = myWeb.Url+"/"+myDocLibUrl.RootFolder.toString()+"/"+"fileName; //build string of file url

mySPFile = myWeb.Files.Add(fileLink,newDoc,true); // add FIle to SP....


}

}

Aus der Ferne betrachtet, sieht alles ganz anders aus.