【C#】【Linq】ファイル名の昇順に並べたリストを作成する

目的

ファイル名が「file1.txt」「file2.txt」「file10.txt」などの規則性がある場合に、正しくソートしたい場合を想定。 今回は、ファイル名中の数値のみを正規表現で取得し、それをソートすることで実現した。

ソースコード

var fileList = (new DirectoryInfo(filePath)).GetFiles().
    Select(x =>
    new
    {
        name = x.FullName,
        //ファイル名だけ取り出す→数字だけ残す→数値に変換する(ソート用)
        no = int.Parse(Regex.Replace(Path.GetFileName(x.FullName), @"[^0-9]", ""))
    }
    ).OrderBy(x => x.no).ToList();

【C#】slack APIを実行し、結果を取得する

目的

slackのAPIをC#から実行し、結果を受け取る

必要なもの

slack APIの実行に必要なtoken

slack上でアプリを新規作成し、OAuth Access Tokenを入手する。このとき、OAuth&PermissionsのUser Token Scopesに「files:read」をつけると、今回実行するfiles.listが実行できるようになる。

slack APIの調査(slack API Tester)

https://api.slack.com/methods/files.list/test
のようなテストページが用意されているので、こちらを使って試すことができる。
tokenは、「No token」を指定して上記のOAuth Access Tokenを指定する。
ページ下部の「Test Method」をクリックすると実行され、結果が表示される。
実行したURLも表示されるので、このURLを使う。

NuGetにてNewtonsoft.Jsonをインストールする

APIの戻り値がJSON形式で返ってくるため、各値を取得しやすいようにする。

ソースコード(WindowForms)

private const string TOKEN = "xxx-xxx-xxx-xxx-xxx";

