【C#】データベースからExcel表を出力できるアプリケーションを作成しました

2022/11/09に公開

はじめに

今回のアプリケーションはポートフォリオの中にC#を含めたいと思い作成し始めしました。
このようなアプリケーションにしようと思った理由は、業務系の仕事に携わっている中で
「データベースから取ってきたデータを整形して Excel 等のファイルに出力できる」
このようなツールがあれば便利であり、需要もあるのではと考えたからです。

この記事ではアプリケーションの説明書のように機能紹介をしていきたいと思います。

以下からダウンロードすることができます。
https://github.com/Takuty-a11y/YieldExportReports/releases/tag/v1.0.0

YieldExportReport-v1.0.0.zip をダウンロードし解凍後フォルダ内の YieldExportReport.exe で起動します。
ApplicationFolder

開発環境

  • IDE:Visual Studio Community 2022
  • OS:Windows10 21H2
  • 言語:C#
  • フレームワーク:.NET6

対応 OS

Windows のみ(.NET6 対応)
※.NET6 対応 Windows 一覧
https://learn.microsoft.com/ja-jp/dotnet/core/install/windows?tabs=net60

また、Windows.NET6がインストールされていない場合は以下のようなメッセージが表示されます。
NET6NotInstall

OK をクリックしていただくか以下ページののデスクトップアプリ実行から.NET6 のランタイムインストールすると利用できます。
https://dotnet.microsoft.com/ja-jp/download/dotnet/6.0/runtime?cid=getdotnetcore

機能一覧

ここからは機能を紹介していきます。

ログイン画面

起動時最初の画面です。
ここにデータベース接続設定一覧が表示されます。
現在は何もありませんので追加ボタンから接続設定を新規作成します。
StartWindow

データベース接続

ここでデータベース接続設定を編集します。
対応データベース

  • MicrosoftSQLServer
  • MicrosoftOleDb
  • MySQL
  • PostgreSQL

今回は MySQL のテストデータベースを作成しておきましたので、そこに対して接続設定を記載します。
LoginSetting

設定ファイルはクエリや出力を保存するファイルです。
この後作成していくので空白のままで構いません。

編集完了したらデータベースへ接続します。
BeforeLogin

メイン画面

アプリケーションの画面は 5 つの画面で構成されます。

  • クエリエディタ
  • レポートエディタ
  • データベースツリー
  • データビュー
  • レポートツール

AfterLogin

ドッキングウインドウとなっているため構成を移動することも可能です。
AfterMoveDock

設定ファイル

クエリやレポート出力設定は個別にファイル管理することが可能です。
ファイルから設定保存用ファイルを新規作成します。
SettingCreate

選択後からは適宜、保存ボタンで選択したファイルに設定が保存されます。

クエリエディタ

ここでは SQL を自由に記述します。
今回はテストデータから社員一覧を取得するような SQL を記載しています。
CreateQuery

クエリ実行

実行ボタンで接続中のデータベースからデータを取得しデータビューに表示します。
以下のようにデータベースの社員情報がデータビューに表示されています。
GetData

データビュー右のボタンから XML,JSON,CSV,Excel の形式でデータ出力することができます。

レポート設定[全般]

データビューのデータをレポートに出力するにはレポートエディタで設定をします。

全般から出力の基本設定ができます。
ReportGeneralSetting

出力先やファイル名,出力後の動作などを項目を用意しています。

レポート設定[テンプレート]

テンプレートから出力元の Excel ファイル選択やシート選択できます。
ReportTemplateSetting

今回は D ドライブ直下に以下ようなテンプレートファイルを用意しました。
ReportTemplate

レポート出力設定[出力設定]

取得したデータをテンプレートのどのセルに出力するかを設定できます。

セル出力

レポートツールから出力するフィールドを設定に追加できます。
ReportCellSettingAdd

追加後、セル列に出力したいセルを入力すればそのセルへデータが出力されます。
ReportCellSettingAfter

連続出力

データをデータビュー行数だけ繰り返し出力する設定です。

テンプレートファイルのどの行から繰り返し出力するか設定します。
今回は 8 行目からデータが出力されてほしいので「8」とします。
ReportRepeatSettingRow

フィールド&セルの設定もセル出力設定と同様に行うことができます。
ReportRepeatSetting
ReportRepeatSettingAfter

レポート出力(分割なし)

ここまでの設定でレポートを出力してみます。
OutputReport

以下のように Excel ファイルが出力されました。
先ほど設定したセルにデータビューのデータが出力されています。
ReportNoSplit

レポート出力(分割あり)

レポートが出力されましたが部署コード,部署名が同一セルへの出力になってるので分割して部署ごとのレポートを作成します。

シート分割

部署ごとにシートを作成してみます。
シート分割設定へ「部署名」を追加します。
ReportSheetSplitSetting.png

さらに全般から分割設定がありますので「シート分割のみ」を選択します。
ReportGeneralSettingSheetSplit

これでレポートを出力すると以下のように部署ごとにシートが作成されています。
ReportSheetSplit1
ReportSheetSplit2

ファイル分割

部署ごとにレポートファイルを作成してみます。
ファイル分割設定へ「部署名」を追加します。
ReportFileSplitSetting

さらに全般から分割設定がありますので「ファイル分割のみ」を選択します。
ReportGeneralSettingFileSplit

そして出力後にファイル全てを開くよりもフォルダを開いてほしいので、出力後処理「フォルダを開く」を選択します。
ReportGeneralSettingOpenFolder

これでレポートを出力するとフォルダが開き、以下のように部署ごとにファイルが作成されています。
ReportFileSplitFolder
ReportFileSplit1
ReportFileSplit2

まとめ

私のポートフォリオとして内部のコード等を評価されれば良いと思っていました。
ですが作成していくと、この機能がないと他が成り立たないや使い勝手が悪いなど考えるようになりここまで仕上げるのに半年程かかってしまいました。。
100%ではないにしろ私が構想していた機能は粗方実装できましたので、これからさらにより良いアプリケーションに仕上げていけたらと思っています。

機能追加予定

  • PDF や HTML での出力機能追加
  • クエリではなく専用ツールを作成する

ソースコードを Git に UP しています
https://github.com/Takuty-a11y/YieldExportReports

GitHubで編集を提案

Discussion