Outlook 2007 受信メールの本文(一部)をCSVに書き出す
- August 2nd, 2011
Outlook 2007 の受信メールで、本文の一部を集計しようと思ったので、Microsoft Visual Basicなるものを試してみたので、コードをメモしておきます。
とりあえず、以下のサイトを参考に四苦八苦してみる事に。
以下のようなメールからアンケートの結果を取り出してみる
[件名] ---------------
注文メール
[本文] ---------------
名前 山田太郎
性別 男性
アンケート Outlook 2007
商品 hogehoge
マクロの作成
メールの本文から、アンケート結果を取り出してCSVに書き込んでみる。
' シングルクォーテーションでコメントアウト
' Public の中にプログラムを書いていく
Public Sub outputcsv()
' CSVファイルのパス(これは定数だな)
Const CSV_PATH = "c:outlook_csvoutput.csv" ' (;)とかは不要みたい
' Dim が変数の宣言になるのかな?
Dim objItem
Dim objFSO
Dim csvfile
' Set はオブジェクトを代入する時に使用するみたい
Set csvfile = Nothing
' Dim は使用しなくていいみたい
num = 0
' オブジェクトを指定(ファイルの操作などをするオブジェクト)
Set objFSO = CreateObject("Scripting.FileSystemObject")
' foreach 文(表示中の受信フォルダ内のアイテム全て)
For Each objItem In ActiveExplorer.CurrentFolder.Items
' if 文(Thenってなに?、== じゃないの?)
If objItem.Subject = "注文メール" Then
' objItem.Subject:件名
' objItem.Body:本文
' objItem.ReceivedTime:受信日時
' 値定義
itemQA = getText("アンケート", objItem.Body) ' アンケート取得
itemDatetime = Format(objItem.ReceivedTime, "yyyy-mm-dd hh:nn:ss") ' 受信日時取得
' 指定したファイルの読み書きが出来る
' 第1引数:ファイルパス
' 第2引数:入出力モード(1:読込、2:書込、8:追記)
' 第3引数:新規作成(True or False)
' 第4引数:文字コード(0:ASCII、-1:Unicode、2:システム規定値)
Set csvfile = objFSO.OpenTextFile(CSV_PATH, 8, True, 0)
If num = 0 Then
' CSVのフィールド名定義
csvfile.writeline "id,qa,datetime"
End If
num = num + 1
' CSV値定義
csvfile.writeline num & "," & itemQA & "," & itemDateTime
End If
Next
' オブジェクトを閉じる?
If Not csvfile Is Nothing Then
csvfile.Close
End If
End Sub
getText()関数
指定した文字列の行末の文字列を取得する関数。
Private Function getText(strTarget As String, strBody As String) As String
Dim leng_s As Long ' 指定文字の開始位置
Dim leng_e As Long ' 指定文字の終了位置
leng_s = InStr(strBody, strTarget) ' 本文から指定文字の位置を返す
If leng_s > 0 Then
leng_s = leng_s + Len(strTarget) ' 文字の開始位置に文字数を足す
leng_e = InStr(leng_s, strBody, vbCrLf) ' 指定文字の末尾から改行文字までの位置を返す
strAns = Trim(Mid(strBody, leng_s, leng_e - leng_s)) ' 指定の文字間を切り取り、空白文字を削除
' 関数名が return の変わり?
getText = Replace(strAns, vbTab, "") ' タブ文字を置換
Else
getText = "" ' 指定文字が無ければ空文字を返す
End If
End Function
- August 2nd, 2011
