2012-05-21 72 views
2

我在使用EPPlus處理Excel文檔中的註釋時遇到了一些問題。我可以添加評論並刪除它們,但有時候它不會成功。使用EPPlus刪除/清除Excel中的註釋

我正在使用註釋來顯示處理Excel文件的結果中的驗證消息,並且在重新處理此文件時,我想在再次運行驗證之前清除任何現有註釋。

我清除評論當前的方法是這樣的:

_sheet.Cells.Style.Fill.PatternType = ExcelFillStyle.None; 
    while (_sheet.Comments.Count > 0) 
    { 
     // Note: not using _sheet.Comments.RemoveAt(0) since this can throw [Exception: Key does not exist] OfficeOpenXml.RangeCollection.Delete(UInt64 key) 
     _sheet.Comments.RemoveAt(_sheet.Comments.Count - 1); 
    } 

這似乎清除它們的罰款。但是,當我嘗試添加如下評論:

const string author = "..."; 
    cell.Style.Fill.PatternType = ExcelFillStyle.Solid; 
    cell.Style.Fill.BackgroundColor.SetColor(Color.LemonChiffon); 
    if (cell.Comment == null) 
    { 
     cell.AddComment(message, author); 
    } 
    else 
    { 
     cell.Comment.Text = message; 
     cell.Comment.Author = author; 
    } 

,其中電池是一種ExcelRange例如針對特定的細胞,我得到了下面的堆棧跟蹤:

System.NullReferenceException : Object reference not set to an instance of an object. 
at OfficeOpenXml.Drawing.Vml.ExcelVmlDrawingCommentCollection.AddDrawing(ExcelRangeBase cell) 
at OfficeOpenXml.Drawing.Vml.ExcelVmlDrawingCommentCollection.Add(ExcelRangeBase cell) 
at OfficeOpenXml.ExcelComment..ctor(XmlNamespaceManager ns, XmlNode commentTopNode, ExcelRangeBase cell) 
at OfficeOpenXml.ExcelCommentCollection.Add(ExcelRangeBase cell, String Text, String author) 
at OfficeOpenXml.ExcelRangeBase.Set_Comment(Object value, Int32 row, Int32 col) 
at OfficeOpenXml.ExcelRangeBase.SetSingle(_setValue valueMethod, Object value) 
at OfficeOpenXml.ExcelRangeBase.AddComment(String Text, String Author) 

誰能幫助我?我究竟做錯了什麼?

感謝,

詹姆斯

+1

感謝您分享這些片段 - 我需要清除填充並刪除所有評論,並且您在一個問題中都有他們兩個! – trailmax

回答