困ったー

WIN10・アプリ・ゲームで困ったことを調べてみた

「こまったー」は困ったことを調べたブログです。

コロナ対策 |  Teams |  ARK |  Satisfactory |  フォートナイト

スポンサーリンク


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

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

一般的なExcelのオブジェクトを使う方法よりはClosedXMLを使ったほうが簡単に取得できましtあ。

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セルの「きよみや」が「清宮幸太郎」にちゃんと書き換えられていました。

f:id:apicode:20200729095637p:plain

 

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

 

 

注意点

ClosedXMLは旧形式ファイル(.xls)は未対応のようで、その場合はエクセルオブジェクトを使ったほうがいいかもしれません。

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

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