Sharepoint文档库之:Word文档内容与Sharepoint列表栏内容的联动
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sharepoint文档库之:Word文档内容与Sharepoint列表栏内容的联动相关的知识,希望对你有一定的参考价值。
参考技术A 在建Sharepoint的word文档库的时候,有的时候希望word文档的内容能够在Sharepoint文档库列表栏中出现,以便于文档归类、汇总和数据提取。见下图1:如果在word文档中输入一遍内容,再在Sharepoint列表栏中再输入一次相同的内容,一个是降低了工作效率,另一个就是多出了一个出现人工错误的可能。这是使用文档库的人员非常不希望有的工作方式。
那么就希望在word文档中输入的内容可以在列表栏中自动提取,而不是二次手工输入。
在反复研究Sharepoint的列表栏与word文档之间的关系后发现,列表栏的内容是存在于word文档的属性里的。如果调出word文档的属性就能看到列表栏的内容。
他们的互动关系是:
word文档内容<-->word文档属性<-->Sharepoint列表栏内容
01
如何调用和修改word文档的属性的?
在word文档的左上角,单击office按钮、准备、属性,就可以看到word文档的属性信息展示在菜单和文档中间的部分,调用就完成了。这个时候,也可以自由修改属性内容了。见图2:
这些属性信息就是Sharepoint的列表栏内容。将来建好Sharepoint列表栏之后,栏内容就会展示在属性里。
02
如何建Sharepoint文档库的word文档模版?
首先,在Sharepoint网页中建一个文档库,文件类型选word文档。
步骤是:网站操作、创建、文档库、文档模版选word文档,如果想建excel电子表格也可以,步骤相同。
然后,建文档库列表栏,最好一次建完整了,不然后面得反复导入更新属性的word文档模版。见图3:
现在开始制作word文档模版。
在建好的文档库里,新建项目,打开的是一个空白的word文档,用步骤01调出文档属性,我们就会看见,Sharepoint列表栏的内容都展示出来了。
在空白的文档里建好需要的格式,保存到本地机里。
03
如何把word文档的输入内容与Sharepoint列表栏内容,联系起来进行联动?
在02中得到的word模版中,假如输入内容与Sharepoint列表栏内容相同,希望只在一个地方输入,另一个地方自动更新,那么就在word文档中插入一个属性。
操作步骤:插入、文档部件、属性名字。见图4:
这个时候,无论是在文档里输入这个内容,还是在列表里输入内容,这两个地方的内容都一致了。
04
如何把word模版导入Sharepoint文档库?
用Sharepoint Designer把模版导入到网页的DocList/Forms文件夹里,步骤是:打开Sharepoint Designer、单击文件、导入、文件,导入文件后修改文件名为template,也可以不改,只是为了好识别。见图5:
右键template,进入template属性中,拷贝标题中template地址,后面要粘贴到文档库设置、高级设置中的模版URL的地址处,见图6:
05
检查新建的word文档。
新建的word文档,我们看到文档格式跟模版一致了。输入word文档中的内容,属性内容跟着变;输入属性内容,word文档内容变。
保存word文档以后,Sharepoint文档库列表内容也跟着联动了。见图7:
06
在网页中新建的word文档,对于Window XP的系统可以自动保存到网页列表中。
Win7以上系统,在网页中新建的word文档可能要先存到本地,再上传到文档库里,这个过程还没找到好方法自动保存到网页上。
文档内容和Sharepoint列表栏内容联动的方法是一样的,就是多了重新上传的步骤。
这是我在建文档库时,使用的一些小技巧,分享出来,希望有用。
在 C# 中获取 SharePoint 富文本字段值
【中文标题】在 C# 中获取 SharePoint 富文本字段值【英文标题】:Get SharePoint rich text field value in C# 【发布时间】:2019-10-09 22:51:11 【问题描述】:如果富文本字段包含新行、粗体、斜体、格式或任何颜色,我的文档的第一行,即富文本字段的值,将被很好地导出(使用相同的格式,即item),其余代码没有导出到word文档中。但是,如果我用记事本打开导出的文件,我可以看到整个代码正在被导出,但在 word 中只有第一行可见。
我尝试在 Word 文档中导出 SharePoint 列表。我在列表项中有几个富文本字段。如果富文本字段仅包含一行简单字符串,我可以在 word 文档中导出我需要的所有内容,一切正常。
strHTMLContent.Append("<table style=margin-top: 8px; border=0 frame=hsides rules=rows cellpadding=0 cellspacing=0 width=100%>".ToString());
//Looping through each list item in the list
foreach (SPListItem oListItem in collListItems)
count1++;
strHTMLContent.Append("<tr><td>"+count1+". "+ oListItem.GetFormattedValue("DocName_Arm") + "</td></tr>");
strHTMLContent.Append("</table>".ToString());
// Giving path for saving word documents
SPList word = (SPDocumentLibrary)oSiteCollection.AllWebs["My URL"].Lists["Mylist"];
SPListItem item1 = word.Items[0];
string destUrl = word.RootFolder.Url + "/" + "MyWord7" + ".doc";
// Encoding the document to UTF8 format
byte[] byteArray = Encoding.UTF8.GetBytes((strHTMLContent.ToString()));
SPFile destFile = word.RootFolder.Files.Add(destUrl, byteArray, true);`
没有错误,我得到了 Docname_Arm 的值,格式与列表项中的格式相同,其他代码(我在描述的代码之后有另一个 HTML 表)在 word 文档中不起作用(仅当 Docname_Arm 具有某些格式时,如果不能正常工作),但在记事本中可见
【问题讨论】:
【参考方案1】:您可以使用GetFieldValueAsHtml 获取富文本字段的html sn-p:
using (SPSite site = new SPSite("http://sp/sites/jerry"))
using (SPWeb web = site.OpenWeb())
var list = web.Lists.TryGetList("TestList");
var item = list.GetItemById(1);
var eventDescField = list.Fields.GetFieldByInternalName("Parameters");
var eventDesc = item[eventDescField.Id];
var eventDescText = eventDescField.GetFieldValueAsHtml(eventDesc);
SPList word = (SPDocumentLibrary)web.Lists["Jerrydoc"];
string destUrl = word.RootFolder.Url + "/" + "MyWord8" + ".doc";
// Encoding the document to UTF8 format
byte[] byteArray = Encoding.UTF8.GetBytes((eventDescText.ToString()));
SPFile destFile = word.RootFolder.Files.Add(destUrl, byteArray, true);
这是富文本字段的列表项数据,带有一些字体颜色文本的表格:
【讨论】:
我不知道为什么,但是当我使用GetFieldValueAsHtml时,它的格式的字段被导出,但是其余的代码没有被导出到word文档中。但是在记事本中,我可以看到所有代码都以正确的方式导出 GetFieldAsHtml 将返回 html sn-p 和普通文本值,我添加了捕获,请检查。它可以按预期导出为带有文本和 html 片段的单词。 感谢杰瑞的帮助。你的代码帮助我找到了我的错误。但是您是否尝试为 ex 连接。 “1.”+ 测试 2?它从一个新行给我带来了“Test2”的值,因为我假设它在 标签中我得到 1.new line Test2 我怎样才能得到“1.Test2”?【参考方案2】:这对我有用,但它会丢失格式和新行。
int id1 = (int)oListItem["ID"];
SPListItem item = oList.GetItemById(id1);
var eventText1Field1 = oList.Fields.GetFieldByInternalName("DocName_Arm");
var eventText11 = item[eventText1Field1.Id];
var eventText1Text1 = eventText1Field1.GetFieldValueAsText(eventText11);
【讨论】:
以上是关于Sharepoint文档库之:Word文档内容与Sharepoint列表栏内容的联动的主要内容,如果未能解决你的问题,请参考以下文章
访问 VBA 自动化能够将 Word 文档保存到 Sharepoint 但不能保存到 Excel 电子表格
从当前打开的从 Sharepoint 下载的 Word 文档 .docm 中获取字节数组,而不保存到本地驱动器