<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>C#/VB.net | 文系出身のSEですが、何か</title>
	<atom:link href="https://loosecarrot.com/category/se%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2/c-net/feed/" rel="self" type="application/rss+xml" />
	<link>https://loosecarrot.com</link>
	<description>文系(国際系)出身でSE就職のサラリーマンが プログラミング・海外旅行・語学・健康などに関する情報を発信します</description>
	<lastBuildDate>Sun, 23 Jan 2022 12:35:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.8</generator>

<image>
	<url>https://loosecarrot.com/wp-content/uploads/2020/08/cropped-8214a4f1973e7caf419465b3dcc3ffd7-32x32.png</url>
	<title>C#/VB.net | 文系出身のSEですが、何か</title>
	<link>https://loosecarrot.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">151273272</site>	<item>
		<title>無料ブログをワードプレス用にエクスポートできない&#8230; 変換ツールを作ってみた</title>
		<link>https://loosecarrot.com/2020/03/15/4132/</link>
					<comments>https://loosecarrot.com/2020/03/15/4132/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sun, 15 Mar 2020 13:11:39 +0000</pubDate>
				<category><![CDATA[C#/VB.net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング独学]]></category>
		<category><![CDATA[ワードプレス]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4132</guid>

					<description><![CDATA[<p>私は無料ブログを使っていましたが、いろいろと不便なことがあり、ワードプレスへ移行しました。 使っていたのはA8.netの無料ブログ(ファンブログ)です。 ただ、このとき面倒で結構手間がかかりました。 理由はファンブログは</p>
The post <a href="https://loosecarrot.com/2020/03/15/4132/">無料ブログをワードプレス用にエクスポートできない… 変換ツールを作ってみた</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>私は無料ブログを使っていましたが、いろいろと不便なことがあり、ワードプレスへ移行しました。</p>
<p>使っていたのは<a href="https://px.a8.net/svt/ejp?a8mat=2BY7HX+8WB90A+0K+10FASI" rel="nofollow">A8.net</a>の無料ブログ(ファンブログ)です。</p>
<p>ただ、このとき<span style="color: #ff0000;">面倒で結構手間</span>がかかりました。</p>
<p>理由はファンブログは<span style="color: #ff0000;">記事をエクスポートする機能がない</span>からです。</p>
<p>毎回手でHTMLをコピーしてワードプレスのブログに貼りました。</p>
<p>ただ、<strong>不要なHTMLも含まれていたので、手で消して確認してを繰り返しました。</strong></p>
<h2>解決方：指定したタグだけ抜き出すツールを作ってみた</h2>
<img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-4135" src="https://loosecarrot.com/wp-content/uploads/2020/03/848bb0e01356bde64ed1af463aaf2ded.jpg" alt="" width="800" height="400" />
<p>そんなこんなで、ひと手間を楽にするツールをつくってみました。</p>
<p>実際に作ったファイルは<a href="https://base-shop.loosecarrot.com/items/27072539" target="_blank" rel="noopener noreferrer">こちらからダウンロード可能</a>です。</p>
<p>デモンストレーションで動かした動画を載せておきます。</p>
<p><div class="video"><iframe title="無料ブログをワードプレス用にエクスポートできない... 変換ツールを作ってみた" width="500" height="281" src="https://www.youtube.com/embed/9Vl4CsLRZ5o?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div></p>
<h2>オススメな人</h2>
<p>私の個人的な手作りであるので、<span style="color: #ff0000;">完璧な記事移行はできません</span>。</p>
<div class="kaisetsu-box3">
<div class="kaisetsu-box3-title">こんな人にオススメ</div>
<p>無料ブログを使っていてワードプレスへ移行したい</p>
<p>無料ブログに記事のエクスポート機能がない</p>
<p>最低限必要な記事情報だけ移行したい</p>
</div>
<h2>ページ変換する手順</h2>
<p>使う手順を紹介します。</p>
<h3>1.変換したいページをダウンロード</h3>
<p>ページを表示し、「Ctrl」と「S」を同時に押します。</p>
<p>そうすると、ページのファイル(HTML)などがダウンロードできます。</p>
<img decoding="async" class="alignnone size-full wp-image-4144" src="https://loosecarrot.com/wp-content/uploads/2020/03/4bdefded1f10e9ca6c080fbbf4c0f180.jpg" alt="" width="800" height="500" />
<div class="concept-box2">
<p>「ダウンロードフォルダ」にそのままファイルをダウンロードして変換すると、他のファイルも変換されてしまいます。</p>
<p>なので、専用のフォルダを作ってダウンロードしましょう。</p>
<p>私は「ダウンロード」フォルダの中にフォルダを作っています。</p>
</div>
<p>&nbsp;</p>
<h3>2.ツールのダウンロード</h3>
<p>ツールをダウンロードすると、「CnvertTagText.zip」というファイルが入手できます。</p>
<p>※一応、数百円はいただいています。</p>
<h3>3.ダウンロードしたファイルを展開</h3>
<p>zipファイルをすべて展開すると、「<span style="color: #ff0000;">CnvertTagText.exe</span>」といファイルがあるので、実行してください。</p>
<h3>4.実行の仕方</h3>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4145" src="https://loosecarrot.com/wp-content/uploads/2020/03/a8dc71540b3eaf01d568678cf25920f5.jpg" alt="" width="683" height="581" />
<h4>①変換するファイルの入ったフォルダを指定</h4>
<p>変換ボタンの下にある入力欄に変換したいファイルを配置したフォルダのパスを入力します。</p>
<h4>②変換するファイルの文字コードを指定します。</h4>
<p>※基本的に<strong>UTF-8</strong>か<strong>SHIFT-JIS</strong>でOKです。</p>
<p>UTF-8でやって、もしHTMLファイルが文字化けすればSHIFT-JISで変換してみて下さい。</p>
<p>ファンブログはSHIFT-JISでした。</p>
<h4>③抽出するタグの指定</h4>
<p>色んなタグが選べるようになっていますが、最初は<strong>title</strong>、<strong>h</strong>、<strong>p</strong>タグにチェックがついています。</p>
<p>基本的に抽出が上手くいくのは、<span style="color: #ff0000;"><strong>title、h、pのタグだけ</strong></span>です。</p>
<p>最低限必要な情報しか抜けないようになっています。</p>
<p>他のタグを抜き出して、ワードプレスに貼り付けると<span style="color: #ff0000;">ページレイアウトが崩れたりします&#8230;</span></p>
<h4>④変換ボタンをクリック</h4>
<p>変換ボタンクリックしてください。</p>
<p>クリック後、変換時に指定したフォルダの中に「変換」という名前のフォルダが出来上がります。</p>
<p>その中にファイルが入っています。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4153" src="https://loosecarrot.com/wp-content/uploads/2020/03/41a840ac2a6dd47d0259015fe1d80881-2.jpg" alt="" width="861" height="346" srcset="https://loosecarrot.com/wp-content/uploads/2020/03/41a840ac2a6dd47d0259015fe1d80881-2.jpg 861w, https://loosecarrot.com/wp-content/uploads/2020/03/41a840ac2a6dd47d0259015fe1d80881-2-300x121.jpg 300w, https://loosecarrot.com/wp-content/uploads/2020/03/41a840ac2a6dd47d0259015fe1d80881-2-768x309.jpg 768w, https://loosecarrot.com/wp-content/uploads/2020/03/41a840ac2a6dd47d0259015fe1d80881-2.jpg 856w" sizes="(max-width: 861px) 100vw, 861px" />
<h3>4.実行したファイルをワードプレスに貼り付ける</h3>
<h4>①エディタで開く</h4>
<p>まずメモ帳などで開きます。</p>
<p>この時に文字化けしている場合、ツール右上の文字コードを変更して変換してみてください。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4154" src="https://loosecarrot.com/wp-content/uploads/2020/03/b6637add39fc295512bb46e5376cf948-1.jpg" alt="" width="866" height="397" srcset="https://loosecarrot.com/wp-content/uploads/2020/03/b6637add39fc295512bb46e5376cf948-1.jpg 866w, https://loosecarrot.com/wp-content/uploads/2020/03/b6637add39fc295512bb46e5376cf948-1-300x138.jpg 300w, https://loosecarrot.com/wp-content/uploads/2020/03/b6637add39fc295512bb46e5376cf948-1-768x352.jpg 768w, https://loosecarrot.com/wp-content/uploads/2020/03/b6637add39fc295512bb46e5376cf948-1.jpg 856w" sizes="(max-width: 866px) 100vw, 866px" />
<h4>②ワードプレスに貼り付ける</h4>
<p>メモ帳などで開いたコードをワードプレスへ貼り付けてください。</p>
<p>この時、右上のビジュアルではなく、<strong><span style="color: #ff0000;">テキスト</span></strong>を選んでください。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4155" src="https://loosecarrot.com/wp-content/uploads/2020/03/f4354542733995948dc875f250db7efa-2.jpg" alt="" width="948" height="498" srcset="https://loosecarrot.com/wp-content/uploads/2020/03/f4354542733995948dc875f250db7efa-2.jpg 948w, https://loosecarrot.com/wp-content/uploads/2020/03/f4354542733995948dc875f250db7efa-2-300x158.jpg 300w, https://loosecarrot.com/wp-content/uploads/2020/03/f4354542733995948dc875f250db7efa-2-768x403.jpg 768w, https://loosecarrot.com/wp-content/uploads/2020/03/f4354542733995948dc875f250db7efa-2.jpg 856w" sizes="(max-width: 948px) 100vw, 948px" />
<h3>5.プレビューでページを確認</h3>
<p>プレビューで確認して問題なければ公開しましょう。</p>
<p>私のファンブログとワードプレスの比較を載せておきます。</p>
<div id="attachment_4157" class="wp-caption alignnone" style="width: 770px"><img loading="lazy" decoding="async" class="size-full wp-image-4157" src="https://loosecarrot.com/wp-content/uploads/2020/03/ac28aa9c711b917f5645bbc5ed837d29.jpg" alt="" width="760" height="998" /><span class="wp-caption-text">ファンブログの表示</span></div>
<div id="attachment_4158" class="wp-caption alignnone" style="width: 1130px"><img loading="lazy" decoding="async" class="size-full wp-image-4158" src="https://loosecarrot.com/wp-content/uploads/2020/03/30bbb1baf6447429c9e0dde995b14802.jpg" alt="" width="1120" height="1040" srcset="https://loosecarrot.com/wp-content/uploads/2020/03/30bbb1baf6447429c9e0dde995b14802.jpg 1120w, https://loosecarrot.com/wp-content/uploads/2020/03/30bbb1baf6447429c9e0dde995b14802-300x279.jpg 300w, https://loosecarrot.com/wp-content/uploads/2020/03/30bbb1baf6447429c9e0dde995b14802-1024x951.jpg 1024w, https://loosecarrot.com/wp-content/uploads/2020/03/30bbb1baf6447429c9e0dde995b14802-768x713.jpg 768w, https://loosecarrot.com/wp-content/uploads/2020/03/30bbb1baf6447429c9e0dde995b14802.jpg 856w" sizes="(max-width: 1120px) 100vw, 1120px" /><span class="wp-caption-text">ワードプレスの表示</span></div>
<p>&nbsp;</p>
<p>特に問題なく抽出できました！</p>
<h2>まとめと補足</h2>
<p>画像は無料ブログがなくなってしまうこともあるので、無料ブログに乗せたものを表示しないほうが良いです。</p>
<p>私もファンブログの画像をそのままワードプレスに乗せていましたが、ブログを削除した後、画像が表示されなくなりました。</p>
<p>&nbsp;</p>
<p>いろいろ複雑なタグをまとめてワードプレスに移行するのも良いですが、</p>
<p>最低限必要なtitle、h、pタグだけ移行するのもありだと思います。</p>
<p>&nbsp;</p>
<p>良ければ参考に使ってみてください。</p>The post <a href="https://loosecarrot.com/2020/03/15/4132/">無料ブログをワードプレス用にエクスポートできない… 変換ツールを作ってみた</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2020/03/15/4132/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4132</post-id>	</item>
		<item>
		<title>C# エクセル(Office)にdatatableの中身を出力 色、罫線付き</title>
		<link>https://loosecarrot.com/2020/03/03/4105/</link>
					<comments>https://loosecarrot.com/2020/03/03/4105/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Tue, 03 Mar 2020 12:43:55 +0000</pubDate>
				<category><![CDATA[C#/VB.net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Excel]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4105</guid>

					<description><![CDATA[<p>エクセルをC#で処理するときにMicrosoft.Office.Interop.Excelを参照追加して処理することが今のところは主流です。 ここで面倒なことがあります。 プロセスが残らないよう制御が面倒です。 いちいち</p>
The post <a href="https://loosecarrot.com/2020/03/03/4105/">C# エクセル(Office)にdatatableの中身を出力 色、罫線付き</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4116" src="https://loosecarrot.com/wp-content/uploads/2020/03/43b2cf1d315b5e0ee8ba6ed327d78ebf.jpg" alt="" width="800" height="400" />
<p>エクセルをC#で処理するときに<strong>Microsoft.Office.Interop.Excel</strong>を参照追加して処理することが今のところは主流です。</p>
<p>ここで面倒なことがあります。</p>
<div class="simple-box1">
<p>プロセスが残らないよう制御が面倒です。</p>
<p>いちいちエクセルを開くので時間がかかる。</p>
</div>
<p>ということで、エクセルを開かず、読込む方法を紹介します。</p>
<div class="simple-box3">
<p>実際に作ったファイルは<a href="https://base-shop.loosecarrot.com/items/26809452" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<p>データテーブルの準備などをしているので、ダウンロード後、そのまま実行できます。</p>
</div>
<p>デモンストレーションで動かした動画を載せておきます。</p>
<p><div class="video"><iframe loading="lazy" title="C# エクセルOfficeにdatatableの中身を出力 色、罫線付き" width="500" height="375" src="https://www.youtube.com/embed/bo6b3lYHg3k?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div></p>
<p>&nbsp;</p>
<h2>Datatableをエクセルのシートに出力するコード</h2>
<p>Datatableの中身をエクセルのシートオブジェクトに出力するメソッドを作りました。</p>
<p>色や罫線も付けています。</p>
<p>取込むデータテーブルは以下です。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4115" src="https://loosecarrot.com/wp-content/uploads/2020/03/fed17600cd678e7422eff4f7a5cb018b.jpg" alt="" width="379" height="368" />
<p>流れとしては以下です。</p>
<div class="simple-box3">
<p>①エクセルのシートに列名を出力</p>
<p>②Datatableの中身をエクセルのシートに出力</p>
<p>この時、「女」セルがあれば、<span style="color: #ff0000;">フォントを赤</span>にしています。</p>
<p>③出力した範囲に罫線を引く</p>
<p>④列に色を付ける</p>
</div>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">using ClosedXML.Excel;

/// &lt;summary&gt;
/// データテーブルにデータをエクセルシートにセットする
/// &lt;/summary&gt;
/// &lt;param name="dataTable"&gt;データテーブル&lt;/param&gt;
/// &lt;param name="workSheet"&gt;シート&lt;/param&gt;
/// &lt;returns&gt;データテーブルを出力したシートを返す&lt;/returns&gt;
public IXLWorksheet outPutDataTableToExcel(DataTable dataTable, IXLWorksheet workSheet)
{

    IXLRange objRrange = null;                            //rangeオブジェクト

    //-----------------エクセルにデータテーブルの中身をセット-----------------
    //列をエクセルにセット
    for (int col = 1; col &lt;= dataTable.Columns.Count; col++)
    {
        workSheet.Cell(1, col).Value = dataTable.Columns[col -1].ColumnName;
    }

    //datatableをシートにセットする
    //行数分ループ(ヘッダの次の行から出力開始)
    for (int row = 0; row &lt;= dataTable.Rows.Count -1; row++)
    {
        //列数分ループ
        for (int col = 1; col &lt;= 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;

}</pre><p></p>
<h2>解説</h2>
<h3>列名を出力</h3>
<p>16行目～18行目で列を出力しています。</p>
<p>Cell(1,col)で1行目かあから順に出力しています。</p>
<p>Datatableの列の開始は<span style="color: #ff0000;">0列目</span>から始まりますが、エクセルは<span style="color: #ff0000;">1列目</span>です。</p>
<p>なので、col-1でエクセルとDatatableの列を合せています。</p>
<h3>Datatableの中身を出力</h3>
<p>23行目～36行目でDatatableの中身を出力しています。</p>
<p>ここもDatatableの行、列のかいしは０からですが、エクセルは1から始まることを考慮しています。</p>
<p>行は列の次の行なので、2行目です。</p>
<p>⇒row+2をして合せています。</p>
<p>また、この時、IF文を使ってDatatableの値が「<strong>女</strong>」の場合、フォントを<span style="color: #ff0000;">赤</span>にしています。</p>
<h3>罫線、背景色</h3>
<p>それぞれ、列数と行数をDatatableのrows.countとcolumns.countで取得し、</p>
<p>線と色をセットする範囲を指定しています。</p>
<p>_</p>
<p>&nbsp;</p>
<h2><span id="Closed_XML">Closed XMLの参照設定追加</span></h2>
<p>ClosedXMLで参照追加が必要です。</p>
<p>手順は以下の通りです。</p>
<h3><span id="i">パッケージマネージャコンソールを開く</span></h3>
<p>「ツール」→「NuGetパッケージマネージャ」→「パッケージマネージャコンソール」の順で開きます。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4095" src="https://loosecarrot.com/wp-content/uploads/2020/03/7bbb9f137a127156ebbbdac2726d064b.jpg" sizes="(max-width: 1152px) 100vw, 1152px" srcset="https://loosecarrot.com/wp-content/uploads/2020/03/7bbb9f137a127156ebbbdac2726d064b.jpg 1152w, https://loosecarrot.com/wp-content/uploads/2020/03/7bbb9f137a127156ebbbdac2726d064b-300x115.jpg 300w, https://loosecarrot.com/wp-content/uploads/2020/03/7bbb9f137a127156ebbbdac2726d064b-1024x393.jpg 1024w, https://loosecarrot.com/wp-content/uploads/2020/03/7bbb9f137a127156ebbbdac2726d064b-768x295.jpg 768w" alt="" width="1152" height="442" />
<h3><span id="i-2">インストール実行</span></h3>
<p>その後、Install-Packageコマンドを実行して完了です。</p><pre class="urvanov-syntax-highlighter-plain-tag">Install-Package ClosedXML</pre><p></p>
<div id="crayon-5e5d1515081dd863678102" class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main"></div>
</div>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4094" src="https://loosecarrot.com/wp-content/uploads/2020/03/a84525e3df29b0f32ba7580e1373a6cb.jpg" sizes="(max-width: 1114px) 100vw, 1114px" srcset="https://loosecarrot.com/wp-content/uploads/2020/03/a84525e3df29b0f32ba7580e1373a6cb.jpg 1114w, https://loosecarrot.com/wp-content/uploads/2020/03/a84525e3df29b0f32ba7580e1373a6cb-300x173.jpg 300w, https://loosecarrot.com/wp-content/uploads/2020/03/a84525e3df29b0f32ba7580e1373a6cb-1024x590.jpg 1024w, https://loosecarrot.com/wp-content/uploads/2020/03/a84525e3df29b0f32ba7580e1373a6cb-768x443.jpg 768w" alt="" width="1114" height="642" />
<p>&nbsp;</p>
<p>&nbsp;</p>The post <a href="https://loosecarrot.com/2020/03/03/4105/">C# エクセル(Office)にdatatableの中身を出力 色、罫線付き</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2020/03/03/4105/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4105</post-id>	</item>
		<item>
		<title>C# エクセルを開かずにDatatbleに取込み(Closed XML)</title>
		<link>https://loosecarrot.com/2020/03/01/4091/</link>
					<comments>https://loosecarrot.com/2020/03/01/4091/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sun, 01 Mar 2020 08:07:45 +0000</pubDate>
				<category><![CDATA[C#/VB.net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Excel]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4091</guid>

					<description><![CDATA[<p>エクセルをC#で処理するときにMicrosoft.Office.Interop.Excelを参照追加して処理することが今のところは主流です。 C# エクセルをDatatble,Datagridviewに取込み(複数シート</p>
The post <a href="https://loosecarrot.com/2020/03/01/4091/">C# エクセルを開かずにDatatbleに取込み(Closed XML)</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>エクセルをC#で処理するときに<strong>Microsoft.Office.Interop.Excel</strong>を参照追加して処理することが今のところは主流です。</p>
<a href="https://loosecarrot.com/2020/02/17/3971/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2020/02/13fda7d6d4577527d02c5f23842a9056-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C# エクセルをDatatble,Datagridviewに取込み(複数シート)</span><span class="blog-card-excerpt">

C#でエクセルをdatatableに取込むことはたまにあると思います。

備忘録として残しておきます。

実際に作ったフ...</span></div></div></a>
<p>ここで面倒なことがあります。</p>
<div class="simple-box1">
<p>プロセスが残らないよう<span style="color: #ff0000;">制御が面倒</span>です。</p>
<p>いちいちエクセルを開くので<span style="color: #ff0000;">時間がかかる</span>。</p>
<p>Excel(Office)がインストールされていない端末では<span style="color: #ff0000;">使えない</span></p>
</div>
<p>ということで、エクセルを開かず、読込む方法を紹介します。</p>
<p>デモンストレーションで動かした動画を載せておきます。</p>
<p><span style="color: #ff0000;">officeがインストールされていない端末</span>でデモをしています。</p>
<p><div class="video"><iframe loading="lazy" title="C# エクセルを開かずにDatatbleに取込みClosed XML" width="500" height="375" src="https://www.youtube.com/embed/nljVrgJMotQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div></p>
<h2>Closed XMLの参照設定追加</h2>
<p>ClosedXMLで参照追加が必要です。</p>
<p>手順は以下の通りです。</p>
<h3>パッケージマネージャコンソールを開く</h3>
<p>「ツール」→「NuGetパッケージマネージャ」→「パッケージマネージャコンソール」の順で開きます。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4095" src="https://loosecarrot.com/wp-content/uploads/2020/03/7bbb9f137a127156ebbbdac2726d064b.jpg" alt="" width="1152" height="442" srcset="https://loosecarrot.com/wp-content/uploads/2020/03/7bbb9f137a127156ebbbdac2726d064b.jpg 1152w, https://loosecarrot.com/wp-content/uploads/2020/03/7bbb9f137a127156ebbbdac2726d064b-300x115.jpg 300w, https://loosecarrot.com/wp-content/uploads/2020/03/7bbb9f137a127156ebbbdac2726d064b-1024x393.jpg 1024w, https://loosecarrot.com/wp-content/uploads/2020/03/7bbb9f137a127156ebbbdac2726d064b-768x295.jpg 768w, https://loosecarrot.com/wp-content/uploads/2020/03/7bbb9f137a127156ebbbdac2726d064b.jpg 856w" sizes="(max-width: 1152px) 100vw, 1152px" />
<h3>インストール実行</h3>
<p>その後、<span style="color: #ff0000;">Install-Package</span>コマンドを実行して完了です。</p><pre class="urvanov-syntax-highlighter-plain-tag">Install-Package ClosedXML</pre><p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4094" src="https://loosecarrot.com/wp-content/uploads/2020/03/a84525e3df29b0f32ba7580e1373a6cb.jpg" alt="" width="1114" height="642" srcset="https://loosecarrot.com/wp-content/uploads/2020/03/a84525e3df29b0f32ba7580e1373a6cb.jpg 1114w, https://loosecarrot.com/wp-content/uploads/2020/03/a84525e3df29b0f32ba7580e1373a6cb-300x173.jpg 300w, https://loosecarrot.com/wp-content/uploads/2020/03/a84525e3df29b0f32ba7580e1373a6cb-1024x590.jpg 1024w, https://loosecarrot.com/wp-content/uploads/2020/03/a84525e3df29b0f32ba7580e1373a6cb-768x443.jpg 768w, https://loosecarrot.com/wp-content/uploads/2020/03/a84525e3df29b0f32ba7580e1373a6cb.jpg 856w" sizes="(max-width: 1114px) 100vw, 1114px" /></p>
<h2>Close XMLを使ってエクセルを読み込むコード</h2>
<p>コードは以下の通りです。</p><pre class="urvanov-syntax-highlighter-plain-tag">/// &lt;summary&gt;
/// 取込みボタンクリック時
/// &lt;/summary&gt;
/// &lt;param name="sender"&gt;&lt;/param&gt;
/// &lt;param name="e"&gt;&lt;/param&gt;
private void import_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();                     //エクセルシートのデータを格納
    DataRow dr = null;                                  //エクセルのデータを(1行分)格納
    string filePath = "";                               //エクセルのパスを格納
    int lastRow = 0;                                    //最終行番号を格納
    int lastColumn = 0;                                 //最終列番号を格納

    XLWorkbook objWorkBook = null;                        //workbookオブジェクト
    IXLWorksheet objSheet = null;                         //シートオブジェクト
    IXLRange objRrange = null;                            //rangeオブジェクト

    
    //ダイアログでファイルパスを取得
    filePath = getExcelPath();

    //エクセルをインスタンス化
    objWorkBook = new XLWorkbook(filePath);

    //シートを取得
    objSheet = objWorkBook.Worksheet(1);

    //最終行、列を取得
    lastRow = objSheet.LastRowUsed().RowNumber();
    lastColumn = objSheet.LastColumnUsed().ColumnNumber();

    //シートのデータをrangeに取込む
    objRrange = objSheet.Range(objSheet.Cell(1, 1), objSheet.Cell(lastRow, lastColumn));


    //datatableに列を作成(列数分ループ)
    for (int col = 1; col &lt;= lastColumn; col++)
    {
        dt.Columns.Add(objSheet.Cell(1, col).Value.ToString());
    }


    //シートをdatatableに取込む
    //行数分ループ(ヘッダの次の行から開始)
    for (int row = 2; row &lt;= lastRow-1; row++)
    {
        //行を作成
        dr = dt.NewRow();

        //Datarowに列ごとのデータをセット
        for (int col = 1; col &lt;= lastColumn; col++)
        {
            dr[col-1] = objSheet.Cell(row, col).Value;
        }

        //datatableにDatarowを挿入
        dt.Rows.Add(dr);

    }            

    //データグリッドビューにセット
    dataGridView1.DataSource = dt;

    MessageBox.Show("完了");
    
}
/// &lt;summary&gt;
/// ファイルパスを返す
/// &lt;/summary&gt;
/// &lt;returns&gt;&lt;/returns&gt;
public string getExcelPath()
{
    string path = "";

    //ファイルダイアログを生成する
    OpenFileDialog op = new OpenFileDialog();
    op.Title = "ファイルを開く";
    op.Filter = "すべてのファイル(*.*)|*.*";
    op.FilterIndex = 1;

    //オープンファイルダイアログを表示する
    DialogResult dialog = op.ShowDialog();

    //「開く」ボタンが選択された時の処理
    if (dialog == DialogResult.OK)
    {
        path = op.FileName;
    }
    //「キャンセル」時の処理
    else if (dialog == DialogResult.Cancel)
    { }

    return path;
}</pre><p></p>
<h2>2007以降、エクセルはXMLで作られている</h2>
<p>実はエクセルは2007年以降XMLで作られています。</p>
<blockquote><p>Excel 2007では、データの保存形式がXMLに変更されたため&#8230;.</p>
<p><a href="https://xtech.nikkei.com/it/pc/article/NPC/20060629/242158/" target="_blank" rel="noopener noreferrer">新しい標準ファイル形式「XML」（第2回）　より</a></p></blockquote>
<p>なので、Close XMLで処理できるのは拡張子が新しいものだけです。</p>
<p><span style="color: #ff0000;"><strong>対象の拡張子はxlsx、xlsm、xltm</strong></span>です。</p>
<p>毎回エクセルを立ち上げることもないので早く処理できます。</p>The post <a href="https://loosecarrot.com/2020/03/01/4091/">C# エクセルを開かずにDatatbleに取込み(Closed XML)</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2020/03/01/4091/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4091</post-id>	</item>
		<item>
		<title>C# エクセル取込みしてSQLでデータ更新</title>
		<link>https://loosecarrot.com/2020/02/19/3988/</link>
					<comments>https://loosecarrot.com/2020/02/19/3988/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Wed, 19 Feb 2020 13:28:24 +0000</pubDate>
				<category><![CDATA[C#/VB.net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[プログラミング独学]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=3988</guid>

					<description><![CDATA[<p>C#などで開発する時にエクセルの一括取込み機能を作るときがあると思います。 いちいち調べて、プログラムを組んでと言うのが面倒なので備忘録として残しておきます。 機能としては「検索」と「エクセル取込更新」の二つの機能があり</p>
The post <a href="https://loosecarrot.com/2020/02/19/3988/">C# エクセル取込みしてSQLでデータ更新</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>C#などで開発する時にエクセルの一括取込み機能を作るときがあると思います。</p>
<p>いちいち調べて、プログラムを組んでと言うのが面倒なので備忘録として残しておきます。</p>
<p>機能としては「検索」と「エクセル取込更新」の二つの機能があります。</p>
<p>実際に作ったファイルは<a href="https://base-shop.loosecarrot.com/items/26554369" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<p>データベース(SQLite)と取り込み用のエクセルも入っているのでダウンロードしてもらえればすぐに実行して試すことができます。</p>
<p>デモンストレーションで動かした動画を載せておきます。</p>
<p><div class="video"><iframe loading="lazy" title="C# エクセル取込みしてSQLでデータ更新のデモ" width="500" height="375" src="https://www.youtube.com/embed/gp2DAJtgPQg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div></p>
<h2>開発環境</h2>
<p>開発環境はVisualStudio2015</p>
<p>データベースはSQLiteです。</p>
<h3><span id="VisualStudio2015">VisualStudio2015のインストール</span></h3>
<p>開発環境はVisualStudio2015なのでインストールが必要です。</p>
<p>設定は特に必要なく、標準インストールで良いです。</p>
<p>1時間くらいかかります。</p>
<p>こちらからダウンロードできます。</p>
<p><a href="https://www.dropbox.com/s/61n8o9i00syjdge/vs_community.exe?dl=1" target="_blank" rel="noopener noreferrer">Visual Studio 2015(Community)</a></p>
<h3><span id="DBBrowserforSQLite">DB.Browser.for.SQLiteのインストール</span></h3>
<p>SQLiteは専用ソフトがないとデータベースを開いて中を見ることができません。</p>
<p>開くとこんな感じで見ることができます。</p>
<img loading="lazy" decoding="async" class="alignnone wp-image-3886" src="https://loosecarrot.com/wp-content/uploads/2019/11/SQLite-DBBrowse.png" sizes="(max-width: 525px) 100vw, 525px" srcset="https://loosecarrot.com/wp-content/uploads/2019/11/SQLite-DBBrowse.png 688w, https://loosecarrot.com/wp-content/uploads/2019/11/SQLite-DBBrowse-300x189.png 300w" alt="" width="525" height="331" />
<p>こちらからダウンロードできます。</p>
<p><a href="https://www.dropbox.com/s/k0ccf1ax222w6c2/DB.Browser.for.SQLite-3.9.1-win64.exe?dl=1" target="_blank" rel="noopener noreferrer">SQLite DB.Browser</a></p>
<h2>エクセル取込み更新のコード</h2>
<p>フォーム画面のプログラムは以下です。</p>
<div class="concept-box2">
<p><span style="color: #ff0000;">※以下のソースはここでは書いていませんので、必要あれば、ダウンロードをお願いします。</span></p>
<p>・DBを更新や検索するSQLのファイル</p>
<p>・SQLiteのDBへアクセスしたり、更新する部品を書いたファイル</p>
</div>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">using System.Data.OleDb;
using System.IO;

---------------------------
/// &lt;summary&gt;
/// 検索ボタンクリック時
/// &lt;/summary&gt;
/// &lt;param name="sender"&gt;&lt;/param&gt;
/// &lt;param name="e"&gt;&lt;/param&gt;
private void buttonSearch_Click(object sender, EventArgs e)
{
    DataSet ds = new DataSet();                    //datatableを格納用
    DataTable dt = new DataTable();                //データを格納
    DataAccess dataAccess = new DataAccess();      //インスタンス化

    //データを取得
    ds.Tables.Add(dataAccess.getSupplierAll().Copy());

    //データグリッドビューにセット
    dataGridView.DataSource = ds.Tables["Supplier"];
}


/// &lt;summary&gt;
/// エクセル取込更新ボタンクリック時
/// &lt;/summary&gt;
/// &lt;param name="sender"&gt;&lt;/param&gt;
/// &lt;param name="e"&gt;&lt;/param&gt;
private void buttonUpdateByExcel_Click(object sender, EventArgs e)
{
    DataSet dsExcelSheets = new DataSet();              //エクセルシートごとのdatatableを格納用
    DataTable dtSheet = new DataTable();                //エクセルシートのデータを格納
    DataAccess dataAccess = new DataAccess();           //インスタンス化
    string filePath = "";                               //エクセルのパスを格納
    

    //ダイアログでファイルパスを取得
    filePath = getExcelPath();

    //エクセルをDatatableに取込む
    dsExcelSheets.Tables.Add(getDataTableFromExcel(filePath, "Supplier", true, true).Copy());
    
    //Datatableの内容でDBを更新
    //Datatableの行数分ループ
    foreach (DataRow dr in dsExcelSheets.Tables[0].Rows)
    {
        dataAccess.updateSupplier(dr);
    }
    
    //Supplierというdatatableがあれば削除
    if(dsExcelSheets.Tables.Contains("Supplier"))
    {
        dsExcelSheets.Tables.Remove("Supplier");
    }

    //データを取得
    dsExcelSheets.Tables.Add(dataAccess.getSupplierAll().Copy());

    //データグリッドビューにセット
    dataGridView.DataSource = dsExcelSheets.Tables["Supplier"];


    MessageBox.Show("エクセル更新完了");
    
}

/// &lt;summary&gt;
/// ファイルパスを返す
/// &lt;/summary&gt;
/// &lt;returns&gt;&lt;/returns&gt;
public string getExcelPath()
{
    string path = "";

    //ファイルダイアログを生成する
    OpenFileDialog op = new OpenFileDialog();
    op.Title = "ファイルを開く";
    op.Filter = "すべてのファイル(*.*)|*.*";
    op.FilterIndex = 1;

    //オープンファイルダイアログを表示する
    DialogResult dialog = op.ShowDialog();

    //「開く」ボタンが選択された時の処理
    if (dialog == DialogResult.OK)
    {
        path = op.FileName;
    }
    //「キャンセル」時の処理
    else if (dialog == DialogResult.Cancel)
    { path = ""; }

    return path;
}

/// &lt;summary&gt;
/// シートをdatatableに格納
/// &lt;/summary&gt;
/// &lt;param name="strFilePath"&gt;&lt;/param&gt;
/// &lt;param name="strSheetName"&gt;&lt;/param&gt;
/// &lt;param name="isInHeader"&gt;&lt;/param&gt;
/// &lt;param name="isAllStrColum"&gt;&lt;/param&gt;
/// &lt;returns&gt;&lt;/returns&gt;
public DataTable getDataTableFromExcel(string excelFilePath, string strSheetName, Boolean isInHeader = true, Boolean isAllStrColum = true)
{
    DataTable dt = new DataTable();
    string strInHeader = isInHeader ? "YES" : "NO";        // ヘッダー設定
    string strIMEX = isAllStrColum ? "IMEX=1;" : "";       // 文字列型設定
    string strFileEx = Path.GetExtension(excelFilePath);   // ファイル拡張子
    string strExcelVer = "Excel ";                         // Excelファイルver確認

    //テーブル名をセット
    dt.TableName = strSheetName;

    //拡張子ごとにエクセルのバージョンを取得
    if (strFileEx == ".xls")
    {
        strExcelVer += "8.0;";
    }
    else if (strFileEx == ".xlsx" || strFileEx == ".xlsm")
    {
        strExcelVer += "12.0;";
    }
    else
    {
        return null;
    }

    //コネクションストリングを作成
    String strCon = "Provider=Microsoft.ACE.OLEDB.12.0;"            // プロバイダ設定
                                                                    //= "Provider=Microsoft.Jet.OLEDB.4.0;"
                        + "Data Source=" + excelFilePath + "; "     // ソースファイル指定
                        + "Extended Properties=\"" + strExcelVer    // Excelファイルver指定
                        + "HDR=" + strInHeader + ";"                // ヘッダー設定
                        + strIMEX                                   // フィールドの型を強制的にテキスト
                        + "\"";
    OleDbConnection con = new OleDbConnection(strCon);
    String strCmd = "SELECT * FROM [" + strSheetName + "$]";

    // 読み込み
    OleDbCommand cmd = new OleDbCommand(strCmd, con);
    OleDbDataAdapter adp = new OleDbDataAdapter(cmd);
    adp.Fill(dt);

    return dt;
}</pre><p></p>
<h2>解説</h2>
<h3>エクセルをdatatableに取込み</h3>
<p>41行目でエクセルを読み込んで、datatableに取込んでいます。</p>
<p>58行目の<span class="crayon-e" style="color: #0000ff;">getDataTableFromExcel</span>メソッドでエクセルの内容をSELECT * で全件取得し、datatableに格納させています。</p>
<div class="concept-box2">
<p>以下のエラーが出る可能性があります。</p>
<p><span style="color: #ff0000;">&#8216;Microsoft.ACE.OLEDB.12.0&#8217; プロバイダーはローカルのコンピューターに登録されていません。</span></p>
</div>
<p>AccessDatabaseEngine_X64.exeをダウンロードしてインストールしてください。</p>
<p>こちらからダウンロード可能です。</p>
<p><a href="https://www.microsoft.com/ja-jp/download/details.aspx?id=13255" target="_blank" rel="noopener noreferrer">https://www.microsoft.com/ja-jp/download/details.aspx?id=13255</a></p>
<p>参考サイト：<a href="https://qiita.com/nakashima_bike/items/8eb5e6443ef17a3f0274" target="_blank" rel="noopener noreferrer">Microsoft.ACE.OLEDB.12.0プロバイダーはローカルコンピュータに登録されていません</a></p>
<p>原因は32ビットのofficeを動かしているため、64ビットようを使う必要があるからだそうです。</p>
<p>&nbsp;</p>
<p>エクセルを立上げずに読取る方法も紹介しています。</p>
<a href="https://loosecarrot.com/2020/03/01/4091/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2020/03/6ebb7f32c59af293674967cbba6c5e85-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C# エクセルを開かずにDatatbleに取込み(Closed XML)</span><span class="blog-card-excerpt">エクセルをC#で処理するときにMicrosoft.Office.Interop.Excelを参照追加して処理することが今のところは主流で...</span></div></div></a>
<h3>datatableのデータを使ってDB更新</h3>
<p>45行目～48行目でdatatableのレコード分ループして更新しています。</p>
<p>1行ずつdatarowに入った値を元にDBを更新するSQLを発行しています。</p>
<p><span class="crayon-v">dataAccess</span><span class="crayon-sy">.</span><span class="crayon-e">updateSupplier</span><span class="crayon-sy">(</span><span class="crayon-v">dr</span><span class="crayon-sy">)</span><span class="crayon-sy">;メソッドの中身は以下のように記載しています。</span></p><pre class="urvanov-syntax-highlighter-plain-tag">/// &lt;summary&gt;
/// supplier_cdをキーにSupplierへ更新
/// &lt;/summary&gt;
/// &lt;param name="drArg"&gt;&lt;/param&gt;
/// &lt;returns&gt;&lt;/returns&gt;
public int updateSupplier(DataRow drArg)
{
    int updateCount = 0;                                                                //更新件数を格納
    DbHelper = new SQLiteDBHelper(localDBPath);                                         //インスタンス化
    StringBuilder sb = new StringBuilder();                                             //クエリ格納用

    //パラメータをセット
    SQLiteParameter[] parameters = new SQLiteParameter[]
    {
            new SQLiteParameter("@supplier_cd",drArg.ItemArray[0]),
            new SQLiteParameter("@supplier_name",drArg.ItemArray[1]),
            new SQLiteParameter("@addr",drArg.ItemArray[2]),
            new SQLiteParameter("@post_num",drArg.ItemArray[3]),
            new SQLiteParameter("@tel",drArg.ItemArray[4]),
            new SQLiteParameter("@fax",drArg.ItemArray[5])
    };


    sb.AppendLine("UPDATE Supplier SET");
    sb.AppendLine("	supplier_name         = @supplier_name,");
    sb.AppendLine("	addr                  = @addr,");
    sb.AppendLine("	post_num              = @post_num,");
    sb.AppendLine("	tel                   = @tel,");
    sb.AppendLine("	fax                   = @fax");
    sb.AppendLine("WHERE supplier_cd      = @supplier_cd");

    //更新
    updateCount = DbHelper.ExecuteNonQuery(sb.ToString(), parameters);

    return updateCount;
}</pre><p></p>
<h3>更新後のデータを表示</h3>
<p>56行目～60行目で更新後のデータを検索し、表示しています。</p>
<h2>更新結果</h2>
<p>更新前の状態で検索をすると以下の状態です。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3997" src="https://loosecarrot.com/wp-content/uploads/2020/02/073b65fc228e0a756b9fb0b49a579edc.png" alt="" width="637" height="525" />
<p>以下の内容で<strong><span style="color: #ff0000;">tel列</span></strong>と<strong><span style="color: #ff0000;">fax列</span></strong>をエクセル更新します。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3998" src="https://loosecarrot.com/wp-content/uploads/2020/02/b8b0a43a5b04b0b9e8e54b4f36fa8ddc.png" alt="" width="806" height="432" />
<p>エクセル取込更新ボタン後は以下が表示されます。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3999" src="https://loosecarrot.com/wp-content/uploads/2020/02/bfd1b7b7e7eab4632d9893b06a92015c.png" alt="" width="634" height="521" />
<h2>参照設定</h2>
<h3>SQLite</h3>
<p>SQLite.dllがあるので、参照設定追加をしてください。</p>
<p>dllは「<span style="color: #ff0000;">～UpdateDatabaseByExcel\SQLite\System.Data.SQLite.dll</span>」のパスに配置されています。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3990" src="https://loosecarrot.com/wp-content/uploads/2020/02/ae669210e6567258649d469d616d8e39.png" alt="" width="800" height="552" />
<a href="https://loosecarrot.com/2019/11/25/3860/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/11/2aad409f7fb9656e0a91f95c8fb2c1b7-1-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C#アプリ開発 メールお知らせアプリ</span><span class="blog-card-excerpt">

開発案件の経験は2案件ほどで、ほとんど経験ありません。

そんな私が独学でプログラミングの勉強をしてきました。

そこで...</span></div></div></a>The post <a href="https://loosecarrot.com/2020/02/19/3988/">C# エクセル取込みしてSQLでデータ更新</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2020/02/19/3988/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3988</post-id>	</item>
		<item>
		<title>C# ダイアログで選択したファイルパスを取得</title>
		<link>https://loosecarrot.com/2020/02/18/3978/</link>
					<comments>https://loosecarrot.com/2020/02/18/3978/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Mon, 17 Feb 2020 15:00:07 +0000</pubDate>
				<category><![CDATA[C#/VB.net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[プログラミング独学]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=3978</guid>

					<description><![CDATA[<p>ダイアログで選択したファイルのパスを取得するのってどんなやり方だったっけ？となることが私は多いです。 と言うか、覚える気がありません。。。 時々使うけど、忘れてしまうので備忘録として残しておきます。 実際に作ったファイル</p>
The post <a href="https://loosecarrot.com/2020/02/18/3978/">C# ダイアログで選択したファイルパスを取得</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3984" src="https://loosecarrot.com/wp-content/uploads/2020/02/b7f8c60a41fb1aea5bcff512df9371d1-1.png" alt="" width="800" height="400" />
<p>ダイアログで選択したファイルのパスを取得するのってどんなやり方だったっけ？となることが私は多いです。</p>
<p>と言うか、覚える気がありません。。。</p>
<p>時々使うけど、忘れてしまうので備忘録として残しておきます。</p>
<p>実際に作ったファイルは<a href="https://base-shop.loosecarrot.com/items/26529921" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<h2>ダイアログで選択したパスを取得するコード</h2>
<p>流れは以下の通りです。</p>
<div class="simple-box3">
<p>①ダイアログを開く<br />
②パスをテキストボックスに表示する</p>
</div>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">string path = "";

//テキストボックスをクリア
textBox1.Text = "";

//ファイルダイアログを生成する
OpenFileDialog op = new OpenFileDialog();
op.Title = "ファイルを開く";
op.InitialDirectory = @"C:\";
op.Filter = "すべてのファイル(*.*)|*.*";
op.FilterIndex = 1;

//オープンファイルダイアログを表示する
DialogResult dialog = op.ShowDialog();

//「開く」ボタンが選択された時の処理
if (dialog == DialogResult.OK)
{
    path = op.FileName;
}
//「キャンセル」時の処理
else if (dialog == DialogResult.Cancel)
{}

//テキストボックスにパスを表示
textBox1.Text = path;</pre><p></p>
<h2>実行結果</h2>
<p>「パス表示」ボタンをクリックするとダイアログが開きます。</p>
<p>その後、ファイルを選択し終わると、テキストボックスにパスが表示されました。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3979" src="https://loosecarrot.com/wp-content/uploads/2020/02/3b21df1144faa760c2015dc74c5018e5.png" alt="" width="800" height="400" />
<h2>補足</h2>
<h3>9行目</h3>
<p><span class="crayon-v">op</span><span class="crayon-sy">.</span><span class="crayon-v">InitialDirectory</span> <span class="crayon-o">=</span> <span class="crayon-s ">@&#8221;C:\&#8221;</span><span class="crayon-sy">;</span></p>
<p>ダイアログが開いた時のデフォルトのパスを設定します。</p>
<h3>10行目</h3>
<p><span class="crayon-v">op</span><span class="crayon-sy">.</span><span class="crayon-v">Filter</span> <span class="crayon-o">=</span> <span class="crayon-s">&#8220;すべてのファイル(*.*)|*.*&#8221;</span><span class="crayon-sy">;</span></p>
<p>選択するファイルの種類を制限できます。</p>
<p>他の書き方はこちらを参考下さい。</p>
<p><a href="http://blog.hiros-dot.net/?p=1137" target="_blank" rel="noopener noreferrer">[Tips][OpenFileDialog] [ファイルの種類] ボックスに表示される選択肢を設定する</a></p>The post <a href="https://loosecarrot.com/2020/02/18/3978/">C# ダイアログで選択したファイルパスを取得</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2020/02/18/3978/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3978</post-id>	</item>
		<item>
		<title>C# エクセルをDatatble,Datagridviewに取込み(複数シート)</title>
		<link>https://loosecarrot.com/2020/02/17/3971/</link>
					<comments>https://loosecarrot.com/2020/02/17/3971/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sun, 16 Feb 2020 15:00:13 +0000</pubDate>
				<category><![CDATA[C#/VB.net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[プログラミング独学]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=3971</guid>

					<description><![CDATA[<p>C#でエクセルをdatatableに取込むことはたまにあると思います。 備忘録として残しておきます。 実際に作ったファイルはこちらからダウンロードできます。 エクセルをDatatbleに取込み、Datagridviewに</p>
The post <a href="https://loosecarrot.com/2020/02/17/3971/">C# エクセルをDatatble,Datagridviewに取込み(複数シート)</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3973" src="https://loosecarrot.com/wp-content/uploads/2020/02/13fda7d6d4577527d02c5f23842a9056.png" alt="" width="800" height="400" />
<p>C#でエクセルをdatatableに取込むことはたまにあると思います。</p>
<p>備忘録として残しておきます。</p>
<p>実際に作ったファイルは<a href="https://base-shop.loosecarrot.com/items/26529845" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<p><div class="video"><iframe loading="lazy" title="Excel Datatable取込み複数" width="500" height="375" src="https://www.youtube.com/embed/1mCzFa9RZm0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div></p>
<h2>エクセルをDatatbleに取込み、Datagridviewに表示</h2>
<p>色々と解説はありますが、それは後にして、コードはこんな感じです。</p>
<p>エクセルを複数シート取込んで、データグリッドビューに表示します。</p>
<p>エクセルを開かずに処理する方法もあります。</p>
<a href="https://loosecarrot.com/2020/03/01/4091/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2020/03/6ebb7f32c59af293674967cbba6c5e85-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C# エクセルを開かずにDatatbleに取込み(Closed XML)</span><span class="blog-card-excerpt">エクセルをC#で処理するときにMicrosoft.Office.Interop.Excelを参照追加して処理することが今のところは主流で...</span></div></div></a>
<p>流れは以下の通りです。</p>
<div class="simple-box3">
<p>①ダイアログでエクセルを選択<br />
②エクセルを開く<br />
③シートごとにdatatableへ格納<br />
④エクセルを閉じる</p>
</div>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">using System.Data.OleDb;
using System.IO;
using Excel = Microsoft.Office.Interop.Excel; ---------------------------

/// &lt;summary&gt;
/// 取込みボタクリック時
/// &lt;/summary&gt;
/// &lt;param name="sender"&gt;&lt;/param&gt;
/// &lt;param name="e"&gt;&lt;/param&gt;
private void import_Click(object sender, EventArgs e)
{

    DataSet dsExcelSheets = new DataSet();              //エクセルシートごとのdatatableを格納用
    DataTable dtSheet = new DataTable();                //エクセルシートのデータを格納
    string filePath = "";                               //エクセルのパスを格納

    Excel.Application objExcel = null;                  //Excelオブジェクト
    Excel.Workbooks objWorkBooks = null;                //workbooksオブジェクト
    Excel.Workbook objWorkBook = null;                  //workbookオブジェクト
    Excel.Sheets objSheets = null;                      //複数シートオブジェクト
    Excel.Worksheet objSheet = null;                    //シートオブジェクト

    //ダイアログでファイルパスを取得
    filePath = getExcelPath();

    //エクセルを開く
    objExcel = new Excel.Application();
    objExcel.Visible = true;

    // Excelファイルをオープンする
    objWorkBooks = objExcel.Workbooks;
    objWorkBook = objWorkBooks.Open(filePath);

    //シートを取得
    objSheets = objWorkBook.Worksheets;

    //シート数分ループしながら、datatableに取込
    for (int i = 1; i &lt;= objSheets.Count; i++)
    {
        //シートをセット
        objSheet = objSheets[i];

        //シートからSELECT *する
        dsExcelSheets.Tables.Add(getDataTableFromExcel(filePath, objSheet.Name,true,true).Copy());

    }

    //---------COMオブジェクトの解放---------
    // Sheet解放
    System.Runtime.InteropServices.Marshal.ReleaseComObject(objSheet);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(objSheets);

    // Book解放
    objWorkBook.Close();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(objWorkBook);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(objWorkBooks);

    // Excelアプリケーションを解放
    objExcel.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(objExcel);

    GC.Collect();
    
    //---------COMオブジェクトの解放---------

    //データグリッドビューにセット
    dataGridViewSupplier.DataSource = dsExcelSheets.Tables["Supplier"];
    dataGridViewFoods.DataSource = dsExcelSheets.Tables["Foods"];
    dataGridViewGoods.DataSource = dsExcelSheets.Tables["Goods"];

    MessageBox.Show("完了");

}

/// &lt;summary&gt;
/// ファイルパスを返す
/// &lt;/summary&gt;
/// &lt;returns&gt;&lt;/returns&gt;
public string getExcelPath()
{
    string path = "";

    //ファイルダイアログを生成する
    OpenFileDialog op = new OpenFileDialog();
    op.Title = "ファイルを開く";
    op.InitialDirectory = @"C:\";
    op.Filter = "すべてのファイル(*.*)|*.*";
    op.FilterIndex = 1;

    //オープンファイルダイアログを表示する
    DialogResult dialog = op.ShowDialog();

    //「開く」ボタンが選択された時の処理
    if (dialog == DialogResult.OK)
    {
        path = op.FileName;
    }
    //「キャンセル」時の処理
    else if (dialog == DialogResult.Cancel)
    { }
    
    return path;
}

/// &lt;summary&gt;
/// シートをdatatableに格納
/// &lt;/summary&gt;
/// &lt;param name="strFilePath"&gt;&lt;/param&gt;
/// &lt;param name="strSheetName"&gt;&lt;/param&gt;
/// &lt;param name="isInHeader"&gt;&lt;/param&gt;
/// &lt;param name="isAllStrColum"&gt;&lt;/param&gt;
/// &lt;returns&gt;&lt;/returns&gt;
public DataTable getDataTableFromExcel(string excelFilePath, string strSheetName, Boolean isInHeader = true, Boolean isAllStrColum = true)
{
    DataTable dt = new DataTable();
    string strInHeader = isInHeader ? "YES" : "NO";        // ヘッダー設定
    string strIMEX = isAllStrColum ? "IMEX=1;" : "";       // 文字列型設定
    string strFileEx = Path.GetExtension(excelFilePath);   // ファイル拡張子
    string strExcelVer = "Excel ";                         // Excelファイルver確認

    //テーブル名をセット
    dt.TableName = strSheetName;

    //拡張子ごとにエクセルのバージョンを取得
    if (strFileEx == ".xls")
    {
        strExcelVer += "8.0;";
    }
    else if (strFileEx == ".xlsx" || strFileEx == ".xlsm")
    {
        strExcelVer += "12.0;";
    }
    else
    {
        return null;
    }

    //コネクションストリングを作成
    String strCon = "Provider=Microsoft.ACE.OLEDB.12.0;"            // プロバイダ設定
                                                                    //= "Provider=Microsoft.Jet.OLEDB.4.0;"
                        + "Data Source=" + excelFilePath + "; "     // ソースファイル指定
                        + "Extended Properties=\"" + strExcelVer    // Excelファイルver指定
                        + "HDR=" + strInHeader + ";"                // ヘッダー設定
                        + strIMEX                                   // フィールドの型を強制的にテキスト
                        + "\"";
    OleDbConnection con = new OleDbConnection(strCon);
    String strCmd = "SELECT * FROM [" + strSheetName + "$]";

    // 読み込み
    OleDbCommand cmd = new OleDbCommand(strCmd, con);
    OleDbDataAdapter adp = new OleDbDataAdapter(cmd);
    adp.Fill(dt);

    return dt;
}</pre><p></p>
<h2>解説</h2>
<p>それぞれ処理4つのポイントを解説します。</p>
<h3>①ダイアログでエクセルを選択</h3>
<p>20行目から<span class="crayon-e">getExcelPath</span><span class="crayon-sy">(</span><span class="crayon-sy">)というメソッドに飛んでいます。</span></p>
<p>詳細は以下をご確認ください。</p>
<a href="https://loosecarrot.com/2020/02/18/3978/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2020/02/b7f8c60a41fb1aea5bcff512df9371d1-1-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C# ダイアログで選択したファイルパスを取得</span><span class="blog-card-excerpt">

ダイアログで選択したファイルのパスを取得するのってどんなやり方だったっけ？となることが私は多いです。

と言うか、覚える気が...</span></div></div></a>
<h3>②エクセルを開く</h3>
<p>エクセルを開くにはブックやらシートやらと変数を定義しないとダメなようです。</p>
<p>13行目～17行目です。</p>
<p>そして、<span class="crayon-v">objWorkBooks</span><span class="crayon-sy">.</span><span class="crayon-e">Open</span><span class="crayon-sy">(</span><span class="crayon-v">filePath</span><span class="crayon-sy">)</span><span class="crayon-sy">;でエクセルを開いています。</span></p>
<h3>③シートごとにdatatableへ格納</h3>
<p>31行目でシートを変数へ格納し、</p>
<p>34行目からの処理でシート枚数分ループさせています。</p>
<p><span style="color: #ff0000;">getDataTableFromExcel</span>メソッド内でシートのデータすべてを取得しています。</p>
<p>SQLの<span style="color: #ff0000;">SELECT * [strSheetName] はシートのすべてのデータを取得するという意味です。</p>
<p><strong><span style="color: #0000ff;">※列が1列空いたり、行が1行空白だと、その前までしか取得されません。</span></strong></p>
<h3>④エクセルを閉じる</h3>
<p>44行目～58行目でエクセルを閉じて、オブジェクトを開放しています。</p>
<p>これでエクセルを閉じたり、プロセスやメモリを開放することができます。</p>
<p><strong>エクセルを取込んでSQLで更新する</strong>方法も紹介しているのでご覧ください。</p>
<a href="https://loosecarrot.com/2020/02/19/3988/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2020/02/2349447e142600076f18edbaca1943f1-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C# エクセル取込みしてSQLでデータ更新</span><span class="blog-card-excerpt">C#などで開発する時にエクセルの一括取込み機能を作るときがあると思います。

いちいち調べて、プログラムを組んでと言うのが面倒なので...</span></div></div></a>
<h2>実行結果</h2>
<p>3シートがそれぞれデータグリッドビューに表示されました。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3972" src="https://loosecarrot.com/wp-content/uploads/2020/02/7a18262bfd80c221b1f911d700129a2e.jpg" alt="" width="663" height="474" />
<a href="https://loosecarrot.com/2019/11/25/3860/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/11/2aad409f7fb9656e0a91f95c8fb2c1b7-1-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C#アプリ開発 メールお知らせアプリ</span><span class="blog-card-excerpt">

開発案件の経験は2案件ほどで、ほとんど経験ありません。

そんな私が独学でプログラミングの勉強をしてきました。

そこで...</span></div></div></a>
<h2>補足</h2>
<h3>Microsoft.ACE.OLEDB.12.0</h3>
<p>以下が出た場合</p>
<p><span style="color: #ff0000;">&#8216;Microsoft.ACE.OLEDB.12.0&#8217; プロバイダーはローカルのコンピューターに登録されていません。</span></p>
<p>AccessDatabaseEngine_X64.exeをダウンロードしてインストールしてください。</p>
<p>こちらからダウンロード可能です。</p>
<p><a href="https://www.microsoft.com/ja-jp/download/details.aspx?id=13255" target="_blank" rel="noopener noreferrer">https://www.microsoft.com/ja-jp/download/details.aspx?id=13255</a></p>
<p>参考サイト：<a href="https://qiita.com/nakashima_bike/items/8eb5e6443ef17a3f0274" target="_blank" rel="noopener noreferrer">Microsoft.ACE.OLEDB.12.0プロバイダーはローカルコンピュータに登録されていません</a></p>
<p>原因は32ビットのofficeを動かしているため、64ビットようを使う必要があるからだそうです。</p>
<h3>エクセル参照設定</h3>
<p>ソリューションに参照設定で「Microsoft Excel XXX Object Library」を追加しておいてください。</p>
<p>参考：<a href="http://excelcsharp.lance40.com/preparations.html" target="_blank" rel="noopener noreferrer">Excelの参照設定</a></p>The post <a href="https://loosecarrot.com/2020/02/17/3971/">C# エクセルをDatatble,Datagridviewに取込み(複数シート)</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2020/02/17/3971/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3971</post-id>	</item>
		<item>
		<title>C#アプリ開発 メールお知らせアプリ</title>
		<link>https://loosecarrot.com/2019/11/25/3860/</link>
					<comments>https://loosecarrot.com/2019/11/25/3860/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Mon, 25 Nov 2019 08:08:49 +0000</pubDate>
				<category><![CDATA[C#/VB.net]]></category>
		<category><![CDATA[SE(システムエンジニア)]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[プログラミング独学]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=3860</guid>

					<description><![CDATA[<p>開発案件の経験は2案件ほどで、ほとんど経験ありません。 そんな私が独学でプログラミングの勉強をしてきました。 そこでいつも「システムやアプリ開発をしたソースコードのサンプルが欲しい」と思っていました。 そこで作ったのが「</p>
The post <a href="https://loosecarrot.com/2019/11/25/3860/">C#アプリ開発 メールお知らせアプリ</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone wp-image-3873" src="https://loosecarrot.com/wp-content/uploads/2019/11/2aad409f7fb9656e0a91f95c8fb2c1b7-1.png" alt="" width="800" height="400" />
<p>開発案件の経験は2案件ほどで、ほとんど経験ありません。</p>
<p>そんな私が独学でプログラミングの勉強をしてきました。</p>
<p>そこでいつも「<span style="color: #ff0000;">システムやアプリ開発をしたソースコードのサンプルが欲しい</span>」と思っていました。</p>
<p>そこで作ったのが「<span style="color: #000000;"><strong>イベント事前お知らせアプリ</strong></span>」です。</p>
<a href="https://loosecarrot.com/2022/01/23/5431/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2022/01/GoogleSpreadSheetから予定を自動メールお知らせ_1-2-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">GoogleSpreadSheetから自動で予定をメールお知らせ</span><span class="blog-card-excerpt">

予定がいっぱいあると、忘れてしまいがちなので、事前に通知してくれるアプリが欲しいと思っていました。

なので、以前C#で予定...</span></div></div></a>
<p><a href="https://base-shop.loosecarrot.com/items/24883452" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<p>必要なデータベース(SQLite)やモジュール、ソースコードもダウンロード可能です。</p>
<p>デモンストレーションで動かした動画を載せておきます。</p>
<p><div class="video"><iframe loading="lazy" title="イベント事前お知らせアプリ(ENIA)のデモ" width="500" height="375" src="https://www.youtube.com/embed/jbZHcsd8Fw0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div></p>
<p>C#でプログラミングを勉強している方の勉強に役立つよう、<span style="color: #ff0000;">ソースコードも公開します。</span></p>
<p>このアプリのソースを読んだり、改修したりして勉強になればと思います。</p>
<p>では早速紹介していきます。</p>
<h2>イベント事前お知らせアプリ(ENIA)の紹介</h2>
<h3>ENIAとは</h3>
<p><span style="color: #ff0000;">E</span>vnets <span style="color: #ff0000;">N</span>otificate <span style="color: #ff0000;">I</span>n <span style="color: #ff0000;">A</span>dvanceの略です。</p>
<p>日本語にすると「イベント事前お知らせアプリ」です。</p>
<p>イベントや予定を登録しておいて、予定日が近づくとメール送信でお知らせするアプリです。</p>
<p>Windowsフォームアプリで、C#で作っています。</p>
<p>実際にイベントを登録した後、自動メールが送信できます。</p>
<p>送信メールこんな感じで送信されます。</p>
<img loading="lazy" decoding="async" class="alignnone wp-image-3885" src="https://loosecarrot.com/wp-content/uploads/2019/11/IMG_5048.png" alt="" width="301" height="418" />
<h3>ENIAの全体図</h3>
<p>アプリのシステム的な全体図を説明しておきます。</p>
<p>以下の通りです。</p>
<div class="simple-box3">
<p>①ユーザがPC上でイベント登録<br />
②アプリがデータベース(SQLite)へ更新<br />
③バッチファイルが起動し、メールを送信</p>
</div>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3883" src="https://loosecarrot.com/wp-content/uploads/2019/11/6818b7ff30210d62bf5d6e63c11ff847.png" alt="" width="925" height="565" srcset="https://loosecarrot.com/wp-content/uploads/2019/11/6818b7ff30210d62bf5d6e63c11ff847.png 925w, https://loosecarrot.com/wp-content/uploads/2019/11/6818b7ff30210d62bf5d6e63c11ff847-300x183.png 300w, https://loosecarrot.com/wp-content/uploads/2019/11/6818b7ff30210d62bf5d6e63c11ff847-768x469.png 768w, https://loosecarrot.com/wp-content/uploads/2019/11/6818b7ff30210d62bf5d6e63c11ff847.png 856w" sizes="(max-width: 925px) 100vw, 925px" />
<h3>開発環境</h3>
<p>開発環境はVisual Studio 2015で使ったいるデータベースはSQLiteです。</p>
<p>SQLiteは実際の開発で使われることは少ないと思います。</p>
<p>ただ、SQLServerなどをインストールする必要もなく、軽いアプリなのでSQLiteをつかいました。</p>
<p>それぞれ、以下からダウンロードしてください。</p>
<p><a href="https://www.dropbox.com/s/k0ccf1ax222w6c2/DB.Browser.for.SQLite-3.9.1-win64.exe?dl=1" target="_blank" rel="noopener noreferrer">SQLite DB.Browser</a></p>
<p><a href="https://www.dropbox.com/s/61n8o9i00syjdge/vs_community.exe?dl=1" target="_blank" rel="noopener noreferrer">Visual Studio 2015(Community)</a></p>
<h3>開発したファイルのダウンロード方法</h3>
<p>開発したソースコードとビルドしたモジュールをダウンロードできます。</p>
<p><a href="https://base-shop.loosecarrot.com/items/24883452" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<p>モチベーションが上下したこともありますが、、たぶん2年くらいかかりました。</p>
<p>プログラミングの初心者から中級くらいの方には参考になるはずです</p>
<p><span style="color: #ff0000;">参考書を買うよりは価値がある</span>のではないかと思います。</p>
<h3>ENIAはこんな人におすすめ</h3>
<p>ENIAをダウンロードして意味があるのは以下のような方です。</p>
<div class="kaisetsu-box3">
<div class="kaisetsu-box3-title">こんな人におすすめ</div>
<p>・基本的なことが分かっている人(変数、クラス、オブジェクト指向&#8230;etc)</p>
<p>・C#の初心者～中級者(3カ月～2年程度)</p>
<p>・いろんなコードの書き方を知っていきたい人</p>
</div>
<p><span style="color: #ff0000;">ソースコードを読んで理解する練習</span>に使えると思います。</p>
<p>また、理解した後は、あなたのアイディアで<span style="color: #ff0000;">改修を行ってさらに技術力がアップ</span>できると思います。</p>
<h2>アプリの初期設定</h2>
<p>ENIAのアプリを使う前に行う初期設定の説明です。</p>
<h3>ファイルの配置先</h3>
<p>ダウンロードしたファイルを<span style="color: #ff0000;">C:\</span>以下に配置してください。</p>
<p>配置後の状態は以下のようになります。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3935" src="https://loosecarrot.com/wp-content/uploads/2019/11/017b68c79cb2b45f52359ea02ec8a16c_.png" alt="" width="666" height="272" />
<h3>VisualStudio2015のインストール</h3>
<p>開発環境はVisualStudio2015なのでインストールが必要です。</p>
<p>設定は特に必要なく、<span style="color: #ff0000;">標準インストール</span>で良いです。</p>
<p>1時間くらいかかります。</p>
<p>こちらからダウンロードできます。</p>
<p><a href="https://www.dropbox.com/s/61n8o9i00syjdge/vs_community.exe?dl=1" target="_blank" rel="noopener noreferrer">Visual Studio 2015(Community)</a></p>
<h3>DB.Browser.for.SQLiteのインストール</h3>
<p>SQLiteは専用ソフトがないとデータベースを開いて中を見ることができません。</p>
<p>開くとこんな感じで見ることができます。</p>
<img loading="lazy" decoding="async" class="alignnone wp-image-3886" src="https://loosecarrot.com/wp-content/uploads/2019/11/SQLite-DBBrowse.png" alt="" width="525" height="331" />
<p>こちらからダウンロードできます。</p>
<p><a href="https://www.dropbox.com/s/k0ccf1ax222w6c2/DB.Browser.for.SQLite-3.9.1-win64.exe?dl=1" target="_blank" rel="noopener noreferrer">SQLite DB.Browser</a></p>
<h3>メール送信元の設定</h3>
<p>以下に配置しているcsvに送信するメールアドレスの情報を記載します。</p>
<p>ファイルの場所</p>
<p><span style="color: #ff0000;">～ENIA_BATCH\references\SenderEmailServerInfo.csv</span></p>
<p>YahooJapanとGmailの2種類を紹介します。</p>
<h4>YahooJapan</h4>
<p>UserName、PassWord、SenderEmailAddres以外は以下をそのまま記入すればOKです。</p>
<p><strong>SenderEmailAddres</strong>は送信元のメールアドレスで、abc@yahoo.co.jpのようになります。</p>
<p><strong>UserName</strong>はYahooの場合、メールアドレスの「@」より前を入力します。</p>
<p>上で言うと、<span style="color: #ff0000;">abc</span>がUserNameにあたります。</p>
<p><strong>PassWord</strong>はメールアドレスのパスワードです。</p>
<table style="width: 100%;" width="267">
<tbody>
<tr>
<td style="width: 44.3478%; border-color: #000000; background-color: #9feb98;" width="170">SMTPServer</td>
<td style="width: 55.3623%; border-color: #000000;" width="97">smtp.mail.yahoo.co.jp</td>
</tr>
<tr>
<td style="width: 44.3478%; border-color: #000000; background-color: #9feb98;">PortNumber</td>
<td style="width: 55.3623%; border-color: #000000;">465</td>
</tr>
<tr>
<td style="width: 44.3478%; border-color: #000000; background-color: #9feb98;">UserName</td>
<td style="width: 55.3623%; border-color: #000000;">abc</td>
</tr>
<tr>
<td style="width: 44.3478%; border-color: #000000; background-color: #9feb98;">PassWord</td>
<td style="width: 55.3623%; border-color: #000000;">パスワードを入力</td>
</tr>
<tr>
<td style="width: 44.3478%; border-color: #000000; background-color: #9feb98;">SenderEmailAddres</td>
<td style="width: 55.3623%; border-color: #000000;">abc@yahoo.co.jp</td>
</tr>
<tr>
<td style="width: 44.3478%; border-color: #000000; background-color: #9feb98;">CertificateMethod</td>
<td style="width: 55.3623%; border-color: #000000;">LOGIN</td>
</tr>
<tr>
<td style="width: 44.3478%; border-color: #000000; background-color: #9feb98;">SSLEncryption</td>
<td style="width: 55.3623%; border-color: #000000;">TRUE</td>
</tr>
<tr>
<td style="width: 44.3478%; border-color: #000000; background-color: #9feb98;">SSLType</td>
<td style="width: 55.3623%; border-color: #000000;">SSL</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h4>Gmail</h4>
<p>こちらもYahooと同じで、UserName、PassWord、SenderEmailAddres以外は以下をそのまま記入すればOKです。</p>
<p><strong>SenderEmailAddres</strong>は送信元のメールアドレスで、xyz@gmail.comのようになります。</p>
<p><strong>UserName</strong>はメールアドレスの「@」より前を入力します。</p>
<p>上で言うと、<span style="color: #ff0000;">xyz</span>がUserNameにあたります。</p>
<p><strong>PassWord</strong>はメールアドレスのパスワードです。</p>
<table style="width: 100%;" width="267">
<tbody>
<tr>
<td style="width: 42.3188%; border-color: #000000; background-color: #9feb98;" width="170">SMTPServer</td>
<td style="width: 57.3913%; border-color: #000000;" width="97">smtp.gmail.com</td>
</tr>
<tr>
<td style="width: 42.3188%; border-color: #000000; background-color: #9feb98;">PortNumber</td>
<td style="width: 57.3913%; border-color: #000000;">465</td>
</tr>
<tr>
<td style="width: 42.3188%; border-color: #000000; background-color: #9feb98;">UserName</td>
<td style="width: 57.3913%; border-color: #000000;">xyz</td>
</tr>
<tr>
<td style="width: 42.3188%; border-color: #000000; background-color: #9feb98;">PassWord</td>
<td style="width: 57.3913%; border-color: #000000;">パスワードを入力</td>
</tr>
<tr>
<td style="width: 42.3188%; border-color: #000000; background-color: #9feb98;">SenderEmailAddres</td>
<td style="width: 57.3913%; border-color: #000000;">xyz@gmail.com</td>
</tr>
<tr>
<td style="width: 42.3188%; border-color: #000000; background-color: #9feb98;">CertificateMethod</td>
<td style="width: 57.3913%; border-color: #000000;">LOGIN</td>
</tr>
<tr>
<td style="width: 42.3188%; border-color: #000000; background-color: #9feb98;">SSLEncryption</td>
<td style="width: 57.3913%; border-color: #000000;">TRUE</td>
</tr>
<tr>
<td style="width: 42.3188%; border-color: #000000; background-color: #9feb98;">SSLType</td>
<td style="width: 57.3913%; border-color: #000000;">SSL</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>補足ですが、Gmailからメール送信する場合、アクセス許可を設定する必要があります。</p>
<p>以下URLから設定変更できます。</p>
<p><a href="https://myaccount.google.com/lesssecureapps" target="_blank" rel="noopener noreferrer">https://myaccount.google.com/lesssecureapps</a></p>
<img loading="lazy" decoding="async" class="alignnone wp-image-3867" src="https://loosecarrot.com/wp-content/uploads/2019/11/33a4e0ce765483e53d99af296a69ca93.png" alt="" width="561" height="218" />
<h3>タスクスケジューラの設定</h3>
<p>画面でイベント情報を登録した後、バッチ処理でメールが送信されます。</p>
<p>定時でバッチ処理を実行するには「タスクスケジューラ」を使います。</p>
<p>以下をご参考下さい。</p>
<p><a href="https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=020402" target="_blank" rel="noopener noreferrer">https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=020402</a></p>
<p><strong>補足</strong></p>
<p>『９「プログラム/スクリプト」ボックスの右側の「参照」をクリックします。』</p>
<p>開始オプションはバッチファイルが配置されているフォルダを指定すればOKです。</p>
<p>ENIAの場合、「<span style="color: #ff0000;">C:\LSTool\EvnetsNotificateInAdvance\ENIA_BATCH\bat</span>」です。</p>
<p>また、普通のPCは<span style="color: #ff0000;">シャットダウンされているとタスクスケジューラは動きません</span>。</p>
<h2>ENIA_BATCHの概要説明(仕様)</h2>
<p>バッチ処理の概要説明です。</p>
<h3>b10_0101(イベント情報メール送信)</h3>
<p>イベント情報を抽出して、宛先別にメールを送信する処理をしています。</p>
<p>簡単に概要設計を残していたので、ご参照下さい。DB定義</p>
<p>設計書は<a href="https://www.dropbox.com/s/c3dga6v2acmc5ci/ENIA_BATCH_b10_0101_%E5%87%A6%E7%90%86%E6%A6%82%E8%A6%81.xlsx?dl=1" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>可能です。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3892" src="https://loosecarrot.com/wp-content/uploads/2019/11/232cbadaee4fdc757555a6d75be15936.png" alt="" width="1506" height="844" srcset="https://loosecarrot.com/wp-content/uploads/2019/11/232cbadaee4fdc757555a6d75be15936.png 1506w, https://loosecarrot.com/wp-content/uploads/2019/11/232cbadaee4fdc757555a6d75be15936-300x168.png 300w, https://loosecarrot.com/wp-content/uploads/2019/11/232cbadaee4fdc757555a6d75be15936-1024x574.png 1024w, https://loosecarrot.com/wp-content/uploads/2019/11/232cbadaee4fdc757555a6d75be15936-768x430.png 768w, https://loosecarrot.com/wp-content/uploads/2019/11/232cbadaee4fdc757555a6d75be15936-320x180.png 320w, https://loosecarrot.com/wp-content/uploads/2019/11/232cbadaee4fdc757555a6d75be15936-640x360.png 640w, https://loosecarrot.com/wp-content/uploads/2019/11/232cbadaee4fdc757555a6d75be15936.png 856w" sizes="(max-width: 1506px) 100vw, 1506px" />
<p>メール送信やXMLファイルの読込については以下で解説しています。</p>
<a href="https://loosecarrot.com/2018/10/08/1119/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/10/download-261x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C# XMLファイルを読み込む</span><span class="blog-card-excerpt">外部ファイルとしてXMLファイルにシステムの固定情報を載せておいて、そこから読み込んで使うことってときどきありますよね。

http...</span></div></div></a>
<a href="https://loosecarrot.com/2018/08/25/77/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/09/C23_Email-thumbnail2.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C#.net　メール送信</span><span class="blog-card-excerpt">メールを送信するツールを作ってみたいなと思って色々調べていると、
フリーでメール送信できるdllがありました。

使い方備忘録とし...</span></div></div></a>
<h3>b10_0102(送信履歴更新)</h3>
<p>メール送信時に、送信した履歴をデータベースに更新しています。</p>
<p>この処理は「b10_0101(イベント情報メール送信)」の中で呼び出しています。</p>
<p>簡単に概要設計を残していたので、ご参照下さい。</p>
<p>設計書は<a href="https://www.dropbox.com/s/1unn2ipn2min2dk/ENIA_BATCH_b10_0102_%E5%87%A6%E7%90%86%E6%A6%82%E8%A6%81.xlsx?dl=1" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>可能です。</p>
<img loading="lazy" decoding="async" class="alignnone wp-image-3893" src="https://loosecarrot.com/wp-content/uploads/2019/11/fce575e995da8dc47ac7108da071a138.png" alt="" width="1512" height="836" srcset="https://loosecarrot.com/wp-content/uploads/2019/11/fce575e995da8dc47ac7108da071a138.png 1512w, https://loosecarrot.com/wp-content/uploads/2019/11/fce575e995da8dc47ac7108da071a138-300x166.png 300w, https://loosecarrot.com/wp-content/uploads/2019/11/fce575e995da8dc47ac7108da071a138-1024x566.png 1024w, https://loosecarrot.com/wp-content/uploads/2019/11/fce575e995da8dc47ac7108da071a138-768x425.png 768w, https://loosecarrot.com/wp-content/uploads/2019/11/fce575e995da8dc47ac7108da071a138.png 856w" sizes="(max-width: 1512px) 100vw, 1512px" />
<p>送信履歴があるイベントは、「イベント情報一覧・編集」のデータグリッドビュー上で、黄色く表示されます。</p>
<img loading="lazy" decoding="async" class="alignnone wp-image-3887" style="letter-spacing: 0.8px;" src="https://loosecarrot.com/wp-content/uploads/2019/11/ab0bee33eafaaf7e753030e0f518dee0.png" alt="" width="501" height="392" />
<h3>b90_0101(初期テーブル作成)</h3>
<p>最初にSQLiteのテーブルを作成するバッチです。</p>
<p><span style="color: #ff0000;">使う必要はありません。</span></p>
<p>最初からデータベースファイルをダウンロードできるようにしています。</p>
<p><span style="color: #0000ff;">ちゃんと動かないので、興味のある方は解読して、使ってみて下さい&#8230;</span></p>
<p>&nbsp;</p>
<p>データベース定義書は<a href="https://www.dropbox.com/s/ylklta9vk77ic5e/ENIA_DB%E5%AE%9A%E7%BE%A9.xlsx?dl=1" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<h3>補足</h3>
<p>バッチはException発生時にlogフォルダのファイルに吐き出します。</p>
<p>メール送信が上手くされなかった場合はここのログを確認してください。</p>
<p>パス：<span style="color: #ff0000;">～ENIA_BATCH\log\log_batch.txt</span></p>
<h2>ENIA_ONLINEの概要説明(仕様)</h2>
<p>画面の説明です。</p>
<p>こちらはバッチ処理のように<span style="color: #ff0000;">概要設計を作っていません。</span></p>
<p>処理内容の大枠は画面を動かしてご確認ください。</p>
<p>デモの動画も上記で紹介しているので、イメージいただけると思います。</p>
<p>詳細はC#のプログラムを読んでください。</p>
<h3>コードメンテナンス画面</h3>
<p><img loading="lazy" decoding="async" class="wp-image-3877 alignleft" src="https://loosecarrot.com/wp-content/uploads/2019/11/61dad9c65557ff967f34303b57a4c3bf.png" alt="" width="400" height="225" />メール送信の宛先を登録・更新・削除するメンテナンス画面です。</p>
<p>画面左上のリストボックスで「宛先組合せ名」を選択すると、</p>
<p>テキストボックスとデータグリッドビューにデータを表示します。</p>
<p>メールアドレスはTo、Cc、Bccを設定することができます。</p>
<p>また、カンマ(,)区切りで複数登録可能です。</p>
<a href="https://loosecarrot.com/2019/11/11/3840/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/11/datatableAndDataGridView-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C# DatatableをDatagridViewへを表示</span><span class="blog-card-excerpt">

C#でDatatableをDatagridViewへを表示する方法を紹介します。

端的に言うと、Datatableの列名と...</span></div></div></a>
<h3>イベント一括登録画面</h3>
<p><img loading="lazy" decoding="async" class="wp-image-3928 alignleft" src="https://loosecarrot.com/wp-content/uploads/2019/11/cb9fe66e7a16dd0c0d3d1329c4367cba.png" alt="" width="449" height="384" />文字通りイベントを一括登録する画面です。</p>
<p>データグリッドビューに入力した内容ですべて登録します。</p>
<p>「日付」の列にフォーカスが当たると、カレンダーの子画面が開きます。</p>
<p>子画面上で確定を押すと、選択した日付が「イベント一括登録」画面に反映されます。</p>
<p>「宛先組合せ」の列にフォーカスが当たると、宛先組合せの子画面が開きます。</p>
<p>子画面上で確定を押すと、選択した宛先が「イベント一括登録」画面に反映されます。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3929" src="https://loosecarrot.com/wp-content/uploads/2019/11/1f5e68b1fb26adff823ac88909efce88.png" alt="" width="668" height="301" />
<p>いづれも画面が閉じる際に画面間でデータの受け渡しを行っています。</p>
<a href="https://loosecarrot.com/2019/10/30/3793/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/10/f9cbe72bd22046d0bda64c7885743ceb-2-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C#で画面遷移(子画面など)でデータを渡す方法</span><span class="blog-card-excerpt">画面の遷移をした最のデータの渡し方を紹介します。

簡単にできそうで、意外と書き方を忘れてしまうので、備忘録のためにも残しておきます...</span></div></div></a>
<p>本当はエクセルから一括取込みをしようと考えていましたが、作れていません。</p>
<p><span style="color: #ff0000;">改修をしてエクセル取込みを実現してみても良いと思います。</span></p>
<a href="https://loosecarrot.com/2020/02/19/3988/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2020/02/2349447e142600076f18edbaca1943f1-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C# エクセル取込みしてSQLでデータ更新</span><span class="blog-card-excerpt">C#などで開発する時にエクセルの一括取込み機能を作るときがあると思います。

いちいち調べて、プログラムを組んでと言うのが面倒なので...</span></div></div></a>
<a href="https://loosecarrot.com/2020/02/17/3971/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2020/02/13fda7d6d4577527d02c5f23842a9056-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C# エクセルをDatatble,Datagridviewに取込み(複数シート)</span><span class="blog-card-excerpt">

C#でエクセルをdatatableに取込むことはたまにあると思います。

備忘録として残しておきます。

実際に作ったフ...</span></div></div></a>
<h3>イベント情報一覧・編集画面</h3>
<p><img loading="lazy" decoding="async" class="wp-image-3879 alignleft" src="https://loosecarrot.com/wp-content/uploads/2019/11/5374bcbbcdb7a4de34c0f50b55327920.png" alt="" width="449" height="352" />イベントを検索、更新、削除、登録する画面です。</p>
<p><strong><span style="color: #ff0000;">検索</span></strong>は画面上部の条件を元に検索を行います。</p>
<p>クリアボタンを押すと、画面初期表示と検索条件が同じ状態にクリアされます。</p>
<p>検索結果はステータスによって行に色がつくようになっています。</p>
<p>データグリッドビューの上に判例がありますが、以下のように背景色が変わります。</p>
<p>一度でも送信されたことがあれば、<span style="background-color: #ffff99;">黄色</span></p>
<p>終了イベントは<span style="background-color: #ededed;">灰色</span></p>
<p>削除されたイベントは<span style="background-color: #878787;">黒</span></p>
<p><strong><span style="color: #ff0000;">更新</span></strong>はデータグリッドビューに表示されているすべてのデータをDatatableに格納し、DBへ更新をしています。</p>
<p>本当は変更された行だけを更新するほうが効率が良いのですが、技術不足で実装できませんでした。</p>
<p>この辺りも改修していただいても良いと思います。</p>
<a href="https://loosecarrot.com/2018/09/06/86/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/09/dgv01.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">DataGridViewをDataTableに変換 C#</span><span class="blog-card-excerpt">こんにちは。

最近開発から外れていましたが、少し開発をしたので残しておこうと思いました。

内容はデータグリッドビューの中身を...</span></div></div></a>
<p>因みに、時間のFromとToはhh:mmのフォーマットでなければ、入力エラーになります。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3931" src="https://loosecarrot.com/wp-content/uploads/2019/11/f8d5e048d3636cbad5563bbf9b588940.png" alt="" width="325" height="148" />
<p><span style="color: #ff0000;"><strong>削除</strong></span>は「削除列」のチェックがあれば、削除フラグを立てる更新をしています。</p>
<p><strong><span style="color: #ff0000;">登録</span></strong>は画面下部のテキストボックスを元に登録します。</p>
<p>データグリッドビューの選択した行を表示するので、コピーして登録する際は便利です。</p>
<p>テキストボックスの時間FromとToはデータグリッドビューのように入力チェック処理を入れることができていません。</p>
<p>こちらも改修をしてみて下さい。</p>
<h3>補足</h3>
<p>logフォルダはあるが、ログは出ません。</p>
<p>必要あれば、ログを吐くように改修してください。</p>
<h2>ENIA_UTILの概要説明(仕様)</h2>
<p>共通処理や共通パラメータを格納しています。</p>
<p>具体的には、csvファイルの読込処理や本番環境のデータベースファイルの配置先などです。</p>
<p>詳細はC#のプログラムを読んでください。</p>
<h2>本番環境へリリースする際の注意点</h2>
<p>本番環境にリリースする場合、注意点がいくつかあるので記載しておきます。</p>
<h3>ENIA_UTILのパス</h3>
<p>プログラムをダウンロード時は、開発環境の設定です。</p>
<p><span style="color: #ff0000;">ENIA_UTIL.slnにあるConstLib.csのパスが開発(デバッグ)用になっています。</span></p>
<p>リリースする場合、以下をそれぞれ変更してください。</p>
<h4>private const string addPathを変更</h4>
<p>以下のようになっているので、コメントアウトを変更します。</p>
<p>本番用と開発用に分けてコメントアウトを変更してください。</p><pre class="urvanov-syntax-highlighter-plain-tag">private const string addPath = @"C:\LSTool\EvnetsNotificateInAdvance\";     //本番
//private const string addPath =
//    @"C:\LSTool\EvnetsNotificateInAdvance\ENIA";                          //デバッグ</pre><p></p>
<h4>public string UpdateSendHistoryを変更</h4>
<p>こちらも同様です。</p>
<p>以下のようになっているので、コメントアウトを変更します。</p>
<p>本番用と開発用に分けてコメントアウトを変更してください。</p><pre class="urvanov-syntax-highlighter-plain-tag">public string UpdateSendHistory = addPath + @"\ENIA_BATCH\ENIA_BATCH_B1\b10_0102\b10_0102\bin\Release\b10_0102.exe"; 　  //履歴更新　テスト環境
//public string UpdateSendHistory = addPath + @"\ENIA_BATCH\bin\b10_0102.exe";       　　　　　　　　　　　　　　　　　　　　//履歴更新　本番環境</pre><p></p>
<h3>ビルドの順番と本番ファイルの配置先</h3>
<p>UTILのパスを変更した後、以下の順番でビルドをしてください。</p>
<div class="simple-box3">
<p>①ENIA_UTILをリビルド</p>
<p>②ENIA_ONLINE、ENIA_BATCHのソリューションをリビルドしてください。</p>
<p>③各モジュールを本番用のパスに配置(C:\LSTool\EvnetsNotificateInAdvance\ENIA)以下に配置</p>
</div>
<p><strong>※ENIA_UTILを先にビルドしないと、ENIA_BATCHやENIA_ONLINEが参照するパスが本番用に変わりません。</strong></p>
<p>&nbsp;</p>
<p>配置するモジュールはそれぞれ以下の通りです。</p>
<div class="kaisetsu-box1">
<div class="kaisetsu-box1-title">ENIA_BATCH</div>
<p>配置先 <span style="color: #ff0000;">C:\LSTool\EvnetsNotificateInAdvance\ENIA_BATCH\bin</span></p>
<p>・b10_0101.exe<br />
・b10_0102.exe<br />
・ENIA_UTIL.dll<br />
・NonMailNet.dll<br />
・System.Data.SQLite.dll</p>
</div>
<div class="kaisetsu-box1">
<div class="kaisetsu-box1-title">ENIA_ONLINE</div>
<p>配置先 <span style="color: #ff0000;">C:\LSTool\EvnetsNotificateInAdvance\ENIA_ONLINE\bin</span></p>
<p>・ENIA_ONLINE.exe<br />
・ENIA_UTIL.dll<br />
・System.Data.SQLite.dll</p>
</div>
<h3>リリースモード</h3>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3894" src="https://loosecarrot.com/wp-content/uploads/2019/11/Debug_Release.png" alt="" width="888" height="284" srcset="https://loosecarrot.com/wp-content/uploads/2019/11/Debug_Release.png 888w, https://loosecarrot.com/wp-content/uploads/2019/11/Debug_Release-300x96.png 300w, https://loosecarrot.com/wp-content/uploads/2019/11/Debug_Release-768x246.png 768w, https://loosecarrot.com/wp-content/uploads/2019/11/Debug_Release.png 856w" sizes="(max-width: 888px) 100vw, 888px" />
<p>Debugでなく、<span style="color: #ff0000;">Release</span>でリビルド・ビルドを行って下さい。</p>
<p>想定通りに動かないことがあります。</p>
<p>例)DebugでビルドしたONLINEのexeを起動するとイベント情報一覧・編集画面の入力チェックが反応しないことがありました。</p>
<div id="attachment_3891" class="wp-caption alignnone" style="width: 298px"><img loading="lazy" decoding="async" class="wp-image-3891" src="https://loosecarrot.com/wp-content/uploads/2019/11/795f9723fcca0c291fb6b1d34c029de3.png" alt="" width="288" height="136" /><span class="wp-caption-text">このメッセージがエラーでも出ないことがありました。</span></div>
<h2>最後に</h2>
<p>私は開発に関わった経験は2年ほどで、今は開発から離れています。</p>
<p>また、開発と言っても保守担当として規模の小さい開発しかしていません。</p>
<p>そんな中、独学でプログラムの勉強をして、ENIAを作りました。</p>
<p>モチベーションのアップダウン繰り返して2年ほどかかりましたが&#8230;</p>
<a href="https://loosecarrot.com/2019/01/28/3054/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/01/beginner_se_error1-320x180.gif" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学とはエラーとの闘い</span><span class="blog-card-excerpt">

プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。

私も最初はエラーが出るたびにいちいちビビッて、意味...</span></div></div></a>
<p>2年ほどかかりましたが、私のように「<span style="color: #ff0000;">システムやアプリ開発をしたソースコードのサンプルが欲しい</span>」と言う思いをされている方のためになれば幸いです。</p>
<a href="https://loosecarrot.com/2019/02/11/3167/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/02/おすすめのプログラミングスクール-めざせ就職・年収アップ！_0-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">おすすめのプログラミングスクール めざせ就職・年収アップ！</span><span class="blog-card-excerpt">

プログラミングを独学でされている人は意外と多いです。

ただ、プログラミングの独学は簡単にはいきません。

自分だけの力...</span></div></div></a>
<p>&nbsp;</p>The post <a href="https://loosecarrot.com/2019/11/25/3860/">C#アプリ開発 メールお知らせアプリ</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2019/11/25/3860/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3860</post-id>	</item>
		<item>
		<title>C# DatatableをDatagridViewへを表示</title>
		<link>https://loosecarrot.com/2019/11/11/3840/</link>
					<comments>https://loosecarrot.com/2019/11/11/3840/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Mon, 11 Nov 2019 11:50:38 +0000</pubDate>
				<category><![CDATA[C#/VB.net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=3840</guid>

					<description><![CDATA[<p>C#でDatatableをDatagridViewへを表示する方法を紹介します。 端的に言うと、Datatableの列名とDataPropertyNameを同じ名称にすることでできます。 この一言で分かる人はあまりいない</p>
The post <a href="https://loosecarrot.com/2019/11/11/3840/">C# DatatableをDatagridViewへを表示</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3850" src="https://loosecarrot.com/wp-content/uploads/2019/11/datatableAndDataGridView.png" alt="" width="800" height="400" />
<p>C#でDatatableをDatagridViewへを表示する方法を紹介します。</p>
<p>端的に言うと、<span style="color: #ff0000;">Datatableの列名とDataPropertyNameを同じ名称にする</span>ことでできます。</p>
<p>この一言で分かる人はあまりいないと思うので、書き方を解説していきます。</p>
<p>実際に作成したファイルは<a href="https://base-shop.loosecarrot.com/items/24597205" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<p>&nbsp;</p>
<p>作るアプリは「ボタンをクリックするとDataGridViewにデータが表示される」ものです。</p>
<p>イメージは以下です。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3846" src="https://loosecarrot.com/wp-content/uploads/2019/11/8ad7e43814fde4e68ae34160b277b772.png" alt="" width="629" height="289" />
<h2>DatagridViewの設定</h2>
<p>まずはデータグリッドビュー自体の設定を行います。</p>
<h3>列を追加</h3>
<p>DatagridViewに列を追加していきます。</p>
<p>詳細は省きますが、以下のキャプチャのように追加できます。</p>
<img loading="lazy" decoding="async" class="alignnone wp-image-3842" src="https://loosecarrot.com/wp-content/uploads/2019/11/6d5630c9d1b3edcbce02a9f483dddf78.png" alt="" width="498" height="359" />
<p>今回は6列追加してみました。</p>
<p>列の設定が終わると以下のようになっているはずです。</p>
<img loading="lazy" decoding="async" class="alignnone wp-image-3843 " src="https://loosecarrot.com/wp-content/uploads/2019/11/7c7009565c14a40c030d580c44300a8b-e1573472975175.png" alt="" width="537" height="304" />
<p>因みにRowHeaderVisibleはFalseにしている状態です。</p>
<h3>DataPropertyNameをセット</h3>
<p>ここが重要です。</p>
<p>DataPropertyNameを以下のキャプチャのように設定していきます。</p>
<p>この時、<span style="color: #ff0000;">DataPropertyNameはDatatableの列名と同じ</span>にしましょう。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3844" src="https://loosecarrot.com/wp-content/uploads/2019/11/dfaf057a3fd7dbffafd86926aaded056.png" alt="" width="587" height="389" />
<h2>DataTableをDatagridViewに表示するコード</h2>
<p>大抵はSQLで取ってきたデータですが、今回はDataTableへ直接データを投入していきます。</p>
<p>Datatableの列名は先ほど設定した<span style="color: #ff0000;">DataPropertyNameを同じ</span>名称にします。</p>
<p>コードは以下です。</p><pre class="urvanov-syntax-highlighter-plain-tag">/// &lt;summary&gt;
/// データ表示ボタンクリックとき
/// &lt;/summary&gt;
/// &lt;param name="sender"&gt;&lt;/param&gt;
/// &lt;param name="e"&gt;&lt;/param&gt;
private void buttonShowDatatable_Click(object sender, EventArgs e)
{
    //データテーブルにデータを投入
    DataTable dt = new DataTable();
    DataRow dr;
    
    //データテーブルに列を追加
    dt.Columns.Add("Supplier_cd");
    dt.Columns.Add("Supplier_name");
    dt.Columns.Add("Addr");
    dt.Columns.Add("Post_num");
    dt.Columns.Add("Tel");
    dt.Columns.Add("Fax");

    //データテーブルに行を追加
    
    //1行目
    dr = dt.NewRow();
    dr["Supplier_cd"] = "301101";
    dr["Supplier_name"] = "明治屋";
    dr["Addr"] = "埼玉県川越市";
    dr["Post_num"] = "111-1111";
    dr["Tel"] = "03-****-****";
    dr["Fax"] = "17-****-****";
    dt.Rows.Add(dr);

    //2行目
    dr = dt.NewRow();
    dr["Supplier_cd"] = "	301102	";
    dr["Supplier_name"] = "	パスコ	";
    dr["Addr"] = "	東京都江戸川区	";
    dr["Post_num"] = "	111-1112	";
    dr["Tel"] = "	4-****-****	";
    dr["Fax"] = "	18-****-****	";
    dt.Rows.Add(dr);

    //3行目
    dr = dt.NewRow();
    dr["Supplier_cd"] = "	301103	";
    dr["Supplier_name"] = "	ライヘルフ	";
    dr["Addr"] = "	大阪府東大阪市	";
    dr["Post_num"] = "	111-1113	";
    dr["Tel"] = "	5-****-****	";
    dr["Fax"] = "	19-****-****	";
    dt.Rows.Add(dr);

    //4行目
    dr = dt.NewRow();
    dr["Supplier_cd"] = "	301104	";
    dr["Supplier_name"] = "	リプトン紅茶	";
    dr["Addr"] = "	東京都港区	";
    dr["Post_num"] = "	111-1114	";
    dr["Tel"] = "	6-****-****	";
    dr["Fax"] = "	20-****-****	";
    dt.Rows.Add(dr);

    //5行目
    dr = dt.NewRow();
    dr["Supplier_cd"] = "	301105	";
    dr["Supplier_name"] = "	上島珈琲	";
    dr["Addr"] = "	横浜市中区	";
    dr["Post_num"] = "	111-1115	";
    dr["Tel"] = "	7-****-****	";
    dr["Fax"] = "	21-****-****	";
    dt.Rows.Add(dr);


    //6行目
    dr = dt.NewRow();
    dr["Supplier_cd"] = "	301106	";
    dr["Supplier_name"] = "	流通パートナーズ	";
    dr["Addr"] = "	NULL	";
    dr["Post_num"] = "	111-1116	";
    dr["Tel"] = "	8-****-****	";
    dr["Fax"] = "	22-****-****	";
    dt.Rows.Add(dr);


    //7行目
    dr = dt.NewRow();
    dr["Supplier_cd"] = "	301107	";
    dr["Supplier_name"] = "	全食	";
    dr["Addr"] = "	千葉市美浜区	";
    dr["Post_num"] = "	111-1117	";
    dr["Tel"] = "	9-****-****	";
    dr["Fax"] = "	23-****-****	";
    dt.Rows.Add(dr);
    
    //8行目
    dr = dt.NewRow();
    dr["Supplier_cd"] = "	301108	";
    dr["Supplier_name"] = "	大地	";
    dr["Addr"] = "	新潟県新潟市	";
    dr["Post_num"] = "	111-1118	";
    dr["Tel"] = "	10-****-****	";
    dr["Fax"] = "	24-****-****	";
    dt.Rows.Add(dr);

    //9行目
    dr = dt.NewRow();
    dr["Supplier_cd"] = "	301109	";
    dr["Supplier_name"] = "	明治乳業	";
    dr["Addr"] = "	東京都江東区	";
    dr["Post_num"] = "	111-1119	";
    dr["Tel"] = "	11-****-****	";
    dr["Fax"] = "	25-****-****	";
    dt.Rows.Add(dr);

    //10行目
    dr = dt.NewRow();
    dr["Supplier_cd"] = "	301200	";
    dr["Supplier_name"] = "	キッコーマン	";
    dr["Addr"] = "	千葉県野田市	";
    dr["Post_num"] = "	111-1120	";
    dr["Tel"] = "	12-****-****	";
    dr["Fax"] = "	26-****-****	";
    dt.Rows.Add(dr);

    //データグリッドビューのデータソースにデータテーブルを設定
    dataGridView1.DataSource = dt;
    
}</pre><p></p>
<h3>解説</h3>
<p>12行目から18行目で列名をセットしています。</p>
<p>125行目でDataGridViewにDatatableのソースをセットしています。</p>
<p>これで表示は完了です。</p>
<p>&nbsp;</p>
<a href="https://loosecarrot.com/2019/11/25/3860/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/11/2aad409f7fb9656e0a91f95c8fb2c1b7-1-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C#アプリ開発 メールお知らせアプリ</span><span class="blog-card-excerpt">

開発案件の経験は2案件ほどで、ほとんど経験ありません。

そんな私が独学でプログラミングの勉強をしてきました。

そこで...</span></div></div></a>
<p>&nbsp;</p>
<p>因みに、このページは「DatatableをDatagridViewへを表示」ですが、</p>
<p>逆に「DataGridViewをDataTableに変換」する処理も紹介しています。</p>
<a href="https://loosecarrot.com/2018/09/06/86/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/09/dgv01.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">DataGridViewをDataTableに変換 C#</span><span class="blog-card-excerpt">こんにちは。

最近開発から外れていましたが、少し開発をしたので残しておこうと思いました。

内容はデータグリッドビューの中身を...</span></div></div></a>
<a href="https://loosecarrot.com/2018/07/05/41/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/09/20100123_1311435-thumbnail2.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">DataGridviewでComboboxのSelectedValueの値を設定する</span><span class="blog-card-excerpt">今回は「DatagridViewにあるComboboxのSelectedValueの設定」です。



普通のコンボボックスでS...</span></div></div></a>The post <a href="https://loosecarrot.com/2019/11/11/3840/">C# DatatableをDatagridViewへを表示</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2019/11/11/3840/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3840</post-id>	</item>
		<item>
		<title>C#で画面遷移(子画面など)でデータを渡す方法</title>
		<link>https://loosecarrot.com/2019/10/30/3793/</link>
					<comments>https://loosecarrot.com/2019/10/30/3793/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Wed, 30 Oct 2019 01:11:53 +0000</pubDate>
				<category><![CDATA[C#/VB.net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=3793</guid>

					<description><![CDATA[<p>画面の遷移をした最のデータの渡し方を紹介します。 簡単にできそうで、意外と書き方を忘れてしまうので、備忘録のためにも残しておきます。 実際に作ったファイルはこちらからダウンロードできます。 画面遷移とデータ渡しの概要 や</p>
The post <a href="https://loosecarrot.com/2019/10/30/3793/">C#で画面遷移(子画面など)でデータを渡す方法</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>画面の遷移をした最のデータの渡し方を紹介します。</p>
<p>簡単にできそうで、意外と書き方を忘れてしまうので、備忘録のためにも残しておきます。</p>
<p>実際に作ったファイルは<a href="https://base-shop.loosecarrot.com/items/24347098" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<h2>画面遷移とデータ渡しの概要</h2>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3807" src="https://loosecarrot.com/wp-content/uploads/2019/10/f9cbe72bd22046d0bda64c7885743ceb-2.png" alt="" width="800" height="400" />
<p>やることは、上のようにデータ渡しです。</p>
<p>流れはこんな感じです。</p>
<div class="simple-box3">
<p>①子画面を立ち上げる</p>
<p>②選択したカレンダーの日付を選ぶ</p>
<p>③元画面のテキストボックスに日付が反映する</p>
</div>
<h2>元画面から子画面への遷移するときのコード</h2>
<p>子画面を開くコードとデータを元画面に渡すコードです。</p>
<p>まずはテキストボックスがクリックされたときに子画面を開くコードです。</p>
<p>以下は元画面のコードです。</p><pre class="urvanov-syntax-highlighter-plain-tag">/// &lt;summary&gt;
        /// テキストボックスをクリック時
        /// &lt;/summary&gt;
        /// &lt;param name="sender"&gt;&lt;/param&gt;
        /// &lt;param name="e"&gt;&lt;/param&gt;
        private void textBox1_MouseClick(object sender, MouseEventArgs e)
        {
            try
            {
                //フラグがfalseの(子画面が開かれていない)場合
                if (isSmallFrmOpened.Equals(false))
                {
                    //子画面オープンフラグを立てる
                    isSmallFrmOpened = true;

                    string strDate = "";                                       //選択日を格納
                    string selectedDate = "";                                  //登録されている日を格納
                    DateTime date;                                             //[日付]のTryParse返却値格納用

                    //日付がテキストボックスに入力されていれば、カレンダーの子画面へセットする

                    //日付Fromの場合
                    if (textBox1.Focused)
                    {
                        //日付に変換できる場合
                        if (DateTime.TryParse(textBox1.Text, out date))
                        {
                            //値をセット
                            selectedDate = textBox1.Text.Replace("年", "/").Replace("月", "/").Substring(0, 10);
                        }
                    }

                    //カレンダーを表示する
                    FrmCalender fCalender = new FrmCalender(selectedDate);
                    fCalender.ShowDialog();
                    strDate = fCalender.selectedDate;

                    //テキストボックスへ値をセット
                    textBox1.Text = strDate;
                    //選択状態を消す
                    textBox1.SelectionStart = 0;
                }

                //子画面オープンフラグを戻す
                isSmallFrmOpened = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }</pre><p></p>
<h3>説明</h3>
<p>20～31行目はテキストボックスの値が日付型に変換できる場合は、日付に変換しています。</p>
<p>そして、カレンダーの子画面を開くときの引数にセットしています。</p>
<p>テキストボックスの値を元にカレンダーの初期値がセットできるようにしています。</p>
<p>35行目でカレンダーの子画面を開いています。</p>
<p>そして38行目でカレンダーの子画面が閉じたときに元画面で値を受け取って、テキストボックスにセットしています。</p>
<h2>子画面から元画面へ遷移するときのコード</h2>
<p>子画面が閉じるときに画面のプロパティを使って、元画面にデータを渡すプログラムです。</p>
<p>FrmCalenderは以下のように作られています。</p>
<p>子画面のコードです。</p>
<p><span style="color: #ff0000;">※selectedDt(date型)の変数はどこにグローバル変数として書いておいてください。</span></p>
<h4><strong>フォームロード</strong></h4>
<p>画面を開いた時に現在日になるようにしています。</p><pre class="urvanov-syntax-highlighter-plain-tag">/// &lt;summary&gt;
/// フォームロード時の処理
/// &lt;/summary&gt;
/// &lt;param name="sender"&gt;&lt;/param&gt;
/// &lt;param name="e"&gt;&lt;/param&gt;
private void FrmCalender_Load(object sender, EventArgs e)
{
    //現在日付をカレンダーにセット
    monthCalendar1.SetDate(DateTime.Now);

    //カレンダーから日付を取得
    selectedDt = monthCalendar1.SelectionRange.Start.ToShortDateString();
    selectedDt = monthCalendar1.SelectionRange.Start.ToString("yyyy年MM月dd日(ddd)");
}</pre><p></p>
<h4><strong>子画面にプロパティの作成</strong></h4>
<p>子画面のプロパティを作成しておくことで、子画面から元画面へ値を返すことができます。</p><pre class="urvanov-syntax-highlighter-plain-tag">//カレンダー日付を取得、設定するためのプロパティ
public string selectedDate
{
    get
    {
        return selectedDt;
    }
    set
    {
        selectedDt = value;
    }
}</pre><p></p>
<h4><strong>カレンダーの日付選択時</strong></h4>
<p>日付選択時に変数selectedDt にセットする処理です。</p><pre class="urvanov-syntax-highlighter-plain-tag">/// &lt;summary&gt;
/// カレンダーの日付が選択された時
/// &lt;/summary&gt;
/// &lt;param name="sender"&gt;&lt;/param&gt;
/// &lt;param name="e"&gt;&lt;/param&gt;
private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
{
    //カレンダーから日付を取得
    selectedDt = monthCalendar1.SelectionRange.Start.ToShortDateString();
    selectedDt = monthCalendar1.SelectionRange.Start.ToString("yyyy年MM月dd日(ddd)");
}</pre><p></p>
<h4><strong>元画面にプロパティを使って値を渡す</strong></h4>
<p>selectedDateのプロパティに日付を渡して、画面を閉じています。</p><pre class="urvanov-syntax-highlighter-plain-tag">/// &lt;summary&gt;
/// 確定ボタン押下時
/// &lt;/summary&gt;
/// &lt;param name="sender"&gt;&lt;/param&gt;
/// &lt;param name="e"&gt;&lt;/param&gt;
private void buttonConfirm_Click(object sender, EventArgs e)
{
    //日付未選択の場合
    if(selectedDt.Equals(""))
    {
        MessageBox.Show("日付が選択されていません。");
        return;
    }

    //プロパティにセット
    selectedDate = selectedDt;
    this.Dispose();
}</pre><p>&nbsp;</p>
<p>これで完了です。</p>
<h2>画面遷移の値渡しを実行した結果</h2>
<p>実行した結果の画面遷移とデータ渡し結果はこんな感じになります。</p>
<p>①日付FROMをクリックするとカレンダーの子画面が立ち上がります。</p>
<p>※開いたときの現在日がデフォルトでは設定されています。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3808" src="https://loosecarrot.com/wp-content/uploads/2019/10/0c16c78c7b13c60bad7a43d5acc66086-1.png" alt="" width="468" height="295" />
<p>②10/30を選択して確定ボタンを押すと日付FROMのテキストボックスに10/30がセットされています。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3809" src="https://loosecarrot.com/wp-content/uploads/2019/10/b693a258107e99f5d3ed59a3e237c4e8-1.png" alt="" width="288" height="291" />
<p>今回はここまでです。</p>
<p>他にも使えそうな処理があれば、趣味で作ったプログラムから抜粋で紹介していきます。</p>
<a href="https://loosecarrot.com/2019/11/25/3860/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/11/2aad409f7fb9656e0a91f95c8fb2c1b7-1-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C#アプリ開発 メールお知らせアプリ</span><span class="blog-card-excerpt">

開発案件の経験は2案件ほどで、ほとんど経験ありません。

そんな私が独学でプログラミングの勉強をしてきました。

そこで...</span></div></div></a>The post <a href="https://loosecarrot.com/2019/10/30/3793/">C#で画面遷移(子画面など)でデータを渡す方法</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2019/10/30/3793/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3793</post-id>	</item>
		<item>
		<title>C# XMLファイルを読み込む</title>
		<link>https://loosecarrot.com/2018/10/08/1119/</link>
					<comments>https://loosecarrot.com/2018/10/08/1119/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sun, 07 Oct 2018 23:11:15 +0000</pubDate>
				<category><![CDATA[C#/VB.net]]></category>
		<category><![CDATA[C#]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=1119</guid>

					<description><![CDATA[<p>外部ファイルとしてXMLファイルにシステムの固定情報を載せておいて、そこから読み込んで使うことってときどきありますよね。 C# csvをDataTableに格納するCSVファイルからデータを読み込んで、DataTable</p>
The post <a href="https://loosecarrot.com/2018/10/08/1119/">C# XMLファイルを読み込む</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>外部ファイルとしてXMLファイルにシステムの固定情報を載せておいて、そこから読み込んで使うことってときどきありますよね。</p>
<a href="https://loosecarrot.com/2018/10/07/1114/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/10/images-225x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C# csvをDataTableに格納する</span><span class="blog-card-excerpt">CSVファイルからデータを読み込んで、DataTableに入れたいことがありました。

基本的にはそんなにないとは思いますが。
...</span></div></div></a>
<h2>XMLを読み込むコード</h2>
<p>こちらは一つのクラスにして作っているので、クラスの処理をまとめて書きます。</p>
<p>クラスに記載している処理です。</p><pre class="urvanov-syntax-highlighter-plain-tag">//Usingは以下が必要です

using System.Xml;</pre><p></p><pre class="urvanov-syntax-highlighter-plain-tag">/// &lt;summary&gt;
/// XMLファイルを読み込む処理
/// &lt;/summary&gt;
public class XMLReader
{
　　private string strXMLFilePath = "";　　　　　　　　　　　　　　　　 //XMLファイルのパス

　　/// &lt;summary&gt;
　　/// XMLファイルのパスをセットする。
　　/// &lt;/summary&gt;
　　/// &lt;param name="path"&gt;XMLファイルのパス&lt;/param&gt;
　　public void setXMLFilePath(string path)
　　{
　　　　strXMLFilePath = path;
　　}
　　
　　/// &lt;summary&gt;
　　/// 読込み
　　/// &lt;/summary&gt;
　　/// &lt;param name="element"&gt;要素名&lt;/param&gt;
　　/// &lt;param name="elementNumber"&gt;要素番号&lt;/param&gt;
　　/// &lt;returns&gt;InnerText&lt;/returns&gt;
　　public string ReadXML(string element, string elementNumber)
　　{
　　　　string retWord = "";
　　　　XmlDocument xmlDoc = new XmlDocument();　　　　　　　　　　　　 //インスタンス化

　　　　//XMLファイルを読み込む
　　　　xmlDoc.Load(strXMLFilePath);

　　　　//ルート要素を取得する
　　　　XmlElement rootElement = xmlDoc.DocumentElement;

　　　　//InnerTextを取得する
　　　　retWord = rootElement.GetElementsByTagName(element + elementNumber.ToString()).Item(0).InnerText;

　　　　return retWord;
　　}
}</pre><p></p>
<h2>XML読込みの使い方(例)</h2>
<p>例えば、自動でメール送信する処理があったとします。</p>
<p>自動送信であることが分かるよう固定文言でXMLに準備しておき、読取らせることができます。</p>
<p>メール送信する方法は<a href="https://loosecarrot.com/2018/08/25/77/">C#.net メール送信</a>で書いているので良ければご覧ください。</p>
<p>以下はXMLのサンプルです。</p><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?xml version="1.0" encoding="utf-8" ?&gt;

&lt;hoge&gt;
　&lt;!-- プログラムID　：hoge --&gt;
　&lt;!-- プログラム名称：メールのフッター --&gt;
　&lt;!-- 作成日　　　　：20xx/xx/xx --&gt;
　&lt;!-- 作成者　　　　：Loose Carrot--&gt;

　&lt;Footer1&gt;---------------&lt;/Footer1&gt;
　&lt;Footer2&gt;※このメールは指定日に自動配信される&lt;/Footer2&gt;
　&lt;Footer3&gt;返信はできません。&lt;/Footer3&gt;
　&lt;Footer4&gt;---------------&lt;/Footer4&gt;

&lt;/hoge&gt;</pre><p>&nbsp;</p>
<p>XMLを読み込む処理は以下のように記述します。</p><pre class="urvanov-syntax-highlighter-plain-tag">string text = "";
XMLReader XmlReader = new XMLReader();

//タグ内の文字列を取得
text = XmlReader.ReadXML(Footer, "1") + Environment.NewLine;
text = text + XmlReader.ReadXML(Footer, "2") + Environment.NewLine;
text = text + XmlReader.ReadXML(Footer, "3");</pre><p>&nbsp;</p>
<a href="https://loosecarrot.com/2018/08/25/77/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/09/C23_Email-thumbnail2.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C#.net　メール送信</span><span class="blog-card-excerpt">メールを送信するツールを作ってみたいなと思って色々調べていると、
フリーでメール送信できるdllがありました。

使い方備忘録とし...</span></div></div></a>
<p>フッターに文言を入れてメールを送ると<span style="color: #ff0000;">赤枠</span>のように表記されます。</p>
<img loading="lazy" decoding="async" class="alignnone wp-image-1121" src="https://loosecarrot.com/wp-content/uploads/2018/10/rogo-1-267x300.jpg" alt="" width="411" height="462" />
<a href="https://loosecarrot.com/2019/11/25/3860/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/11/2aad409f7fb9656e0a91f95c8fb2c1b7-1-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">C#アプリ開発 メールお知らせアプリ</span><span class="blog-card-excerpt">

開発案件の経験は2案件ほどで、ほとんど経験ありません。

そんな私が独学でプログラミングの勉強をしてきました。

そこで...</span></div></div></a>
<a href="https://loosecarrot.com/2019/02/11/3167/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/02/おすすめのプログラミングスクール-めざせ就職・年収アップ！_0-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">おすすめのプログラミングスクール めざせ就職・年収アップ！</span><span class="blog-card-excerpt">

プログラミングを独学でされている人は意外と多いです。

ただ、プログラミングの独学は簡単にはいきません。

自分だけの力...</span></div></div></a>
<a href="https://loosecarrot.com/2019/01/28/3054/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/01/beginner_se_error1-320x180.gif" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学とはエラーとの闘い</span><span class="blog-card-excerpt">

プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。

私も最初はエラーが出るたびにいちいちビビッて、意味...</span></div></div></a>
<p>&nbsp;</p>The post <a href="https://loosecarrot.com/2018/10/08/1119/">C# XMLファイルを読み込む</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/10/08/1119/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1119</post-id>	</item>
	</channel>
</rss>
