在 C# 中获取 SharePoint 富文本字段值

Posted

技术标签:

【中文标题】在 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);

【讨论】:

以上是关于在 C# 中获取 SharePoint 富文本字段值的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中为富文本框分配内存

C# 保存/加载富文本速度问题

如何在 C# 的富文本框中将文本添加到用户光标的位置?

C#中,怎么使用富文本框控件显示一个文件的内容

富文本框 字段存入数据库

Power Apps原生支持富文本展示和编辑文本字段了