/// <summary>
/// ボタンクリックイベント
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param> private async void button1_Click(object sender, EventArgs e) {
//URL貼り付け var result = await GetData($"https://slack.com/api/files.list?token={TOKEN}&count=100&pretty=1");
//JObject型にキャストする var jsonValue = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(result);
//ok、files、pagingの3つの要素が返ってくるので、ここではfilesを取得 var files = jsonValue["files"]; foreach (var file in files) {
//各値を取得 Console.WriteLine(file["id"]); Console.WriteLine(file["name"]); } }
/// <summary>
/// 渡されたURLへアクセスし、返ってきた値を返す
/// </summary>
/// <param name="url"></param>
/// <returns></returns> private async Task GetData(string url) { using (var client = new HttpClient()) { var res = await client.GetAsync(url); return await res.Content.ReadAsStringAsync(); } }

【C#】【JSKExcelWrapper.dll】Excelファイルへデータ転記、テンプレート(ひな形)ファイルを利用した帳票形式出力

C#でのExcel出力が簡単にできるDLLの提供サービスを行っています。
詳細はこちらをご確認ください。
このページでは、その使い方を紹介しています。

//Excel起動
using (var excelWrapper = new JSKExcelWrapper.JSKExcelWrapper())
{
    //テンプレート(ひな形)ファイルパス取得
    var templatePath = Path.Combine(Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), @"テンプレート\帳票テンプレート.xlsx");

    //◆Excelファイル開く
    excelWrapper.OpenWorkbook(templatePath);

    //◆シート取得
    Worksheet worksheet = excelWrapper.GetWorksheet("template");

    //帳票形式で表示させるためのダミーデータ
    var dummyData = new List<string[]>()
    {
        new string[]{"A001", "部品1", "TEST-A001", "汎用部品1", "メモ1"},
        new string[]{"A002", "部品2", "TEST-A002", "汎用部品2", "メモ2"},
        new string[]{"A003", "部品3", "TEST-A003", "汎用部品3", "メモ3"},
        new string[]{"A004", "部品4", "TEST-A004", "汎用部品4", "メモ4"},
        new string[]{"A005", "部品5", "TEST-A005", "汎用部品5", "メモ5"},
        new string[]{"A006", "部品6", "TEST-A006", "汎用部品6", "メモ6"},
        new string[]{"A001", "部品1", "TEST-A001", "汎用部品1", "メモ1"},
        new string[]{"A002", "部品2", "TEST-A002", "汎用部品2", "メモ2"},
        new string[]{"A003", "部品3", "TEST-A003", "汎用部品3", "メモ3"},
        new string[]{"A004", "部品4", "TEST-A004", "汎用部品4", "メモ4"},
        new string[]{"A005", "部品5", "TEST-A005", "汎用部品5", "メモ5"},
        new string[]{"A006", "部品6", "TEST-A006", "汎用部品6", "メモ6"},
        new string[]{"A001", "部品1", "TEST-A001", "汎用部品1", "メモ1"},
        new string[]{"A002", "部品2", "TEST-A002", "汎用部品2", "メモ2"},
        new string[]{"A003", "部品3", "TEST-A003", "汎用部品3", "メモ3"},
        new string[]{"A004", "部品4", "TEST-A004", "汎用部品4", "メモ4"},
        new string[]{"A005", "部品5", "TEST-A005", "汎用部品5", "メモ5"},
        new string[]{"A006", "部品6", "TEST-A006", "汎用部品6", "メモ6"},
        new string[]{"A001", "部品1", "TEST-A001", "汎用部品1", "メモ1"},
        new string[]{"A002", "部品2", "TEST-A002", "汎用部品2", "メモ2"},
        new string[]{"A003", "部品3", "TEST-A003", "汎用部品3", "メモ3"},
        new string[]{"A004", "部品4", "TEST-A004", "汎用部品4", "メモ4"},
        new string[]{"A005", "部品5", "TEST-A005", "汎用部品5", "メモ5"},
        new string[]{"A006", "部品6", "TEST-A006", "汎用部品6", "メモ6"},
        new string[]{"A001", "部品1", "TEST-A001", "汎用部品1", "メモ1"},
        new string[]{"A002", "部品2", "TEST-A002", "汎用部品2", "メモ2"},
        new string[]{"A003", "部品3", "TEST-A003", "汎用部品3", "メモ3"},
        new string[]{"A004", "部品4", "TEST-A004", "汎用部品4", "メモ4"},
        new string[]{"A005", "部品5", "TEST-A005", "汎用部品5", "メモ5"},
        new string[]{"A006", "部品6", "TEST-A006", "汎用部品6", "メモ6"},
        new string[]{"A001", "部品1", "TEST-A001", "汎用部品1", "メモ1"},
        new string[]{"A002", "部品2", "TEST-A002", "汎用部品2", "メモ2"},
        new string[]{"A003", "部品3", "TEST-A003", "汎用部品3", "メモ3"},
        new string[]{"A004", "部品4", "TEST-A004", "汎用部品4", "メモ4"},
        new string[]{"A005", "部品5", "TEST-A005", "汎用部品5", "メモ5"},
        new string[]{"A006", "部品6", "TEST-A006", "汎用部品6", "メモ6"},
    };

    //◆テンプレートファイルの各セルに設定されたセル名から、転記すするセル番地を取得する
    var indexCode1 = excelWrapper.GetExcelIndexData(worksheet, "コード");
    var indexName1 = excelWrapper.GetExcelIndexData(worksheet, "名称");
    var indexCode2 = excelWrapper.GetExcelIndexData(worksheet, "コード2");
    var indexName2 = excelWrapper.GetExcelIndexData(worksheet, "名称2");
    var indexMemo = excelWrapper.GetExcelIndexData(worksheet, "メモ");

    //◆データ数分、明細行を行コピーする(罫線や書式もコピーされる)
    excelWrapper.CopyRow(worksheet,
        indexCode1.rowIndex/*コピー行の行番号(開始)*/,
        indexCode1.rowIndex/*コピー行の行番号(終了)*/,
        indexCode1.rowIndex + 1/*貼り付ける位置の行番号(開始)  最初の1行はすでに存在しているので、次の行からコピーする*/,
        indexCode1.rowIndex + dummyData.Count - 1/*貼り付ける位置の行番号(終了)  最初の1行はすでに存在しているので、-1する*/);

    //データの行数分回す
    foreach (var data in dummyData)
    {
        //◆転記
        excelWrapper.SetCellValue(worksheet, indexCode1, data[0]);
        excelWrapper.SetCellValue(worksheet, indexName1, data[1]);
        excelWrapper.SetCellValue(worksheet, indexCode2, data[2]);
        excelWrapper.SetCellValue(worksheet, indexName2, data[3]);
        excelWrapper.SetCellValue(worksheet, indexMemo, data[4]);

        //◆記載が終わったので、次の行へインデックスをずらす
        indexCode1.NextRow();
        indexName1.NextRow();
        indexCode2.NextRow();
        indexName2.NextRow();
        indexMemo.NextRow();
    }


    //出力先パス(このEXEと同じフォルダに出力)
    var fileBase = Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + @"\サンプル出力⑤_" + DateTime.Now.ToString("yyyyMMddHHmmss");

    //◆ファイル出力
    excelWrapper.SaveExcel(fileBase + ".xlsx");     //Excelファイル出力
    excelWrapper.SavePDF(fileBase + ".pdf");        //PDFファイル出力

    //◆プレビュー表示
    excelWrapper.Preview();
}

