SEの転職活動で使うべきサイト・エージェント 目指せ年収アップ
SEの転職活動で使うべきサイト・エージェント 目指せ年収アップ
東南アジアをバックパッカーしながら転職活動をした記録
東南アジアをバックパッカーしながら転職活動をした記録
7年目で初の転職活動 2カ月で内定獲得した記録
7年目で初の転職活動 2カ月で内定獲得した記録
おすすめのプログラミングスクール めざせ就職・年収アップ!
おすすめのプログラミングスクール めざせ就職・年収アップ!
メンズクリア2年通い放題入会! その後のヒゲ状況(不定期更新)
メンズクリア2年通い放題入会! その後のヒゲ状況(不定期更新)
ブログ開始3年が経った月収が1万超えてた!
ブログ開始3年が経った月収が1万超えてた!
プログラミング独学・スクール・就職(目次)
プログラミング独学・スクール・就職(目次)
previous arrowprevious arrow
next arrownext arrow
 
Shadow
C#/VB.net

C# エクセル(Office)にdatatableの中身を出力 色、罫線付き

エクセルをC#で処理するときにMicrosoft.Office.Interop.Excelを参照追加して処理することが今のところは主流です。

ここで面倒なことがあります。

プロセスが残らないよう制御が面倒です。

いちいちエクセルを開くので時間がかかる。

ということで、エクセルを開かず、読込む方法を紹介します。

実際に作ったファイルはこちらからダウンロードできます。

データテーブルの準備などをしているので、ダウンロード後、そのまま実行できます。

デモンストレーションで動かした動画を載せておきます。

 

Datatableをエクセルのシートに出力するコード

Datatableの中身をエクセルのシートオブジェクトに出力するメソッドを作りました。

色や罫線も付けています。

取込むデータテーブルは以下です。

流れとしては以下です。

①エクセルのシートに列名を出力

②Datatableの中身をエクセルのシートに出力

この時、「女」セルがあれば、フォントを赤にしています。

③出力した範囲に罫線を引く

④列に色を付ける

using ClosedXML.Excel;

/// <summary>
/// データテーブルにデータをエクセルシートにセットする
/// </summary>
/// <param name="dataTable">データテーブル</param>
/// <param name="workSheet">シート</param>
/// <returns>データテーブルを出力したシートを返す</returns>
public IXLWorksheet outPutDataTableToExcel(DataTable dataTable, IXLWorksheet workSheet)
{

    IXLRange objRrange = null;                            //rangeオブジェクト

    //-----------------エクセルにデータテーブルの中身をセット-----------------
    //列をエクセルにセット
    for (int col = 1; col <= dataTable.Columns.Count; col++)
    {
        workSheet.Cell(1, col).Value = dataTable.Columns[col -1].ColumnName;
    }

    //datatableをシートにセットする
    //行数分ループ(ヘッダの次の行から出力開始)
    for (int row = 0; row <= dataTable.Rows.Count -1; row++)
    {
        //列数分ループ
        for (int col = 1; col <= dataTable.Columns.Count; col++)
        {
            workSheet.Cell(row + 2, col).Value = dataTable.Rows[row][col - 1];

            //性別が「女」の場合、フォントを赤にする
            if(dataTable.Rows[row][col - 1].ToString() == "女")
            {
                workSheet.Cell(row + 2, col).Style.Font.FontColor = XLColor.Red;
            }
        }
    }
    //-----------------エクセルにデータテーブルの中身をセット-----------------
    

    //-----------------シートに罫線を引く-----------------
    //罫線を引く範囲をセット
    objRrange = workSheet.Range(workSheet.Cell(1, 1), workSheet.Cell(dataTable.Rows.Count +1, dataTable.Columns.Count));

    //罫線を引く
    objRrange.Style.Border.OutsideBorder = XLBorderStyleValues.Thin;
    objRrange.Style.Border.InsideBorder = XLBorderStyleValues.Thin;
    //-----------------シートに罫線を引く-----------------


    //-----------------列に色を付ける-----------------
    objRrange = workSheet.Range(workSheet.Cell(1, 1), workSheet.Cell(1, dataTable.Columns.Count));
    objRrange.Style.Fill.BackgroundColor = XLColor.LightBlue;

    //-----------------列に色を付ける-----------------
    
    return workSheet;

}

解説

列名を出力

16行目~18行目で列を出力しています。

Cell(1,col)で1行目かあから順に出力しています。

Datatableの列の開始は0列目から始まりますが、エクセルは1列目です。

なので、col-1でエクセルとDatatableの列を合せています。

Datatableの中身を出力

23行目~36行目でDatatableの中身を出力しています。

ここもDatatableの行、列のかいしは0からですが、エクセルは1から始まることを考慮しています。

行は列の次の行なので、2行目です。

⇒row+2をして合せています。

また、この時、IF文を使ってDatatableの値が「」の場合、フォントをにしています。

罫線、背景色

それぞれ、列数と行数をDatatableのrows.countとcolumns.countで取得し、

線と色をセットする範囲を指定しています。

_

 

Closed XMLの参照設定追加

ClosedXMLで参照追加が必要です。

手順は以下の通りです。

パッケージマネージャコンソールを開く

「ツール」→「NuGetパッケージマネージャ」→「パッケージマネージャコンソール」の順で開きます。

インストール実行

その後、Install-Packageコマンドを実行して完了です。

Install-Package ClosedXML

 

 

ABOUT ME
LooseCarrot
LooseCarrot
ブログ運営をしているLooseCarrotです。 興味のあることにトライして発信していきます! プロフィール

関連している記事