見出し画像

VB.NETで差し込み可能なメール転送ソフトの作成 置換と添付ファイル #3

置換と添付ファイル

サンプルは以下からダウンロードできます。 

エクセルに設定されている 添付ファイルの確認、差し込み文字を確認するプログラムを作成します。
以下のようなものを作成します。

1)テキストボックス、RichTextBox、ボタンの追加

添付ファイル名 attachCol
差し込み1   insert1
差し込み行1  insertCol1
置換用ワーク  RichTextBox2
添付ファイル名 attachFile
差し込みボタン Btn1

通常はテキストボックスなどのテキストは実行して入力するのですが
今回 動作確認のため プロパティで登録します。
(全ソースリストには実行時に入力 登録できるようになります)
添付ファイル行 ataachCol のtext を 8に

差し込み1 insert1のtextを ※会社名に

差し込み行 insertCol1のtextを 1に

RichTextBox のtextに 適当にメール文を入力(以下のように)

※会社名 御中
※担当名 様

いつもご利用いただき、誠にありがとうございます。
お使いの※購入品はいかがでしょうか?長年ご愛用いただき感謝いたします。

この度、新製品を発売いたしましたのでご紹介させていただきます。
現在お使いの※購入品と比較いたしまして、コンパクトかつ軽量となっております。
現在、特別な買い替えキャンペーンを実施中です。
お手持ちの※購入品をお持ちいただくと、[割引情報や特典] をご提供いたします。
この機会にぜひ、ご購入をご検討ください。

どうぞよろしくお願い申し上げます。
/////////////////////////////////////
〇〇〇株式会社
営業本部 山田 太郎
TEL 111-2222-3333
/////////////////////////////////////

2)プログラム

差し込みボタンをクリックしたときのプログラムです。

'*********************************************************************************
'*   差し込み
'*********************************************************************************
Private Sub Btn1_Click(sender As Object, e As EventArgs) Handles Btn1.Click

    Dim re As DialogResult
    re = MessageBox.Show("差し込みしますか?", "差し込み確認",
         MessageBoxButtons.YesNo, MessageBoxIcon.None, MessageBoxDefaultButton.Button2)
    If re <> DialogResult.Yes Then Exit Sub

    Dim RowC As Integer = DataGridView1.Columns.Count - 1       'DataGridView1 行数
    Dim i As Integer = 1                                        'DataGridView1の1行目を指定

    If RowC >= 0 Then

        '////////////////// 添付ファイルの取得 ////////////////////////////////////////////
        '添付ファイルの取得  DataGridView1.Rows(0).Cells(8) 
        Dim AttachF As String = ""
        If CInt(attachCol.Text) <> 0 Then                       '設定値が0なら処理しない
            Dim cellValueA As Object = DataGridView1.Rows(i - 1).Cells(CInt(attachCol.Text) - 1).Value
            AttachF = If(cellValueA IsNot Nothing, cellValueA.ToString(), String.Empty)
        End If

        If AttachF <> "" Then                                   '添付ファイル
            'ファイル名のみの場合、起動時のPASSを追加する
            If Not Path.IsPathRooted(AttachF) Then
                AttachF = Application.StartupPath() & "\" & AttachF
            End If
            ' ファイルの存在を確認
            If File.Exists(AttachF) Then
                attachFile.Text = AttachF
            Else
                attachFile.Text = "該当ファイル無し"
            End If
        End If

        'RichTextBox1を編集用RichTextBox2にコピーし 置換処理をする
        RichTextBox2.Text = RichTextBox1.Text

        '////////////////// 置換処理 //////////////////////////////////////////////////////
        If insert1.Text <> "" Then              '文字置換 差し込み1
            'DataGridView1.Rows(0).Cells(0)
            '設定では開始は1からにしていますが VBNETでは開始は0からになります。
            'Rows(i - 1)  i 開始行 -1
            'Cells(CInt(insertCol1.Text) - 1)    CInt(insertCol1.Text) 設定の行 -1

            Dim cellValue1 As Object = DataGridView1.Rows(i - 1).Cells(CInt(insertCol1.Text) - 1).Value

            'cellValue1 が空でない場合 cellValue1.ToString() 文字変換
            '      空の場合   String.Empty      Emptyにする
            Dim cellText1 As String = If(cellValue1 IsNot Nothing, cellValue1.ToString(), String.Empty)

            'Replace(insert1.Text, cellText1) 差し込みの文字を エクセルで登録の文字に置換
            RichTextBox2.Text = RichTextBox2.Text.Replace(insert1.Text, cellText1)
        End If
    Else
        MsgBox("エクセル(送信データ)を読込してください。")
    End If