【C#】【JSKExcelWrapper.dll】Excelファイルへシート追加、シート名変更、改ページ設定

C#でのExcel出力が簡単にできるDLLの提供サービスを行っています。
詳細はこちらをご確認ください。
このページでは、その使い方を紹介しています。

//Excel起動
using (var excelWrapper = new JSKExcelWrapper.JSKExcelWrapper())
{
    //◆シート追加
    var worksheetSample1 = excelWrapper.AddWorksheet("Sample1");
    var worksheetSample2 = excelWrapper.AddWorksheet("Sample2");

    //◆シート名変更(__Sample__から、NewSheetに変更)
    worksheetSample2 = excelWrapper.ChangeWorksheetName("Sample2", "NewSheet2");

    //◆シート削除(Sheet1というシートが自動作成されるので削除する)
    excelWrapper.DeleteWorksheet("Sheet1");

    //◆シート非表示
    excelWrapper.HideWorksheet(worksheetSample2);

    //◆シート表示
    excelWrapper.ShowWorksheet(worksheetSample2);


    //◆文字入力(A1~D100の全セルに「テスト」という文字を書き込む)
    excelWrapper.SetCellValue(worksheetSample1, "A1:H30", "テスト");

    //◆罫線
    excelWrapper.SetLine(worksheetSample1, "A1:H30");

    //◆改ページクリア(現在設定されている改ページをすべて消す)
    excelWrapper.ClearAlllBreaks(worksheetSample1);


    //◆改ページ設定(縦方向)
    excelWrapper.SetVPageBreaks(worksheetSample1, "E15");

    //◆改ページ設定(横方向)
    excelWrapper.SetHPageBreaks(worksheetSample1, "A16");

    //◆シートコピー(コピー元、コピー先)
    excelWrapper.CopyWorksheet("Sample1", "コピーしたシート");


    //出力先パス(このEXEと同じフォルダに出力)
    var fileBase = Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + @"\サンプル出力④_" + DateTime.Now.ToString("yyyyMMddHHmmss");

    //◆ファイル出力
    excelWrapper.SaveExcel(fileBase + ".xlsx");     //Excelファイル出力
    excelWrapper.SavePDF(fileBase + ".pdf");        //PDFファイル出力

    //◆プレビュー表示
    excelWrapper.Preview();
}

