Я был разочарован этим все выходные, плюс день или два, так что любая помощь будет весьма признательна.
Я пытаюсь написать программу, которая может программно перейти в библиотеку документов SharePoint 2007, открыть файл, изменить его содержимое и затем вернуть файл. Я записал все, кроме последней части. Причина, по которой задействован Office Open XML, заключается в том, что я открываю документ и изменяю его - через Office Open XML SDK. У меня вопрос: как мне вернуть его из документа в библиотеку?
На мой взгляд, проблема в том, что в самом объекте WordprocessingDocument нет функции сохранения. Это мешает мне сохранить его в функции SaveBinary SPFile.





Вчера я видел веб-трансляцию с Эндрю Коннеллом, где он открыл документ из библиотеки документов, добавил водяной знак и снова сохранил файл. Похоже, вам стоит взглянуть на эту веб-трансляцию: https://msevents.microsoft.com/CUI/WebCastRegistrationConfirmation.aspx?culture=en-US&RegistrationID=1299758384&Validate=false
Кстати, я обнаружил, что все 10 веб-трансляций в этой серии были очень хорошими.
Вы должны использовать поток для обратной записи измененного OOXML в SPFile. Надеюсь, этот пример поможет!
Stream fs = mySPFile.OpenBinaryStream(); using (WordprocessingDocument ooxmlDoc = WordprocessingDocument.Open(fs, true)) { MainDocumentPart mainPart = wordDoc.MainDocumentPart; XmlDocument xmlMainDocument = new XmlDocument(); xmlMainDocument.Load(mainPart.GetStream()); // change the contents of the ooxmlDoc / xmlMainDocument Stream stream = mainPart.GetStream(FileMode.Open, FileAccess.ReadWrite); xmlMainDocument.Save(stream); // the stream should not be longer than the DocumentPart stream.SetLength(stream.Position); } mySPFile.SaveBinary(fs); fs.Dispose();
Я старался делать то, что он делал, как можно точнее. Однако он не показал фрагмент кода, чтобы вернуть элемент в SharePoint! На самом деле довольно раздражает (не то чтобы я вас виню. Раздражает ЕГО).