End Sub

実行確認のメッセージを表示
MessageBoxButtons.YesNo  YesNoの2つのボタン
MessageBoxIcon.Non    アイコン無し
MessageBoxDefaultButton.Button  ボタン2をデフォルト

    Dim re As DialogResult
    re = MessageBox.Show("差し込みしますか?", "差し込み確認",
         MessageBoxButtons.YesNo, MessageBoxIcon.None, MessageBoxDefaultButton.Button2)
    If re <> DialogResult.Yes Then Exit Sub

添付ファイルの確認
設定     開始の行列は1からになり
DataGridView 開始の行列は0からになります
以下のように -1が DataGridViewの値になります。
DataGridView1.Rows(i - 1).Cells(CInt(attachCol.Text) - 1).Value

Path.IsPathRooted(AttachF) は、ファイルのみの場合に起動時PASSを
追加するような処理を追加しています。
test.pdf   の場合 C:\Users\xxxxx\Desktop\Mail_VB\test.pdf  などに変更する処理となります。

If File.Exists(AttachF) Then はファイルの存在を確認します。
フォイルがないものをメール添付するとエラー、もしくはフリーズしてしまいますので、ファイルの有無は重要です。

            '////////////////// 添付ファイルの取得 ////////////////////////////////////////////
            '添付ファイルの取得  DataGridView1.Rows(0).Cells(8) 
            Dim AttachF As String = ""
            If CInt(attachCol.Text) <> 0 Then                       '設定値が0なら処理しない
                Dim cellValueA As Object = DataGridView1.Rows(i - 1).Cells(CInt(attachCol.Text) - 1).Value
                AttachF = If(cellValueA IsNot Nothing, cellValueA.ToString(), String.Empty)
            End If

            If AttachF <> "" Then                                   '添付ファイル
                'ファイル名のみの場合、起動時のPASSを追加する
                If Not Path.IsPathRooted(AttachF) Then
                    AttachF = Application.StartupPath() & "\" & AttachF
                End If
                ' ファイルの存在を確認
                If File.Exists(AttachF) Then
                    attachFile.Text = AttachF
                Else
                    attachFile.Text = "該当ファイル無し"
                End If
            End If

複数メールを差し込み後送信しますので、元のテキストは残して置く必要があります。RichTextBox2.Text にRichTextBox1.Text をコピーします。

            'RichTextBox1を編集用RichTextBox2にコピーし 置換処理をする
            RichTextBox2.Text = RichTextBox1.Text

Dim cellValue1 As Object に差し込みする文字入れ
以下で 文字に変換します。
If(cellValue1 IsNot Nothing, cellValue1.ToString(), String.Empty)

Replace関数で 差し込み文字を エクセルに登録した文字に置換します
RichTextBox2.Text = RichTextBox2.Text.Replace(insert1.Text, cellText1)

            '////////////////// 置換処理 //////////////////////////////////////////////////////
            If insert1.Text <> "" Then              '文字置換 差し込み1
                'DataGridView1.Rows(0).Cells(0)
                '設定では開始は1からにしていますが VBNETでは開始は0からになります。
                'Rows(i - 1)  i 開始行 -1
                'Cells(CInt(insertCol1.Text) - 1)    CInt(insertCol1.Text) 設定の行 -1

                Dim cellValue1 As Object = DataGridView1.Rows(i - 1).Cells(CInt(insertCol1.Text) - 1).Value

                'cellValue1 が空でない場合 cellValue1.ToString() 文字変換
                '      空の場合   String.Empty      Emptyにする
                Dim cellText1 As String = If(cellValue1 IsNot Nothing, cellValue1.ToString(), String.Empty)

                'Replace(insert1.Text, cellText1) 差し込みの文字を エクセルで登録の文字に置換
                RichTextBox2.Text = RichTextBox2.Text.Replace(insert1.Text, cellText1)
            End If

3)実行

参照から、エクセルを読込します。
差し込みボタンをクリックすると 以下にように表示されます。

サンプルプログラムをダウンロードして確認してみてください。

以上で置換と添付ファイルは完了です。

← 前の記事に戻る                次の記事に行く → 


以下 仕事のホームページです。業務用パソコンソフトを開発販売しています、ご訪問いただけると幸いです。https://aonosys.jp/

いいなと思ったら応援しよう!