(.Net)C#から遅延バインディングでExcelファイルに読み書きするで、C#からExcelへ遅延バインディングを使ったアクセスを書きましたが、今回はセルの罫線を引く方法です。
流れとして、Range インスタンスから Borders を取得し、そこから Border(どこの線か)を取得し、Borderの LineStyle に線種を設定するような形になります。
例えば、B9:E15の範囲のすべての縦横に実線で引く(格子状)には、こんな感じにします。
(シートオブジェクトまでは生成していることとします。)
//oSheetはシートオブジェクト object oRange=null; object targetBorders = null; object targetBorder = null; //罫線を引くRangeを指定 oRange = oSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null , oSheet, new object[] { "B9:E15", Missing.Value }); //罫線達を取得。 targetBorders = oRange.GetType().InvokeMember("Borders", BindingFlags.GetProperty, null , oRange, new object[] { }); //Rangeの上の罫線オブジェクト取得 targetBorder = targetBorders.GetType().InvokeMember("Item", BindingFlags.GetProperty, null , targetBorders, new object[] { 8 }); //罫線描画(実線) targetBorder.GetType().InvokeMember("LineStyle", BindingFlags.SetProperty, null , targetBorder, new object[] { 1 }); //Rangeの右の罫線オブジェクト取得 targetBorder = targetBorders.GetType().InvokeMember("Item", BindingFlags.GetProperty, null , targetBorders, new object[] { 10 }); //罫線描画(実線) targetBorder.GetType().InvokeMember("LineStyle", BindingFlags.SetProperty, null , targetBorder, new object[] { 1 }); //Rangeの左の罫線オブジェクト取得 targetBorder = targetBorders.GetType().InvokeMember("Item", BindingFlags.GetProperty, null , targetBorders, new object[] { 7 }); //罫線描画(実線) targetBorder.GetType().InvokeMember("LineStyle", BindingFlags.SetProperty, null , targetBorder, new object[] { 1 }); //Rangeの下の罫線オブジェクト取得 targetBorder = targetBorders.GetType().InvokeMember("Item", BindingFlags.GetProperty, null , targetBorders, new object[] { 9 }); //罫線描画(実線) targetBorder.GetType().InvokeMember("LineStyle", BindingFlags.SetProperty, null , targetBorder, new object[] { 1 }); //Rangeの内側の横の罫線オブジェクト取得 targetBorder = targetBorders.GetType().InvokeMember("Item", BindingFlags.GetProperty, null , targetBorders, new object[] { 12 }); //罫線描画(実線) targetBorder.GetType().InvokeMember("LineStyle", BindingFlags.SetProperty, null , targetBorder, new object[] { 1 }); //Rangeの内側の縦の罫線オブジェクト取得 targetBorder = targetBorders.GetType().InvokeMember("Item", BindingFlags.GetProperty, null , targetBorders, new object[] { 11 }); //罫線描画(実線) targetBorder.GetType().InvokeMember("LineStyle", BindingFlags.SetProperty, null , targetBorder, new object[] { 1 });
Borders.Item から Border を取得する引数部分で、罫線の位置を指定します。 罫線の位置の指定には、以下の定数が使えます。
値 定数 内容 5 xlDiagonalDown セルに右下がりの斜線 (対角線) 6 xlDiagonalUp セルに右上がりの斜線 (対角線) 9 xlEdgeBottom セルの下の線 7 xlEdgeLeft セルの左の線 10 xlEdgeRight セルの右の線 8 xlEdgeTop セルの上の線 12 xlInsideHorizontal セル範囲の内側の横線 11 xlInsideVertical セル範囲の内側の縦線
また、LineStyle で線種を指定するわけですが、これは以下の定数が使えます。
値 定数 内容 1 xlContinuous 実線 -4115 xlDash 破線 4 xlDashDot 一点鎖線 5 xlDashDotDot 二点鎖線 -4118 xlDot 点線 -4119 xlDouble 二重線 13 xlSlantDashDot 斜め一点鎖線 -4142 xlLineStyleNone 線なし
targetBorders , targetBorder も忘れずに Marshal.FinalReleaseComObject() で、COM参照を解放してやるようにしましょう。
参考:
【VB.NET】VB.NET から Excel の COM オブジェクトを制御する基本セット - TimberLandChapel
Excel #A013 ≪罫線関連マクロ&罫線関連定数≫(各定数の値が載っています)
C# Excel操作覚え書き