Я пытаюсь загрузить файл шаблона, установленный моим SPDocumentLibrary
, выполнить некоторые преобразования в OpenXML, а затем сохранить его обратно в библиотеку как документ. Я думаю, что у меня есть все шаги, кроме чтения шаблона. Я не знаю «правильного» способа открыть его (я мог бы просто использовать WebClient для его загрузки, но я чувствую себя грязно, просто набирая его). Вот что у меня есть.
public string GetOrGenerateChecklist(string PracticeName, string ContractID, string EducationDate, string MainContactInfo, string Address)
{
using (SPWeb web = SPContext.Current.Web)
{
SPDocumentLibrary list = (SPDocumentLibrary)web.Lists["Educator Checklists"];
var templetAddr = String.Concat(web.Url, '/', list.DocumentTemplateUrl);
SPQuery query = new SPQuery();
query.Query = string.Concat(
//Snip
);
var items = list.GetItems(query);
//if document exists return existing document.
if (items.Count > 0)
return String.Concat(web.Url, "/Educator Checklists/", PracticeName, " - ", ContractID, ".docx");
MemoryStream documentStream;
//copy the stream to memory
using (Stream tplStream = ????????) //<------- my problem
{
documentStream = new MemoryStream((int)tplStream.Length);
CopyStream(tplStream, documentStream);
documentStream.Position = 0L;
}
using (WordprocessingDocument template = WordprocessingDocument.Open(documentStream, true))
{
template.ChangeDocumentType(DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
MainDocumentPart mainPart = template.MainDocumentPart;
mainPart.DocumentSettingsPart.AddExternalRelationship(
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate",
new Uri(templetAddr, UriKind.Absolute));
ReplaceText(mainPart, "#PracticeName#", PracticeName);
ReplaceText(mainPart, "#EducationDate#", EducationDate);
ReplaceText(mainPart, "#MainContactInfo#", MainContactInfo);
ReplaceText(mainPart, "#Address#", Address);
}
documentStream.Position = 0L;
list.RootFolder.Files.Add(String.Concat(PracticeName, " - ", ContractID, ".docx"), documentStream);
return String.Concat(web.Url, "/Educator Checklists/", PracticeName, " - ", ContractID, ".docx");
}
}
Итак, мой вопрос, как мне получить шаблон, хранящийся в templetAddr
, загруженный в поток памяти?
Кроме того, я довольно новичок в sharepoint, поэтому, если вы заметите какие-либо другие большие ошибки, которые я допустил, сообщите мне.