Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What is going on with this article?
@RyuMutuki

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

More than 1 year has passed since last update.

自分用メモ。

他人が作成した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がシリアル値だと判断できない場合、セルの書式設定で和暦は使わないでほしいと周知しなきゃダメだなあ…

4
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
4
Help us understand the problem. What is going on with this article?