クリエイターの教科書

ChatGPT, Stable Diffusion, Visual Studio, Excelなど教科書

【Visual Studioの教科書】C#でエクセルを簡単に扱う~セルの取得・セルの上書き保存

C#でエクセルを簡単に扱う方法の紹介です。

Excelのオブジェクトを使う方法というのもありますが、外部ライブラリでClosedXMLというのを使ったほうところ、かなり簡単にエクセルの操作ができました。

コードも少ないと思うのでおすすめです。

C#でエクセルを簡単に扱うには?

excel

C#でエクセルファイルのデータを取得することができます。

 

一般的な方法は、プロジェクトエクスプローラで「参照>参照の追加」でExcelのオブジェクトをインポートします。

f:id:apicode:20200729094605p:plain

 

しかしこの方法だと結構プログラムを書くのは面倒っちそうでした。

 

そこでググってみたら、ClosedXMLというライブラリを使うほうが簡単だよ~ということで、実際使ってみたらかなり効率がよかったです。

 

ということで、ここではClosedXMLを使ったサンプルを紹介していきます。

参考:Excelファイルを C# と VB.NET で読み込む "正しい" 方法 - Qiita

 

準備

まずエクセルファイルを用意。

f:id:apicode:20200729094608p:plain

 

次にClosedXMLを入手します。

GitHubに公開されています。

https://github.com/closedxml/closedxml

 

Visual Studioへインポートするには、「ツール>NuGetパッケージマネージャ>パッケージマネージャーコンソール」を実行。

 

コンソールが開いたら

PM> Install-Package ClosedXML

を実行すればインストールを終わりまで勝手にやってくれます。

f:id:apicode:20200729094609p:plain

 

セルを取得

あとはテスト用のコードを書きます。

まずはライブラリが使えるように宣言。

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;
}

 

試すと無事にファイルからデータを読み込めました。

f:id:apicode:20200729094611p:plain

 

特定のセルの読み込みも簡単です。

「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本以上打ってよホームラン。

f:id:apicode:20200729095637p:plain

 

つうわけでClosedXMLを使うと、セルの修正や保存も簡単に書けました。

 

 

注意点

ClosedXMLは旧形式ファイル(.xls)は未対応のようです。

 

そちらのファイルを操作することが必須条件ということであれば、エクセルオブジェクトを使うほうがいいかもしれません。

 

このブログは、ネットや書籍上の情報、個人の体験や感想を中心にまとめたものです。 正確性を期していはいますが、間違い・誤訳等あるかもしれません。 当サイトの情報によって生じたいかなる損失について一切の責任を負わないものとします. あらかじめご了承ください。

プライバシーポリシー |〇利用規約 |〇問い合わせ