【C#】【JSKExcelWrapper.dll】Excelファイルへ縦棒グラフ、折れ線グラフ、円グラフ追加

C#でのExcel出力が簡単にできるDLLの提供サービスを行っています。
詳細はこちらをご確認ください。
このページでは、その使い方を紹介しています。

//Excel起動
using (var excelWrapper = new JSKExcelWrapper.JSKExcelWrapper())
{
    //◆シート取得
    var worksheet = excelWrapper.GetWorksheet("Sheet1");

    //◆グラフ用のデータを記載
    //第2引数で複数のセル範囲を指定した場合、最後の引数にそれぞれのセルに記載する値を指定できる。
    //その場合、引数に指定された値が左から1行ずつ記載されていく(A1→B1→A2→B2→A3→B3→A4→B4の順)
    excelWrapper.SetCellValue(worksheet, "A1:B4",
        "項目名", "値",
        "項目1", "50",
        "項目2", "75",
        "項目3", "60");

    //◆枠線を追加
    excelWrapper.SetLine(worksheet, "A1:B4");

    //◆縦棒グラフ
    excelWrapper.AddChartVerticalBar(worksheet, "A1:B4", "縦棒グラフ(セル指定)", "A6", 200, 200);    //表示位置をセル番地を指定する場合
    excelWrapper.AddChartVerticalBar(worksheet, "A1:B4", "縦棒グラフ(座標指定)", 220, 90, 200, 200);  //表示位置を座標で指定する場合

    //◆折れ線グラフ
    excelWrapper.AddChartLine(worksheet, "A1:B4", "折れ線グラフ(セル指定)", "A17", 200, 200);         //表示位置をセル番地を指定する場合
    excelWrapper.AddChartLine(worksheet, "A1:B4", "折れ線グラフ(座標指定)", 220, 300, 200, 200);      //表示位置を座標で指定する場合

    //◆円グラフ
    excelWrapper.AddChartCircle(worksheet, "A1:B4", "円グラフ(セル指定)", "A28", 200, 200);         //表示位置をセル番地を指定する場合
    excelWrapper.AddChartCircle(worksheet, "A1:B4", "円グラフ(座標指定)", 220, 510, 200, 200);      //表示位置を座標で指定する場合


    //出力先パス(このEXEと同じフォルダに出力)
    var fileBase = Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + @"\サンプル出力③_" + DateTime.Now.ToString("yyyyMMddHHmmss");

    //◆ファイル出力
    excelWrapper.SaveExcel(fileBase + ".xlsx");     //Excelファイル出力
    excelWrapper.SavePDF(fileBase + ".pdf");        //PDFファイル出力

    //◆プレビュー表示
    excelWrapper.Preview();
}

【C#】【JSKExcelWrapper.dll】Excelファイルへシェイプ図形、画像ファイルの追加

C#でのExcel出力が簡単にできるDLLの提供サービスを行っています。
詳細はこちらをご確認ください。
このページでは、その使い方を紹介しています。

//Excel起動
using (var excelWrapper = new JSKExcelWrapper.JSKExcelWrapper())
{
    //◆シート取得
    var worksheet = excelWrapper.GetWorksheet("Sheet1");

    //◆四角形追加
    excelWrapper.AddShapeSquare(worksheet, "A1", 100, 100, Color.Red);          //表示位置をセル番地を指定する場合
    excelWrapper.AddShapeSquare(worksheet, 120, 0, 100, 100, Color.Blue);     //表示位置を座標で指定する場合

    //◆円形追加
    excelWrapper.AddShapeCircle(worksheet, "A8", 100, 100, Color.Red);          //表示位置をセル番地を指定する場合
    excelWrapper.AddShapeCircle(worksheet, 120, 140, 100, 100, Color.Blue);     //表示位置を座標で指定する場合

    //◆画像ファイル追加

    //画像ファイルパス取得
    var picturePath = Path.Combine(Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), @"テンプレート\画像サンプル(いらすとやさん).png");

    excelWrapper.AddPicture(worksheet, picturePath, "A20", 100, 100);           //表示位置をセル番地を指定する場合
    excelWrapper.AddPicture(worksheet, picturePath, 100, 350, 100, 100);        //表示位置を座標で指定する場合


    //出力先パス(このEXEと同じフォルダに出力)
    var fileBase = Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + @"\サンプル出力②_" + DateTime.Now.ToString("yyyyMMddHHmmss");

    //◆ファイル出力
    excelWrapper.SaveExcel(fileBase + ".xlsx");     //Excelファイル出力
    excelWrapper.SavePDF(fileBase + ".pdf");        //PDFファイル出力

    //◆プレビュー表示
    excelWrapper.Preview();
}

