ClosedXMLを使用したものではないですが、Excelをインストールすれば使える Microsoft.Office.Interop.Excel
を使うことで一応、吹き出しと言うかシェイプを追加することはできたのでご案内します。(Visual Studio2017, Windows7, Excel2013 で確認)
以下の記事を参考にさせていただきました、(記事のご提供者様に感謝いたします)
オートシェイプをVBAで作成
C#で書いてみたコード例は以下となります。簡単に言うと、Worksheet.Shapes.AddShape
で吹き出し相当のシェイプを追加します。
C#
1// 抜粋
2 private void Test(string fileName)
3 {
4 var excelApplication = new Microsoft.Office.Interop.Excel.Application();
5 excelApplication.Visible = true;
6 try
7 {
8 Workbooks workbooks = excelApplication.Workbooks;
9 try
10 {
11 // *.xlsx ファイルを開く
12 Workbook workbook = workbooks.Open(fileName);
13 try
14 {
15 Sheets worksheets = workbook.Sheets;
16 try
17 {
18 Worksheet worksheet = worksheets[1];
19 Trace.WriteLine("sheetname: " + worksheet.Name);
20 try
21 {
22 // 吹き出しのシェイプを追加
23 var shape = worksheet.Shapes.AddShape(Microsoft.Office.Core.MsoAutoShapeType.msoShapeBalloon, 10, 50, 100, 100);
24 shape.Name = "New shape";
25 shape.BackgroundStyle = Microsoft.Office.Core.MsoBackgroundStyleIndex.msoBackgroundStylePreset1;
26 shape.ShapeStyle = Microsoft.Office.Core.MsoShapeStyleIndex.msoLineStylePreset16;
27
28 // シートに存在するシェイプを列挙
29 int no = 0;
30 var ss = worksheet.Shapes;
31 foreach (var s in worksheet.Shapes)
32 {
33 ++no;
34 if (s is Microsoft.Office.Interop.Excel.Shape)
35 {
36 Microsoft.Office.Interop.Excel.Shape targetShape = (Microsoft.Office.Interop.Excel.Shape)s;
37
38 Trace.WriteLine("--- No:" + no);
39 Trace.WriteLine("Name: " + targetShape.Name);
40 Trace.WriteLine("Title: " + targetShape.Title);
41 }
42 }
43 }
44 catch (Exception ex)
45 {
46 Trace.WriteLine("Exception at AddShape: " + ex.Message);
47 }
48 finally { Marshal.ReleaseComObject(worksheet); }
49 }
50 finally { Marshal.ReleaseComObject(worksheets); }
51 }
52 finally
53 {
54 // 別のファイル名で保存
55 workbook.SaveAs(altFileName);
56 if (workbook != null)
57 {
58 workbook.Close(false);
59 }
60 Marshal.ReleaseComObject(workbook);
61 }
62 }
63 catch (Exception ex)
64 {
65 Trace.WriteLine("Open: " + ex.Message);
66 }
67 finally { Marshal.ReleaseComObject(workbooks); }
68 }
69 finally
70 {
71 if (excelApplication != null)
72 {
73 excelApplication.Quit();
74 }
75 Marshal.ReleaseComObject(excelApplication);
76 }
77 }
78
下図のようになります。

上の背景色薄緑の吹き出しはExcel上から手動で追加したもの、下の青枠のみの吹き出しは上のコード例中、 worksheet.Shapes.AddShape
で追加したものです。青い枠は現在のExcelの既定の設定から色が選択されているようです。吹き出し中にテキストや背景色を入れるには、ここからさまざまなプロパティにアクセスして値をセットしていく必要があるようです。Nameプロパティに"New shape"を指定していて、それがExcelの左上コンボボックスに表示されているのが分かります。
質問の主旨から少し離れますが、Microsoft.Office.Interop.Excel
は以下のQiitaの記事に掲載されているように注意深く使う必要があり、コードの取りまわしがかなり面倒です。※上記のコードもこちらの記事を参考にさせていただいています。
Excelファイルを C# と VB.NET で読み込む "正しい" 方法
可能な限りは最初のZuishin様からのご回答の案に沿って、CloseXMLで対応できるようにするのが良いかと感じました。上記の記事で述べられていましたが、NPOIと言うオープンソースプロジェクトもあるので、こちらも試してみるのも手だと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/18 06:41
2017/10/18 06:45
2017/10/18 08:06
2017/10/18 08:20
2017/10/18 08:27