7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C#でClosedXMLを使ってExcelデータを読み込むメモ

Last updated at Posted at 2018-05-31

自分用メモ。

他人が作成したExcelデータを受け取ってみると予想外の書式設定が多く、すべての書式設定に対応したいとソースをいじり始めたのがはじまり。

string value = sheet.Cell(i, j).GetString();
string value = sheet.Cell(i, j).GetFormattedString();

GetString() だけだと数値または日付が読み込めない現象
GetFormattedString() だけだと文字列が読み込まれない現象

…が起こったので以下のようなソースにしたらなんとなくうまくいった。
読み込まれない…とは、プログラムに空欄だと認識されてしまうこと。

memo.cs
IXLCell cell = sheet.Cell(i, j);	//読み込みたいセルを定義
string value = "";

switch (cell.DataType)		//読み込みたいセルのデータ型で分岐
{
	case XLDataType.Number:		//数値
		value = sheet.Cell(i, j).GetFormattedString();
		break;

	case XLDataType.DateTime:	//日付
		DateTime dt = sheet.Cell(i, j).GetDateTime();
		value = dt.ToString("yyyyMMdd");
		break;

	case XLDataType.Text:		//文字列
		value = sheet.Cell(i, j).GetString();
		break;
}

もう数値もすべて文字列として受け取って、必要ならプログラムのほうでキャストすることにした。

2018/06/15追記
セルのデータタイプがDatetimeだったらDatetime型でとって、文字列にする処理を追加。
セル書式設定の日付が、西暦ならこれで問題ない。

が、セル書式設定の日付が和暦表示だとNumberだと認識してしまうらしい。
このNumberがシリアル値だと判断できない場合、セルの書式設定で和暦は使わないでほしいと周知しなきゃダメだなあ…

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?