【C#】【JSKExcelWrapper.dll】Excelファイルへ文字入力、文字色変更、罫線設定など

C#でのExcel出力が簡単にできるDLLの提供サービスを行っています。
詳細はこちらをご確認ください。
このページでは、その使い方を紹介しています。

//Excel起動
using (var excelWrapper = new JSKExcelWrapper.JSKExcelWrapper())
{
    //◆シート取得
    var worksheet = excelWrapper.GetWorksheet("Sheet1");


    //◆文字入力
    excelWrapper.SetCellValue(worksheet, "A1", "A1へ書き込み");
    excelWrapper.SetCellValue(worksheet, "A2", Color.Red, "A2へ書き込み(文字列赤)");        //文字色変更
    excelWrapper.SetCellValue(worksheet, "A3:B4", Color.Green, "複数セルまとめて記載");

    excelWrapper.SetCellValue(worksheet, "C1", "1");
    excelWrapper.SetCellValue(worksheet, "C2", "2");
    excelWrapper.SetCellValue(worksheet, "C3", "=C1+C2");       //計算式入力

    //◆列幅変更(A列を変更)
    excelWrapper.SetColumnWidth(worksheet, "A", 20);

    //◆行高さ変更(1行目~3行目を変更)
    excelWrapper.SetRowHeight(worksheet, "1:4", 20);

    //◆罫線
    excelWrapper.SetLine(worksheet, "C1:C3");

    //◆セル背景色
    excelWrapper.SetCellBackColor(worksheet, "C3", Color.Green);

    //◆文字取得
    Console.WriteLine("取得した文字:" + excelWrapper.GetCellValue(worksheet, "A1"));
    Console.WriteLine("取得した文字:" + excelWrapper.GetCellValue(worksheet, "A2:A3"));    //複数セル纏めて
    Console.WriteLine("取得した文字:" + excelWrapper.GetCellValue(worksheet, "C3"));       //検索結果の値が返る

    //◆日付形式で表示
    excelWrapper.SetCellValue(worksheet, "D1", "44090");
    excelWrapper.SetCellFormat(worksheet, "D1", "yyyy/MM/dd");

    //◆数値の3桁区切りで表示
    excelWrapper.SetCellValue(worksheet, "D2:D3", "123456789");
    excelWrapper.SetCellFormat(worksheet, "D2:D3", "#,##0");


    //出力先パス(このEXEと同じフォルダに出力)
    var fileBase = Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + @"\サンプル出力①_" + DateTime.Now.ToString("yyyyMMddHHmmss");

    //◆ファイル出力
    excelWrapper.SaveExcel(fileBase + ".xlsx");     //Excelファイル出力
    excelWrapper.SavePDF(fileBase + ".pdf");        //PDFファイル出力

    //◆プレビュー表示
    excelWrapper.Preview();
}

【C#】Excel出力が簡単になるツールの提供サービス

 

数行記述するだけで簡単にExcelファイル出力が可能です!


このDLLを利用して実際に出力したExcelファイルです。Excelのプレビュー機能を利用して、出力したファイルをすぐに表示することにより、プログラムの一部として利用することができます。

