C#でエクセルを簡単に扱う方法の紹介です。
Excelのオブジェクトを使う方法というのもありますが、外部ライブラリでClosedXMLというのを使ったほうところ、かなり簡単にエクセルの操作ができました。
コードも少ないと思うのでおすすめです。
C#でエクセルを簡単に扱うには?
C#でエクセルファイルのデータを取得することができます。
一般的な方法は、プロジェクトエクスプローラで「参照>参照の追加」でExcelのオブジェクトをインポートします。
しかしこの方法だと結構プログラムを書くのは面倒っちそうでした。
そこでググってみたら、ClosedXMLというライブラリを使うほうが簡単だよ~ということで、実際使ってみたらかなり効率がよかったです。
ということで、ここではClosedXMLを使ったサンプルを紹介していきます。
参考:Excelファイルを C# と VB.NET で読み込む "正しい" 方法 - Qiita
準備
まずエクセルファイルを用意。
次にClosedXMLを入手します。
GitHubに公開されています。
https://github.com/closedxml/closedxml
Visual Studioへインポートするには、「ツール>NuGetパッケージマネージャ>パッケージマネージャーコンソール」を実行。
コンソールが開いたら
PM> Install-Package ClosedXML
を実行すればインストールを終わりまで勝手にやってくれます。
セルを取得
あとはテスト用のコードを書きます。
まずはライブラリが使えるように宣言。
using ClosedXML.Excel;
上記参考ページのコードをテスト用に若干手直しして使ってみます。
エクセルのファイルパスを指定してワークブックオブジェクト、ワークシートオブジェクトを作成します。
あとは作ったオブジェクトでセル位置を指定すると読み込めました。
private void button1_Click(object sender, EventArgs e)
{
String filePath = "c:\\_work\\sample.xlsx";XLWorkbook workbook = new XLWorkbook(filePath);
IXLWorksheet worksheet = workbook.Worksheet(1);
int lastRow = worksheet.LastRowUsed().RowNumber();
String sResult = "";
for (int i = 1; i <= lastRow; i++)
{
IXLCell cell = worksheet.Cell(i, 1);
sResult += (cell.Value + "");
}
textBox1.Text = sResult;
}
試すと無事にファイルからデータを読み込めました。
特定のセルの読み込みも簡単です。
「worksheet.Cell("A2").Value」のような書き方でA2セルの値を取得できます。
private void button1_Click(object sender, EventArgs e)
{
String filePath = "c:\\_work\\sample.xlsx";XLWorkbook workbook = new XLWorkbook(filePath);
IXLWorksheet worksheet = workbook.Worksheet(1);textBox1.Text = worksheet.Cell("A2").Value + "";
}
セルへ書き込み
今度はセルへ書き込んでファイルを保存してみましょう。
以下のようにワークブック、ワークシートを取得したあとで、セル「A2」の値を書き換えてワークブックを保存します。
private void button1_Click(object sender, EventArgs e)
{
String filePath = "c:\\_work\\sample.xlsx";XLWorkbook workbook = new XLWorkbook(filePath);
IXLWorksheet worksheet = workbook.Worksheet(1);worksheet.Cell("A2").Value = "清宮幸太郎";
workbook.SaveAs(filePath);
}
これで、エクセルファイルのA2セルの「きよみや」という項目を「清宮幸太郎」というデータにち書き換えることができました。おい、そろそろ10本以上打ってよホームラン。
つうわけでClosedXMLを使うと、セルの修正や保存も簡単に書けました。
注意点
ClosedXMLは旧形式ファイル(.xls)は未対応のようです。
そちらのファイルを操作することが必須条件ということであれば、エクセルオブジェクトを使うほうがいいかもしれません。