如何替换评论的内部文本
How to replace the InnerText of a Comment
我试过以下方法:
comment.InnerText=comment.InnerText.Replace(comment.InnerText,new_text);
这不起作用,因为我们只能读取 InnerText 属性。如何有效地更改 InnerText 值以便将修改保存到 WordProcessing.CommentsPart.Comments
和 MainDocumentPart.Document
?
编辑:DocumentFormat.OpenXml.Wordprocessing.Comment
是评论的 class。
编辑 2:方法:
public void updateCommentInnerTextNewWorkItem(List<Tuple<Int32, String, String>> list){
//DOCX.CDOC.Comments -> WordProcessingCommentsPart.Comments
//DOCX._CIT -> Dictionary<int,string>
foreach (var comm in DOCX.CDOC.Comments)
{
foreach (var item in list)
{
foreach (var item_cit in DOCX._CIT)
{
if (((Comment)comm).InnerText.Contains("<tag>") && item.Item3.Contains(item_cit.Value))
{
comm.InnerXml = comm.InnerXml.Replace(comm.InnerText, item.Item1 + "");
//comm.InnerText.Replace(comm.InnerText,item.Item1+"");
//DOCX.CDOC.Comments.Save();
//DOCX.DOC.MainDocumentPart.Document.Save();
}
if (((Comment)comm).InnerText.Contains("<tag class") && item.Item3.Contains(item_cit.Value))
{
//comm.InnerText.Replace(comm.InnerText, item.Item1 + "");
comm.InnerXml = comm.InnerXml.Replace(comm.InnerText, item.Item1 + "");
//DOCX.CDOC.Comments.Save();
//DOCX.DOC.MainDocumentPart.Document.Save();
}
}
}
}
DOCX.CDOC.Comments.Save();
DOCX.DOC.MainDocumentPart.Document.Save();
}
它是只读的,因为它 returns 删除了所有 XML 标签的 XML 内容。所以设置它会去掉所有 XML 标签。
如果您要替换的文本不跨越标签,您可以只替换 XML:
中的文本
comment.InnerXml=comment.InnerXml.Replace(comment.InnerText,new_text);
啊....这个有点complex.And我也遇到过同样的问题
您将需要 XmlElement Class.And 例如,有一个名为 xmlDoc 的变量已从 XmlDocument 实例化。
然后你应该使用方法 SelectSingleNode 来获取你想要的 XmlNode 的引用 edit.Here 你需要使用这个将 XmlNode 转换为 XmlElement(假设 XmlNode 被命名为 'node'):
XmlElement XmlEle = (XmlElement)node;
同样简单的方法,你可以使用这个:
XmlElement XmlEle = (XmlElement)xmlDoc.SelectSingleNode("dict/integer");
现在您可以使用变量 XmlEle 来替换 InnerText,因为它只是一个参考。
像这样:
XmlEle.InnerText = TopNumber.ToString();
这不是那么容易(但仍然不复杂)。评论具有结构以及文档的正文 - 它可以包含段落、运行等。InnerText 将只 return 给你文本评论中所有段落的所有 运行 的文本值,所以现在你明白为什么你不能只设置这个值。
所以首先你必须删除所有评论的段落:
comment.RemoveAllChildren<Paragraph>();
下一步是使用 运行 添加包含您需要的文本的新段落:
Paragraph paragraph = new Paragraph();
Run run = new Run();
Text text = new Text();
text.Text = "My comment";
run.Append(text);
paragraph.Append(run);
comment.Append(paragraph);
毕竟不要忘记保存更改:
doc.MainDocumentPart.WordprocessingCommentsPart.Comments.Save();
不使用 innterxml,用户文本
foreach (Paragraph paragraph in document.MainDocumentPart.Document.Descendants<DocumentFormat.OpenXml.Wordprocessing.Paragraph>())
{
bool ss = paragraph.InnerXml.Contains("commentRangeStart");
bool ee = paragraph.InnerXml.Contains("commentRangeEnd");
if (ss && ee)
{
foreach (Run run in paragraph.Elements<Run>())
{
foreach (Text text in run.Elements<Text>())
{
text.Text = "your word " ;
}
}
}
}
我试过以下方法:
comment.InnerText=comment.InnerText.Replace(comment.InnerText,new_text);
这不起作用,因为我们只能读取 InnerText 属性。如何有效地更改 InnerText 值以便将修改保存到 WordProcessing.CommentsPart.Comments
和 MainDocumentPart.Document
?
编辑:DocumentFormat.OpenXml.Wordprocessing.Comment
是评论的 class。
编辑 2:方法:
public void updateCommentInnerTextNewWorkItem(List<Tuple<Int32, String, String>> list){
//DOCX.CDOC.Comments -> WordProcessingCommentsPart.Comments
//DOCX._CIT -> Dictionary<int,string>
foreach (var comm in DOCX.CDOC.Comments)
{
foreach (var item in list)
{
foreach (var item_cit in DOCX._CIT)
{
if (((Comment)comm).InnerText.Contains("<tag>") && item.Item3.Contains(item_cit.Value))
{
comm.InnerXml = comm.InnerXml.Replace(comm.InnerText, item.Item1 + "");
//comm.InnerText.Replace(comm.InnerText,item.Item1+"");
//DOCX.CDOC.Comments.Save();
//DOCX.DOC.MainDocumentPart.Document.Save();
}
if (((Comment)comm).InnerText.Contains("<tag class") && item.Item3.Contains(item_cit.Value))
{
//comm.InnerText.Replace(comm.InnerText, item.Item1 + "");
comm.InnerXml = comm.InnerXml.Replace(comm.InnerText, item.Item1 + "");
//DOCX.CDOC.Comments.Save();
//DOCX.DOC.MainDocumentPart.Document.Save();
}
}
}
}
DOCX.CDOC.Comments.Save();
DOCX.DOC.MainDocumentPart.Document.Save();
}
它是只读的,因为它 returns 删除了所有 XML 标签的 XML 内容。所以设置它会去掉所有 XML 标签。
如果您要替换的文本不跨越标签,您可以只替换 XML:
中的文本comment.InnerXml=comment.InnerXml.Replace(comment.InnerText,new_text);
啊....这个有点complex.And我也遇到过同样的问题
您将需要 XmlElement Class.And 例如,有一个名为 xmlDoc 的变量已从 XmlDocument 实例化。 然后你应该使用方法 SelectSingleNode 来获取你想要的 XmlNode 的引用 edit.Here 你需要使用这个将 XmlNode 转换为 XmlElement(假设 XmlNode 被命名为 'node'):
XmlElement XmlEle = (XmlElement)node;
同样简单的方法,你可以使用这个:
XmlElement XmlEle = (XmlElement)xmlDoc.SelectSingleNode("dict/integer");
现在您可以使用变量 XmlEle 来替换 InnerText,因为它只是一个参考。
像这样:
XmlEle.InnerText = TopNumber.ToString();
这不是那么容易(但仍然不复杂)。评论具有结构以及文档的正文 - 它可以包含段落、运行等。InnerText 将只 return 给你文本评论中所有段落的所有 运行 的文本值,所以现在你明白为什么你不能只设置这个值。
所以首先你必须删除所有评论的段落:
comment.RemoveAllChildren<Paragraph>();
下一步是使用 运行 添加包含您需要的文本的新段落:
Paragraph paragraph = new Paragraph();
Run run = new Run();
Text text = new Text();
text.Text = "My comment";
run.Append(text);
paragraph.Append(run);
comment.Append(paragraph);
毕竟不要忘记保存更改:
doc.MainDocumentPart.WordprocessingCommentsPart.Comments.Save();
不使用 innterxml,用户文本
foreach (Paragraph paragraph in document.MainDocumentPart.Document.Descendants<DocumentFormat.OpenXml.Wordprocessing.Paragraph>())
{
bool ss = paragraph.InnerXml.Contains("commentRangeStart");
bool ee = paragraph.InnerXml.Contains("commentRangeEnd");
if (ss && ee)
{
foreach (Run run in paragraph.Elements<Run>())
{
foreach (Text text in run.Elements<Text>())
{
text.Text = "your word " ;
}
}
}
}