2

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;
  }

ここで、cellは特定のセルの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)

誰かがこれを手伝ってくれますか?私は何が間違っているのですか?

ありがとう、

ジェームズ

4

1 に答える 1

3

これについてJanKallmanに連絡しましたが、VML図面がソートされていないというバグであることが判明し、ライブラリのパッチ/コミット5027f556c029で修正されました。

于 2012-05-30T08:35:44.707 に答える