ソフト関連Trial−No.107 |
はじめに |
VB、C#などの.NET系言語でMicrosoft Excel(以下、Excelと略)を取り扱う際、通常はExcelへの参照設定をして、
事前バインディングの手法でプログラムを作成します。
作者も今まではこの手法でExcelへの入出力を伴うアプリケーションを制作してきました。
この手法は、アプリケーションで使用するExcelのバージョンが指定されている場合には有効に使えますが、
Excelの全バージョンへの対応が要求されるアプリケーションではバージョンの互換性の問題が発生する可能性があります。
Excelのバージョンに影響されないプログラミング方法に、遅延バインディング(実行時バインディング)の手法があります。
この手法には、プログラムの実行速度が事前バインディングの場合よりも遅くなるという問題があります。
また、Option Strinct On でのプログラミングがしにくいために、Option Strinct On が必須であるC#言語で使用する場合には、
Excelを操作する個々のメソッドの命令文作成にある程度の工夫が必要になります。
そこでVB言語を使って、Option Strict Off、遅延バインディングの設定でExcel操作のメソッドを実装したクラスライブラリーを作成しておき、
アプリケーション本体ではこのクラスライブラリーを参照設定して使用するようにしました。
このようにすれば、アプリケーション本体は Option Strinct On の設定でプログラミングすることができます。
今回、Excelを操作する数十種類のメソッドを含んだクラスライブラリー(CKExcelLB.dll)を作成したので、これを公開することにしました。
[CKExcelLB.dll]の構成 |
開発環境:Visual Basic 2010(.NET Framework 2.0)
コンパイルオプション:Option Explicit On、Option Strict Off
名前空間:CKExcelLB
含まれるクラス、Enum
[ExcelLB]クラス
Excel、Workbook(s)、Worksheet(s)、Range、Cell(s)、Row、Columnなどのオブジェクトに関するプロパティ、メソッドを実装したクラスです。
次の項でこのクラスに含まれる主なプロパティ、メソッドを紹介します。
[CellBorder]クラス
セルの罫線を扱うクラスです。
[CellLineStyle]Enum
セル罫線の種類(直線、破線、点線等)設定に使用するEnumです。
[CellBorderIndex]Enum
セル罫線の場所(セル上辺、下辺等の罫線設置場所)設定に使用するEnumです。
[CellBorderWeight]Enum
セル罫線の太さの設定に使用するEnumです。
[ExcelLB]クラスに含まれる主要プロパティ・メソッド |
全般
DisplayAlertsプロパティ
Visibleプロパティ
Disposeメソッド:Excelオブジェクトを破棄する
Quitメソッド:Excelを終了する
ReleaseObjectメソッド:COMオブジェクトを解放する
Workbook(s)関係
Workbooksプロパティ
AddBookメソッド:Workbookを追加する
CloseBookメソッド:WorkbookをCloseする
OpenBookメソッド:指定されたファイル名のWorkbookを開く
Saveメソッド:Workbookを上書き保存する
SaveAsメソッド:Workbookに名前を付けて保存する
Worksheet(s)関係
ActiveSheetメソッド:ActiveSheetを返す
AddSheetメソッド(1オーバーロード):Worksheetを挿入する
CopySheetメソッド:Worksheetをコピーする
CountSheetメソッド:Worksheetの枚数を返す
DeleteSheetメソッド(1オーバーロード):Worksheetを削除する
GetSheetメソッド(1オーバーロード):Worksheetを取得する
GetSheetsメソッド:Worksheetsを取得する
GetSheetNameメソッド:Worksheetの名前を取得する
MoveSheetメソッド:Worksheetの位置を移動する
PreviewSheetメソッド:Worksheetのプレビューを表示する
SetSheetNameメソッド:Worksheetにシート名を設定する
VisibleSheetメソッド:Worksheetの表示・非表示を設定する
Cell(s)関係
GetCellメソッド:Cellを取得する
GetCellsメソッド:Cellsを取得する
GetCellValueメソッド(1オーバーロード):Cellの値を取得する
MergeCellsメソッド:セルを結合する
SetCellValueメソッド(1オーバーロード):Cellに値を設定する
Range関係
ClearContentsメソッド:Rangeのデータだけをクリアする
ClearFormatsメソッド:Rangeの書式だけをクリアする
ClearRange メソッド:Rangeのデータと書式をクリアする
GetRangeメソッド(2オーバーロード):Rangeを取得する
GetRangeValueメソッド(1オーバーロード):Rangeの値を取得する
PutBorderメソッド:Rangeに罫線を引く
SetNumberFormatLocalメソッド(2オーバーロード):RangeのNumberFormatLocalを設定する
SetRangeメソッド(2オーバーロード):Rangeに値を設定する
SetRangeColorメソッド:RangeにColorIndexで色を設定する(Ver 1.1.0で追加)
SetRangeFormulaメソッド(2オーバーロード):RangeのFormulaを設定する
SetRangeFormulaR1C1メソッド(2オーバーロード):RangeのFormulaR1C1を設定する
Row関係
DeleteRowメソッド:行を削除する
GetRowメソッド:行を取得する(Ver 1.1.0で追加)
InsertRowメソッド:行を挿入する
SetRowHeightメソッド(1オーバーロード):行高さを設定する
Column関係
AutoFitColumnWidthメソッド:列幅を自動調整する
DeleteColumnメソッド:列を削除する
GetColumnメソッド:列を取得する(Ver 1.1.0で追加)
InsertColumnメソッド:列を挿入する
SetColumnWidthメソッド:列幅を設定する
[CKExcelLB.dll]の利用例 |
Visual C# 2010(.NET Framework 2.0)を使った[CKExcelLB.dll]の利用例を紹介します。
Visual C# 2010のプロジェクトを作成して、CKExcelLBへの参照設定を追加してから、Formに以下のイベントプロシージャーを作成します。
private void btnTest_Click(object sender, EventArgs e)
{
var xls = new CKExcelLB.ExcelLB(); // ExcelLBのインスタンス作成 (Excelオブジェクト作成)
xls.Visible = true;
var books = xls.Workbooks;
var book1 = xls.AddBook(books);
var sheets = xls.GetSheets(book1);
var sheet1 = xls.GetSheet(sheets, 1);
// B2〜C11セルに書式を設定して、値を代入
for (int i = 2; i < 12; i++);
{
var range1 = xls.GetRange(sheet1, i, 2); // B2〜B11セル
xls.SetNumberFormatLocal(range1, "@"); // セルに文字列の書式設定
xls.SetRange(range1, "00" + i.ToString()); // セルに値を代入
xls.ReleaseObject(range1); // COMオブジェクトの解放
var range2 = xls.GetRange(sheet1, i, 3); // C2〜C11セル
xls.SetNumberFormatLocal(range2, "#,##0.00_ "); // セルに数値の書式設定
xls.SetRange(range2, 1234.5678 * i); // セルに数値代入
xls.ReleaseObject(range2); // COMオブジェクトの解放
}
// D列のセルに値を書込み
xls.SetRange(sheet1, "D2", "文字列の書き込みテスト"); // D2セルへの書込み
xls.SetRange(sheet1, 3, 4, "「D3」セル"); // D3セルへの書込み
xls.SetRange(sheet1, "D4:D10", "テスト"); // D4:D10セルへの書込み
xls.SetRangeFormulaR1C1(sheet1, "D11", "=RC[-1]*2"); // D11セルへの書込み
// B〜D列の幅を自動調整
xls.AutoFitColumnWidth(sheet1, "B:D");
// C9-D9セルの結合
xls.MergeCells(sheet1, 9, 3, 9, 4);
// セル範囲"B2:D11"に罫線挿入
var range3 = xls.GetRange(sheet1, "B2:D11");
var cb = new CKExcelLB.CellBorder(); // CellBorderオブジェクト
xls.PutBorder(range3, cb); // 罫線挿入
cb = null;
xls.ReleaseObject(range3);
// 5行目に行を挿入
xls.InsertRow(sheet1, 5);
// bookの保存
var savename = Application.StartupPath + @"\Test.xls";
xls.DisplayAlerts = false;
xls.SaveAs(book1, savename); // book1に名前を付けて保存
// COMオブジェクトの解放
xls.ReleaseObject(sheet1);
xls.CloseBook(book1);
xls.ReleaseObject(sheets);
xls.ReleaseObject(book1);
xls.ReleaseObject(books);
xls.DisplayAlerts = true;
xls.Quit();
xls.Dispose();
}
ダウンロード |
ダウンロード
[CKExcelLB.dll] とそのソースコードがダウンロードできます。
更新情報 |
2013/12/18 SaveAsメソッドが、.xlsxファイル、.xlsmファイルに対応できるように改造しました。(Ver 1.2.0)
2012/12/30 ライブラリーに[SetRangeColor]、[GetRow]、[GetColumn]を追加しました。(Ver 1.1.0)
2012/05/26 「CKExcelLB」を公開しました。(Ver 1.0.0)
ダウンロードファイルの利用に際してのご注意 |
ダウンロードしたファイルの利用は、全て利用される方の責任で行っていただきます。
作者は十分な注意を払って本ファイルを作成していますが、もし万一、本ファイルの内容に誤りがあっても、
また、それによってご使用になるパソコンに問題が発生しても、作者は一切責任を負いません。
ご質問・ご意見・ご感想 |
ご質問、ご意見、ご感想、バグ等のご連絡は、
こちらへ