書式

セル中のデータを設定した書式フォーマットで表示します。

元のデータ     120000.500  
書式を適用して表示 120,000.50

書式の設定には、ワークシートの関数 SetRangeDataFormat を利用します。使用例は以下の通りです。

sheet.SetRangeDataFormat("A1:B2", CellDataFormatFlag.Number, [書式の設定オブジェクト])

一つ目のパラメータは対象範囲を指定するパラメータ、二つ目は書式の区分を指定します。三つ目のパラメータは書式の区分によって違うオブジェクトを渡す必要があり、一部の書式では省略できます。区分一覧はこの文書の「書式区分一覧」をご覧ください。

SetRangeDataFormat 関数を利用するほか、セルインスタンスのプロパティ DataFormatDataFormatArgs に書式区分とパラメータを直接設定することもできます。ただし、たくさんのセルに同じ書式を設定する場合、SetRangeDataFormat がより効率的です。

数字書式の場合、数字のフォーマット(3桁のカンマ区切り、小数点以下桁数と負の数の表示形式)を設定できます。サンプルコードは以下の通りです。

// 書式を設定
sheet.SetRangeDataFormat("A1:B2",              // 応用範囲
  CellDataFormatFlag.Number,                   // 書式種類
  new NumberDataFormatter.NumberFormatArgs()   // 書式フォーマット
  {
    // 3桁のカンマ区切りを利用(例:123,456)
    UseSeparator = true,

    // 小数点以下桁数(例:0.1234)
    DecimalPlaces = 4,
                    
    // 負の数の表示形式(例:(123) )
    NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets,
  });

// データを設定
sheet.Ranges["A1:B2"].Data = new object[,] {
  { 1234, 1234.56789 },
  { -1234, -1234.56789 },
};

388

小数点以下桁数を4桁に設定していたため、4桁まで表示されます。マイナスの場合赤い文字と括弧を表示します。

書式区分一覧

現時点では以下の書式を利用できます。

種類書式区分書式の詳細パラメータ型
数字(Number)CellDataFormatFlag.NumberNumberDataFormatter.NumberFormatArgs
パーセント(Percent)CellDataFormatFlag.PercentNumberDataFormatter.NumberFormatArgs
通貨(Currency)CellDataFormatFlag.CurrencyCurrencyDataFormatter.CurrencyFormatArgs
日付(DateTime)CellDataFormatFlag.DateTimeDateTimeDataFormatter.DateTimeFormatArgs
テキスト(Text)CellDataFormatFlag.Textなし
カスタマイズした書式CellDataFormatFlag.Custom全てのデータ型

数字(Number)

数字書式の場合、設定した数字フォーマットでデータを表示します。数字のカンマ区切り、小数点以下桁数と負の数の表示形式を設定できます。

ja63

設定例のソースコードは以下の通りです。

sheet.SetRangeDataFormat("A1:B2", // 応用範囲
  CellDataFormatFlag.Number, // 書式種類
  new NumberDataFormatter.NumberFormatArgs() // 書式フォーマット
    {
    // 3桁のカンマ区切りを利用(例:123,456)
    UseSeparator = true,

    // 小数点以下桁数(例:0.1234)
    DecimalPlaces = 4,
 
    // 負の数の表示形式(例:(123) )
    NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets,
  });

負の数の表示形式

データが負の数の場合、設定した負の数の表示形式に従ってデータを画面に表示します。

負の数の設定は NumberDataFormatter.NumberNegativeStyle 列挙体を利用します。設定可能な形式は以下の通りです。

負の数の表示形式サンプル列挙体の値
指定なし(デフォルト)-123,456.789Minus
赤字123,456,789Red
括弧付き(123,456.789)Brackets
赤字と括弧付き(123,456.789)Brackets | Red
三角マーク▲ 123,456,789Prefix_Sankaku
赤字で三角マーク▲ 123,456,789Prefix_Sankaku |Red

