ワークシートの入力済みのデータを昇順や降順で並べ替えたい、というのはよくあるケースではないでしょうか。DioDocs for Excel(ディオドック)を利用すれば、データが含まれるワークシートを読み込んで、データをソートする処理をカンタンにアプリケーションに実装できます。
セル範囲を値でソートする
ワークシートのセル範囲でデータの並べ替えを実行するには、Sort
メソッドを使用します。以下ではパラメータでソートに使用する列worksheet.Range["C2:C21"]
とソートの方向SortOrientation.Columns
を指定しています。パラメータを追加してソート順(昇順 or 降順)を指定することも可能です。
// 新しいワークブックを作成します
Workbook workbook = new();
// Excelファイルを開きます
workbook.Open("test.xlsx");
IWorksheet worksheet = workbook.Worksheets[0];
// C列の値でソートします
worksheet.Range["A2:F21"].Sort(worksheet.Range["C2:C21"],
orientation: SortOrientation.Columns);
セル範囲を複数列の値でソートする
ワークシートのセル範囲で複数の列で並べ替えを実行するには、先ほどとパラメータが異なるSort
メソッドを使用します。複数の列としてworksheet.Range["C2:C21"]
とworksheet.Range["F2:F21"]
を指定して、それぞれのソート順を昇順と降順に指定しています。
// 新しいワークブックを作成します
Workbook workbook = new();
// Excelファイルを開きます
workbook.Open("test.xlsx");
IWorksheet worksheet = workbook.Worksheets[0];
// 複数列(C列、F列)の値でソートします
worksheet.Range["A2:F21"].Sort(
SortOrientation.Columns,
false,
new ValueSortField[] {
new(worksheet.Range["C2:C21"], SortOrder.Ascending),
new(worksheet.Range["F2:F21"], SortOrder.Descending)
});
セル範囲を値でソートする(テンプレート構文)
ワークシートのデータをソートする方法としては、テンプレート構文で実装する方法も用意されています。以下ではテンプレートのデータフィールドにSort
プロパティを使用してC列でソートするように記載しています。
以下のコードでは、上記のテンプレート構文を記載したワークシートを読み込んで、先ほどと同じデータを追加しています。
// 新規ワークブックの作成
Workbook workbook = new();
// 帳票テンプレートを読み込む
workbook.Open("test-1.xlsx"); // C列でソート
#region データの初期化
DataTable datasource = new();
datasource.Columns.Add(new DataColumn("Id", typeof(int)));
datasource.Columns.Add(new DataColumn("Name", typeof(string)));
datasource.Columns.Add(new DataColumn("JapaneseLanguage", typeof(double)));
datasource.Columns.Add(new DataColumn("Mathematics", typeof(double)));
datasource.Columns.Add(new DataColumn("English", typeof(double)));
datasource.Columns.Add(new DataColumn("Total", typeof(double)));
datasource.Rows.Add(1, "小林 さゆり", 80, 90, 70, 240);
datasource.Rows.Add(2, "遠藤 花子", 70, 90, 90, 250);
datasource.Rows.Add(3, "吉田 洋介", 90, 80, 90, 260);
datasource.Rows.Add(4, "藤田 直人", 70, 70, 80, 220);
datasource.Rows.Add(5, "伊藤 七夏", 70, 90, 70, 230);
datasource.Rows.Add(6, "後藤 拓真", 70, 70, 80, 220);
datasource.Rows.Add(7, "藤井 舞", 70, 80, 90, 240);
datasource.Rows.Add(8, "伊藤 明美", 90, 90, 90, 270);
datasource.Rows.Add(9, "田中 さゆり", 80, 90, 70, 240);
datasource.Rows.Add(10, "吉田 直樹", 70, 70, 90, 230);
datasource.Rows.Add(11, "村上 里佳", 70, 80, 70, 220);
datasource.Rows.Add(12, "石川 翔太", 70, 90, 70, 230);
datasource.Rows.Add(13, "村上 治", 90, 90, 70, 250);
datasource.Rows.Add(14, "藤原 さゆり", 90, 90, 90, 270);
datasource.Rows.Add(15, "小林 聡太郎", 90, 90, 90, 270);
datasource.Rows.Add(16, "井上 直人", 70, 80, 70, 220);
datasource.Rows.Add(17, "清水 千代", 90, 80, 70, 240);
datasource.Rows.Add(18, "中島 浩", 70, 70, 70, 210);
datasource.Rows.Add(19, "佐藤 香織", 90, 80, 80, 250);
datasource.Rows.Add(20, "高橋 充", 90, 90, 70, 250);
#endregion
// データソースを追加
workbook.AddDataSource("ds", datasource);
// データを連結して帳票を作成
workbook.ProcessTemplate();
実行すると、以下のようにデータがC列でソートされた結果が出力されます。
セル範囲を複数列の値でソートする(テンプレート構文)
テンプレート構文においても複数の列でソートすることができます。以下ではテンプレートのデータフィールドにSort
プロパティを使用してC列とF列でソートするように記載しています。F列はソート順を降順に指定しています。
同じように実行すると、以下のようにデータがC列とF列でソートされた結果が出力されます。
今回紹介した機能については以下のサンプルやデモで動作を確認いただけます。
DioDocsの最新バージョン「V7J SP1」の新機能については、以下のページで紹介していますのでこちらも是非ご覧ください。
さいごに
弊社Webサイトでは、製品の機能を気軽に試せるデモアプリケーションやトライアル版も公開していますので、こちらもご確認いただければと思います。
また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。