C# 向使用OpenXML创建的电子表格文档中的单元格添加注释
我正在使用openXML创建一个xlsx文件。我想给一些行单元格添加注释。是否有任何方法向单元格添加注释。或者我应该使用Microsoft.Office.Interop向excel单元格添加注释吗?我使用了,它允许您加载excel或Word文件,然后发出C代码以生成准确的文件 然后我创建了一个带有注释的文件。首先,我尝试了两条注释,但它生成的代码量使我很难判断是什么 结果并不好看。你可以减少很多,也许可以消除一些。但这是一种了解引擎盖下发生了什么的方法 你也可以跳过所有这些,直接使用它,看看接下来会发生什么,你可以想象为什么有人觉得有必要让它变得更简单 关键步骤是: 创建新的注释 创建一个新的评论列表?!!! 创建一个新注释,该注释具有指示其所属单元格的引用属性 创建新的注释文本 创建一个新的运行 将运行追加到注释文本 将CommentText附加到注释中 将注释附加到CommentsList 将CommentsList附加到注释中 将工作表CommentSpart.Comments属性设置为CommentsC# 向使用OpenXML创建的电子表格文档中的单元格添加注释,c#,openxml,xlsx,C#,Openxml,Xlsx,我正在使用openXML创建一个xlsx文件。我想给一些行单元格添加注释。是否有任何方法向单元格添加注释。或者我应该使用Microsoft.Office.Interop向excel单元格添加注释吗?我使用了,它允许您加载excel或Word文件,然后发出C代码以生成准确的文件 然后我创建了一个带有注释的文件。首先,我尝试了两条注释,但它生成的代码量使我很难判断是什么 结果并不好看。你可以减少很多,也许可以消除一些。但这是一种了解引擎盖下发生了什么的方法 你也可以跳过所有这些,直接使用它,看看接下
不确定这在当前版本中是否有效,但看看这个heps:在文档难以找到时是否有帮助。它获取一个现有的电子表格并生成生成该电子表格的代码。您可以将注释添加到电子表格中,通过该工具运行注释,并查看它生成的代码。这有点像录制VBA宏并查看它以查看要调用的属性和方法。我从来没有这样做过。互操作对生物是有害的。实际上,链接到@EdneyHold的问题说明了几乎相同的事情,并提供了一些建议,使所有这些都更易于管理。我无法使用上述代码生成注释。是否有其他工作示例,比如仅仅理解如何使用openxml放置注释。当我尝试使用@EdneyHold时,@EdneyHold给出的链接出现excel错误,但没有成功放置注释。最后,我们得到了一个工作示例,在该示例中,我们至少可以放置一条注释,对于更多注释,我们将需要单元格行id和列id。在上面@EdneyHold注释的链接中也可以使用相同的方法。谢谢你们的快速帮助。
private void GenerateWorksheetCommentsPart1Content(WorksheetCommentsPart worksheetCommentsPart1)
{
Comments comments1 = new Comments(){ MCAttributes = new MarkupCompatibilityAttributes(){ Ignorable = "xr" } };
comments1.AddNamespaceDeclaration("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006");
comments1.AddNamespaceDeclaration("xr", "http://schemas.microsoft.com/office/spreadsheetml/2014/revision");
Authors authors1 = new Authors();
Author author1 = new Author();
author1.Text = "Hannen, Scott";
authors1.Append(author1);
CommentList commentList1 = new CommentList();
Comment comment1 = new Comment(){ Reference = "B3", AuthorId = (UInt32Value)0U, ShapeId = (UInt32Value)0U };
comment1.SetAttribute(new OpenXmlAttribute("xr", "uid", "http://schemas.microsoft.com/office/spreadsheetml/2014/revision", "{811649EF-4CB5-4311-BE14-228133003BE4}"));
CommentText commentText1 = new CommentText();
Run run1 = new Run();
RunProperties runProperties1 = new RunProperties();
FontSize fontSize3 = new FontSize(){ Val = 9D };
Color color3 = new Color(){ Indexed = (UInt32Value)81U };
RunFont runFont1 = new RunFont(){ Val = "Tahoma" };
RunPropertyCharSet runPropertyCharSet1 = new RunPropertyCharSet(){ Val = 1 };
runProperties1.Append(fontSize3);
runProperties1.Append(color3);
runProperties1.Append(runFont1);
runProperties1.Append(runPropertyCharSet1);
Text text1 = new Text(){ Space = SpaceProcessingModeValues.Preserve };
text1.Text = "This is my comment!\nThis is line 2!\n";
run1.Append(runProperties1);
run1.Append(text1);
commentText1.Append(run1);
comment1.Append(commentText1);
commentList1.Append(comment1);
comments1.Append(authors1);
comments1.Append(commentList1);
worksheetCommentsPart1.Comments = comments1;
}