NumberDataFormatter.NumberNegativeStyle 列挙体の値を OR 演算子で二つのスタイルを合わせて設定できます。

数字型(数字、パーセント、日付時間)の書式に設定した場合セル中テキストが自動的に右寄せに設定されます。テキストを左寄せに設定したい場合、セルスタイルを左寄せに設定します。セルスタイルについて詳しくは、「スタイル」をご覧ください。

例1:数字書式を設定

// 書式を設定
sheet.SetRangeDataFormat("A1", CellDataFormatFlag.Number);

// データを設定
sheet["A1"] = 12345.678;

392

例2:カンマ区切り利用、小数点以下 2 桁

UseSeparatorDecimalPlaces プロパティを使って設定を行います。

sheet.SetRangeDataFormat("A1", // 応用範囲
  CellDataFormatFlag.Number, // 書式種類
  new NumberDataFormatter.NumberFormatArgs() // 書式フォーマット
  {
    // カンマ区切りを利用(例:123,456)
    UseSeparator = true,

   // 小数点以下桁数(例:0.12)
    DecimalPlaces = 2,
  });

sheet["A1"] = 123456;

ja64

例3:カンマ区切り利用、負の数の場合赤字で表示

sheet.SetRangeDataFormat("A1", // 応用範囲
  CellDataFormatFlag.Number, // 書式種類
  new NumberDataFormatter.NumberFormatArgs() // 書式フォーマット
  {
    // カンマ区切りを利用
    UseSeparator = true,

    // 小数点以下桁数
    DecimalPlaces = 2,

    // マイナスの場合のスタイル
    NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Red,
  });

// セルデータを設定
sheet["A1"] = -123456;

ja65

例4:カンマ区切り利用、小数点以下を非表示、負の数は三角マーク付きで表示

sheet.SetRangeDataFormat("A1", // 応用範囲
  CellDataFormatFlag.Number, // 書式種類
  new NumberDataFormatter.NumberFormatArgs() // 書式フォーマット
  {
    // カンマ区切りを利用
    UseSeparator = true,

    // 小数点以下桁数
    DecimalPlaces = 0,

    // マイナスの場合のスタイル
    NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Prefix_Sankaku,
 });

// セルデータを設定
sheet["A1"] = -123456;

ja66

例5:カンマ区切り利用、小数点以下1桁、負の数は三角マークを付けて赤字で表示

sheet.SetRangeDataFormat("A1",                 // 応用範囲
  CellDataFormatFlag.Number,                   // 書式種類
  new NumberDataFormatter.NumberFormatArgs()   // 書式フォーマット
  {
    // カンマ区切りを利用
    UseSeparator = true,

    // 小数点以下桁数
    DecimalPlaces = 1,

    // マイナスの場合のスタイル
    NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Prefix_Sankaku
      | NumberDataFormatter.NumberNegativeStyle.Red,
  });

// セルデータを設定
sheet["A1"] = -10.150;

ja68

小数点以下表示桁数を1桁に設定していたため、数値が四捨五入されて表示されます。

パーセント(Percent)

パーセントは数字書式の拡張形式であり、数字書式の設定(カンマ区切り、小数点以下桁数)が設定できます。

例1:パーセントで小数を表示

// 書式を設定
sheet.SetRangeDataFormat("A1", CellDataFormatFlag.Percent);

// セルデータを設定
sheet["A1"] = 0.15;

391

例2:小数点以下は2桁、負の数の場合三角マークを付けて赤字で表示

sheet.SetRangeDataFormat("A1", // 応用範囲
  CellDataFormatFlag.Percent, // 書式種類
  new NumberDataFormatter.NumberFormatArgs() // 書式フォーマット
  {
    // カンマ区切りを利用
    UseSeparator = true,

   // 小数点以下桁数
   DecimalPlaces = 2,

   // 負の数の場合三角マークを付けて赤字で表示
   NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Prefix_Sankaku
     | NumberDataFormatter.NumberNegativeStyle.Red,
 });

// セルデータを設定
sheet["A1"] = -0.1;

