diff --git a/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj b/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
index d998123..3e55efc 100644
--- a/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
+++ b/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
@@ -137,6 +137,7 @@
+
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs
index 4cb6f5e..5dc6842 100644
--- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs
@@ -306,8 +306,7 @@
var comments = root.GetFirstChild().ChildElements;
// **** MAYBE FUTURE SHAPE SIZE SUPPORT
- // var shapes = wsPart.VmlDrawingParts.SelectMany(p => new System.Xml.XmlTextReader(p.GetStream()).Read()
- XDocument xdoc = XDocumentExtensions.Load(wsPart.VmlDrawingParts.First().GetStream(FileMode.Open));
+ XDocument xdoc = GetCommentVmlFile(wsPart);
foreach (Comment c in comments) {
// find cell by reference
@@ -326,13 +325,9 @@
LoadFont(runProperties, rt);
}
- var xml = xdoc.Root.Element("xml");
- XElement shape;
- if (xml != null)
- shape = xml.Elements().First(e => (string)e.Attribute("type") == "#_x0000_t202");
- else
- shape = xdoc.Root.Elements().First(e => (string)e.Attribute("type") == "#_x0000_t202" || (string)e.Attribute("type") == "#_xssf_cell_comment");
-
+
+ XElement shape = GetCommentShape(xdoc);
+
LoadShapeProperties(xlComment, shape);
var clientData = shape.Elements().First(e => e.Name.LocalName == "ClientData");
@@ -377,6 +372,46 @@
LoadDefinedNames(workbook);
}
+ #region Comment Helpers
+
+ private XDocument GetCommentVmlFile(WorksheetPart wsPart)
+ {
+ XDocument xdoc = null;
+
+ foreach (var vmlPart in wsPart.VmlDrawingParts)
+ {
+ xdoc = XDocumentExtensions.Load(vmlPart.GetStream(FileMode.Open));
+
+ //Probe for comments
+ if (xdoc.Root == null) continue;
+ var shape = GetCommentShape(xdoc);
+ if (shape != null) break;
+ }
+
+ if (xdoc == null) throw new Exception("Could not load comments file");
+ return xdoc;
+ }
+
+ private static XElement GetCommentShape(XDocument xdoc)
+ {
+ var xml = xdoc.Root.Element("xml");
+
+ XElement shape;
+ if (xml != null)
+ shape =
+ xml.Elements().FirstOrDefault(e => (string) e.Attribute("type") == XLConstants.Comment.ShapeTypeId);
+ else
+ shape = xdoc.Root.Elements().FirstOrDefault(e =>
+ (string) e.Attribute("type") ==
+ XLConstants.Comment.ShapeTypeId ||
+ (string) e.Attribute("type") ==
+ XLConstants.Comment.AlternateShapeTypeId);
+ return shape;
+ }
+
+ #endregion
+
+
private String GetTableColumnName(string name)
{
return name.Replace("_x000a_", Environment.NewLine).Replace("_x005f_x000a_", "_x000a_");
diff --git a/ClosedXML/ClosedXML/ClosedXML_Net3.5/ClosedXML_Net3.5.csproj b/ClosedXML/ClosedXML/ClosedXML_Net3.5/ClosedXML_Net3.5.csproj
index 0b605cb..b73f954 100644
--- a/ClosedXML/ClosedXML/ClosedXML_Net3.5/ClosedXML_Net3.5.csproj
+++ b/ClosedXML/ClosedXML/ClosedXML_Net3.5/ClosedXML_Net3.5.csproj
@@ -828,6 +828,9 @@
Excel\Tables\XLTables.cs
+
+ Excel\XLConstants.cs
+
Excel\XLOutline.cs