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/