ja67

通貨(Currency)

例1:通常の通貨形式と負の数の三角マーク

sheet.SetRangeDataFormat("A1:B1", // 応用範囲
  CellDataFormatFlag.Currency, // 書式種類
  new CurrencyDataFormatter.CurrencyFormatArgs() // 書式フォーマット
  {
    // カンマ区切りを利用
    UseSeparator = true,

    // 小数点以下桁数
    DecimalPlaces = 0,

    // マイナスの場合のスタイル
    NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Red,

   PrefixSymbol = "¥"
});

// 範囲データを設定
sheet["A1"] = new double[] { 1200, -1200 };

394

例2:金額を先頭に通貨の種類を付けて表示する

ソースコード:

// 書式フォーマットのパラメータを作成
var arg = new CurrencyDataFormatter.CurrencyFormatArgs() 
{
 // カンマ区切りを利用
 UseSeparator = true,

 // 小数点以下桁数
 DecimalPlaces = 0,

 // マイナスの場合のスタイル
 NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Red,
};

// 先頭に円マークを付ける
arg.PrefixSymbol = "¥ ";

// 書式と書式パラメータをA1セルに格納する
sheet.SetRangeDataFormat("A1", CellDataFormatFlag.Currency, arg);

arg.PrefixSymbol = "USD ";

sheet.SetRangeDataFormat("A2", CellDataFormatFlag.Currency, arg);

// 範囲データを設定
sheet.Ranges["A1:A2"].Data = new double[] { 1200, -1200 };

395

日付(DateTime)

.NET と同じフォーマットで日付の表示書式を設定できます。

例1:.NET DateTime 型のデータを日付のみで表示する

// 書式を設定
sheet.SetRangeDataFormat("A1", CellDataFormatFlag.DateTime,
  new DateTimeDataFormatter.DateTimeFormatArgs()
  {
    Format = "yyyy年MM月dd日",
  });

// データを設定
sheet["A1"] = new DateTime(2009, 12, 31, 12,30,00);

396

例2:.NET DateTime型のデータを時間のみで表示する

// 書式を設定
sheet.SetRangeDataFormat("A1", CellDataFormatFlag.DateTime,
  new DateTimeDataFormatter.DateTimeFormatArgs()
  {
    Format = "HH:mm:ss",
  });

// データを設定
sheet["A1"] = new DateTime(2009, 12, 31, 12,30,00);

398

例3:.NET DateTime型のデータを和暦で表示する

// 書式を設定
sheet.SetRangeDataFormat("A1", CellDataFormatFlag.DateTime,
  new DateTimeDataFormatter.DateTimeFormatArgs()
  {
    CultureName = "ja-JP",
    Format = "ggyy年M月d日",
 });

// データを設定
sheet["A1"] = new DateTime(2009, 12, 31, 12, 30, 00);

ja70

文字(Text)

データをそのまま(.NETのデフォルトフォーマット)で画面に表示したい場合、書式を Text に設定します。

// 書式を設定
sheet.SetRangeDataFormat("A1", CellDataFormatFlag.Text);

// データを設定
sheet["A1"] = 1.23456;

397

書式の取得

セルから設定された書式を取得するには、GetCellDataFormat メソッドかセルインスタンスのプロパティを利用します。

// 取得する書式フォーマットのパラメータを宣言
object arg;

// セルから書式設定を取得
var flag = sheet.GetCellDataFormat("A1", out arg);

// 書式区分が数字の場合
if (flag == CellDataFormatFlag.Number)
{
  // 数字書式のパラメータの型をチェック
  if (arg is NumberDataFormatter.NumberFormatArgs)
  {
    // 数字書式のパラメータの型に変換
    NumberDataFormatter.NumberFormatArgs narg = (NumberDataFormatter.NumberFormatArgs)arg;

    // 書式設定の詳細を取得
    var decimalPlaceDigits = narg.DecimalPlaces;
  }
}

ページの内容は役に立ちましたか?