概要

C#のアプリを開発中に、Excelファイルでの出力が必要な場面は結構あると思います。
このサービスでは、Excel出力が簡単になるDLLを販売しています。このDLLを使えば、簡単にExcelファイルを出力できるようになります。
尚、このDLLはExcelの操作自動化により実現しているため、動作させるPCにExcelがインストールされている必要があります。また、NuGetからダウンロードできるNetOffice(v1.7.4.4)というツールを利用しています。これらがインストールされていない環境では動作しません。ご購入前には、必ずサンプルアプリをダウンロードして動作することを確認した上でご購入をお願いいたします。ご購入後のキャンセルはできません。

<対応する機能>
・セルの文字取得、文字書き込み、文字の色付け(「A1」などのように番地指定)
・セルの列幅、行高さの指定
・新規ブック、シートの追加。シートのコピー。改ページ設定。シートの表示/非表示
・Excelプレビュー表示
・Excelファイル保存、PDFファイル保存
・セル背景色、罫線、表示形式設定
・シェイプ図形(四角形、円形)追加
・グラフ(縦棒/折れ線/円)追加
・セル番地の計算が簡単にできる機能(「A1」と指定して、NextRow()メソッドを呼び出すと、「A2」と自動計算してくれる)
・画像ファイル追加
・テンプレートのExcelファイルを利用した、帳票形式でのファイル出力(セルの名前指定によるデータの転記、行コピーによる罫線などの書式コピー)

<実際のコードと出力例>




注意事項

※このDLLを利用するにはExcelがインストールされている必要があります(インストールされていない環境では動作しません)
※NetOffice.Excel.Net45とNetOffice.Core.Net45を必要としますNuGetでそれぞれv1.7.4.4をインストールしてください(※これ以外のバージョンでは動作しません)
※コンパイル済みのDLLと、それを利用したサンプルアプリのソースコード(Visual Studio 2017 C# .NET Framework 4.8)を同梱しています。
DLLのソースコードは公開していません。
※配布するDLLは業務アプリ等に組み込んでご利用・販売いただけます。但し、DLLのみを第3者に公開・販売することは禁止します。著作権も譲渡しません。
※Windows10、Excel2016でのみ動作確認を行っています。必ず、ご購入前にサンプルアプリをダウンロードして、動作確認を行ってください。ご購入後の返品はできません。

お試し動作確認

お渡しするDLLを操作するサンプルソースコードはこちらからお試しダウンロードできます(8.6MB)
※ダウンロード後、Zipファイルを解凍する前に、ファイルを右クリック→全般タブの一番下のセキュリティの「許可する」にチェックを入れて、「OK」ボタンをクリックした後に、解凍してください。


このサンプルアプリをダウンロードできます。ボタンをクリックするだけでExcelファイルが出力されるので、ご購入前の動作確認も容易です。

ご購入はこちらからどうぞ

C#のExcel出力が簡単になるDLLを提供します 数行記述するだけで簡単にExcelファイル出力が可能です!

【C#】ユーザーコントロールをデザイナで表示した際に改行を指定可能にする

対象のプロパティに以下の属性を記載すればOK

[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(System.Drawing.Design.UITypeEditor))]

サンプル

[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(System.Drawing.Design.UITypeEditor))]
public string TextBoxText
{
    get
    {
        return this.TextBox1.Text;
    }
    set
    {
        this.TextBox1.Text = value;
    }
}

【C#】特定の文字列で分割する【Split】

文字列「a,,,b,,,c」があるとき、「,,,」で分割して「a」と「b」と「c」を得たい場合は、Splitを利用する

string s = "a,,,b,,,c";

string[] values = s.Split(new string[] { ",,," }, StringSplitOptions.None);

結果

values[0] = “a”;
values[1] = “b”;
values[2] = “c”;

となる。

VB.NETのSplitより書き方が面倒・・・