(C#でエクセル)エクセルをC#で操作する
エクセルをC#で操作する場合のメモ。一部VBAもあり。
リストにつめてから削除しても同様。
名前定義
エクセルの名前定義はブック範囲とシート範囲と2種類ある。条件付き書式のあるセルを一覧する
条件付き書式が設定されているセルの一覧を得る手順。SpecialCellsメソッドを使うが、このメソッドはセルが無いと例外を発生させる(!)ので注意。Excel.Range ra = null;
try
{
ra = sh.Cells.SpecialCells(Excel.XlCellType.xlCellTypeAllFormatConditions);
}
catch (Exception err)
{
/// セルが無いときは例外が起きる
/// 無視する
}
条件付き書式の削除する
条件付き書式を削除するときは、まとめて削除すると例外が発生する。原因不明。foreach (Excel.FormatCondition fc in ce.FormatConditions)最初のうちは削除できるが、途中で例外発生。
{
if (fc.Formula1.Contains("xxx"))
{
fc.Delete();
}
}
リストにつめてから削除しても同様。
foreach (Excel.FormatCondition fc in ce.FormatConditions)末尾から削除してみたが、やはりだめ。
{
if (fc.Formula1.Contains("xxx"))
{
lst.Add(fc);
}
}
foreach (Excel.FormatCondition fc in lst)
{
fc.Delete();
}
外部参照リンクを削除する
Array a = (Array)wb.LinkSources(Excel.XlLink.xlExcelLinks);
for (int i = 1; i <= a.Length; i++)
{
wb.BreakLink((string)a.GetValue(i), Excel.XlLinkType.xlLinkTypeExcelLinks);
}
Array型で受け取るのがポイント。
For Each ra In sh.UsedRange
If ra.FormatConditions.Count > 0 Then
Dim fc As FormatCondition
For Each fc In ra.FormatConditions
Debug.Print fc.Formula1, fc.Type
Next
End If
Next
解決は困難。
条件付き書式を得るときの問題(VBA)
エクセル2007では、条件付き書式の条件式をVBAで参照すると、最初の条件式が繰り返し表示されて、2番目以降の条件式が取れない問題がある。For Each ra In sh.UsedRange
If ra.FormatConditions.Count > 0 Then
Dim fc As FormatCondition
For Each fc In ra.FormatConditions
Debug.Print fc.Formula1, fc.Type
Next
End If
Next
解決は困難。
セルの結合を考慮してセルの一覧を得る(VBA)
エクセルでは、A1:B1をセル結合して見た目は1個のセルにしていても、Range("A1:B1").Count では2が得られる。これでは困ることがあるので、結合されたセルも考慮してセルの個数をカウントする関数。(というかセルの一覧をコレクションにいれて返す関数)Function CountMergeCells(ra As Range) As Collection Dim co As Collection Dim c As Range Set co = New Collection For Each c In ra If c.Address = c.MergeArea.Item(1).Address Then Debug.Print "#", c.Address, c.MergeCells, c.MergeArea.Item(1).Address co.Add c.MergeArea End If Next Set CountMergeCells = co End Function
コメント
コメントを投稿