セル中のデータを設定した書式フォーマットで表示します。
元データ : 120000.500 セル中で書式を利用して表示する: 120,000.50
書式の設定には、ワークシートの関数 SetRangeDataFormat
を利用します。使用例は以下の通りです。
sheet.SetRangeDataFormat("A1:B2", CellDataFormatFlag.Number, [書式の詳細オブジェクト])
一つ目のパラメータは対象範囲を指定するパラメータ、二つ目は書式の区分を指定します。三つ目のパラメータは書式の区分によって違うオブジェクトを渡す必要があり、一部の書式では省略できます。区分一覧はこの文書の「書式区分一覧」ご覧ください。
SetRangeDataFormat
関数を利用するほか、セルインスタンスのプロパティ DataFormat
と DataFormatArgs
に書式区分とパラメータを直接設定することもできます。ただし、たくさんのセルに同じ書式を設定する場合、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 },
};
結果:
小数点以下桁数を4桁に設定していたため、4桁まで表示されます。マイナスの場合赤い文字と括弧を表示します。
書式区分一覧
現時点では以下の書式を利用できます。
種類 | 書式区分 | 書式の詳細パラメータ型 |
---|---|---|
数字(Number) | CellDataFormatFlag.Number | NumberDataFormatter.NumberFormatArgs |
パーセント(Percent) | CellDataFormatFlag.Percent | NumberDataFormatter.NumberFormatArgs |
通貨(Currency) | CellDataFormatFlag.Currency | CurrencyDataFormatter.CurrencyFormatArgs |
日付(DateTime) | CellDataFormatFlag.DateTime | DateTimeDataFormatter.DateTimeFormatArgs |
テキスト(Text) | CellDataFormatFlag.Text | なし |
カスタマイズした書式 | CellDataFormatFlag.Custom | 全てのデータ型 |
数字(Number)
数字書式の場合、設定した数字フォーマットでデータを表示します。数字のカンマ区切り、小数点以下桁数と負の数の表示形式を設定できます。
設定例のソースコードは以下の通りです。
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.789 | Minus |
赤字 | 123,456,789 | Red |
括弧付き | (123,456.789) | Brackets |
赤字と括弧付き | (123,456.789) | Brackets | Red |
三角マーク | ▲ 123,456,789 | Prefix_Sankaku |
赤字で三角マーク | ▲ 123,456,789 | Prefix_Sankaku | Red |
NumberDataFormatter.NumberNegativeStyle
列挙体の値を OR 演算子で二つのスタイルを合わせて設定できます。
数字型(数字、パーセント、日付時間)の書式に設定した場合セル中テキストが自動的に右寄せに設定されます。テキストを左寄せに設定したい場合、セルスタイルを左寄せに設定します。セルスタイルについて詳しくは、「スタイル」をご覧ください。
例1:数字書式を設定
// 書式を設定 sheet.SetRangeDataFormat("A1", CellDataFormatFlag.Number); // データを設定 sheet["A1"] = 12345.678;
結果:
例2:カンマ区切り利用、小数点以下 2 桁
ソースコード:
sheet.SetRangeDataFormat("A1", // 応用範囲 CellDataFormatFlag.Number, // 書式種類 new NumberDataFormatter.NumberFormatArgs() // 書式フォーマット { // カンマ区切りを利用(例:123,456) UseSeparator = true, // 小数点以下桁数(例:0.12) DecimalPlaces = 2, }); sheet["A1"] = 123456;
結果:
例3:カンマ区切り利用、負の数の場合赤字で表示
ソースコード:
sheet.SetRangeDataFormat("A1", // 応用範囲 CellDataFormatFlag.Number, // 書式種類 new NumberDataFormatter.NumberFormatArgs() // 書式フォーマット { // カンマ区切りを利用 UseSeparator = true, // 小数点以下桁数 DecimalPlaces = 2, // マイナスの場合のスタイル NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Red, }); // セルデータを設定 sheet["A1"] = -123456;
結果:
例4:カンマ区切り利用、小数点以下を非表示、負の数は三角マック付きで表示
ソースコード:
sheet.SetRangeDataFormat("A1", // 応用範囲 CellDataFormatFlag.Number, // 書式種類 new NumberDataFormatter.NumberFormatArgs() // 書式フォーマット { // カンマ区切りを利用 UseSeparator = true, // 小数点以下桁数 DecimalPlaces = 0, // マイナスの場合のスタイル NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Prefix_Sankaku, }); // セルデータを設定 sheet["A1"] = -123456;
結果:
例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;
結果:
小数点以下表示桁数を1桁に設定していたため、数値が四捨五入されて表示されます。
パーセント(Percent)
パーセントは数字書式の拡張形式であり、数字書式の設定(カンマ区切り、小数点以下桁数)が設定できます。
例1:パーセントで小数を表示
// 書式を設定 sheet.SetRangeDataFormat("A1", CellDataFormatFlag.Percent); // セルデータを設定 sheet["A1"] = 0.15;
結果:
例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;
結果:
通貨(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 };
結果:
例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 };
結果:
日付(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);
結果:
例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);
結果:
例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);
結果:
文字(Text)
データはそのまま(.NETのデフォルトフォーマット)で画面に表示したい場合、書式を Text に設定します。
// 書式を設定 sheet.SetRangeDataFormat("A1", CellDataFormatFlag.Text); // データを設定 sheet["A1"] = 1.23456;
結果:
書式の取得
セルから設定された書式を取得するには、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; } }