我試圖向Excel 2007電子表格中的單元格添加註釋。我正在使用OpenXml SDK 2.0來做到這一點。使用OpenXML SDK在Excel電子表格中創建單元格註釋
我的用例是這樣的: 我創建了一個模板Excel文件,我將它複製並用作我的出發點,而不是從頭開始創建OpenXML文檔。我的模板文件在單元格A1中有註釋,因此Excel已經爲我創建了一個WorksheetCommentPart。
現在我的問題是,當我添加評論節點到評論部分電子表格不加載和Excel問我是否想要恢復。
真正困擾我的是,我在A1中的原始評論仍然存在,但是我通過編程添加的任何評論都不見了!
這裏是我的工作代碼:
使用(MemoryStream的spreadsheetStream =新的MemoryStream()){ GetGradebookSpreadsheetTemplate(spreadsheetStream);
using (SpreadsheetDocument spDoc = SpreadsheetDocument.Open(spreadsheetStream, true))
{
WorkbookPart wbPart = spDoc.WorkbookPart;
WorksheetPart wsPart = wbPart.WorksheetParts.First();
SheetData sheet = wsPart.Worksheet.GetFirstChild<SheetData>();
Comments comments = wsPart.WorksheetCommentsPart.Comments;
comments.Descendants<Author>().First().Text = string.Format("{0}, {1}", instructor.LastName, instructor.FirstName);
comments.Descendants<Text>().First().Text = string.Format("{0}, {1}", instructor.LastName, instructor.FirstName);
List<DefinedName> definedNames = new List<DefinedName>();
definedNames.Add(CreateDefinedName("COLWeb_Gradebook", sheet.NamespaceURI, "Gradebook", "1", "A"));
uint index = 4;
foreach (User u in users)
CreateUserDataRow(index++, definedNames, comments.CommentList, sheet, u, coursesForUsers[u], assignments, submissions[u]);
Cell lastCell = sheet.Descendants<Cell>().Last();
OpenXmlElement dimensionsElement = wsPart.Worksheet.Elements().Where(x => x.LocalName == "dimension").First();
dimensionsElement.SetAttribute(new OpenXmlAttribute("ref", null, "A1:" + lastCell.CellReference));
comments.Save();
wsPart.Worksheet.Save();
wbPart.Workbook.Save();
}
return spreadsheetStream.ToArray();
}
和「CreateUserDataRow」創建一個新行,但相關部分(其中「意見」是我的註釋字符串和「c」是我的手機,我想創建有關評論):
if (!string.IsNullOrEmpty(comment))
{
List<OpenXmlElement> runs = new List<OpenXmlElement>();
foreach (string row in comment.Split(new string[] { "<p>", "</p>" }, StringSplitOptions.RemoveEmptyEntries))
{
string trimmed = row.Trim();
if (!string.IsNullOrEmpty(trimmed))
{
string escaped = System.Security.SecurityElement.Escape(trimmed);
runs.Add(new Run(new RunProperties(), new Text(escaped)));
}
}
Comment commentCell = new Comment();
commentCell.Reference = c.CellReference;
commentCell.AuthorId = 0;
commentCell.AppendChild(new CommentText(runs));
comments.AppendChild(commentCell);
}
現在據我的眼睛能看到的,和KDiff3對於這個問題,我的文件是相當多的,這將是輸出,如果我要打開Excel,把註釋到細胞中的文件相同在Excel中手動。
有沒有人有一個很好的例子,用OpenXml給單元添加評論?有什麼我應該知道的關於也許關係?它是否與使用我創建的Excel文件有關,然後我將其用作模板(可能有些尺寸未設置)?
感謝您的幫助,我可以得到。
Yikes。至少我知道現在應該去哪裏看看。儘管現在查看電子表格中包含的VML文件,但這很有意義。 謝謝。 – 2009-02-27 21:17:13