[Excel은 메일 검색 GUI로 02 사용] PowerShell에서 csv로 Outlook의 메일 항목 일람을 토하고 PowerQuery가 먹도록 합니다.

12398 단어 PowerShell
저번에 이거 수정했어요.
  • BOX 전송 루프 추가
  • 첨부 파일 이름 찾기 목록 추가

  • 속성 변경受信者名 = $oItem.To
  • 설명
    BOX 보내기 주기 추가하기
    상용하는 상수는 다음과 같다
    상수

    컨텐트
    olFolderInbox
    6
    수신 트레이
    olFolderSentMail
    5
    발송된 트레이
    olFolderDeletedItems
    3
    트레이가 삭제됨
    olFolderDrafts
    16
    초안
    olFolderJunk
    23
    스팸 메일
    폴더 색인 정렬 만들기
    $arr_oFolders = @(5,6)
    
    $oFolder에 배열 요소를 하나씩 저장하고 순환하는 프레임워크를 이전 코드에 추가
    # $ary_namesの要素を 1 つずつ $oFolder に格納してループする
    for($fld = 0; $fld -lt $arr_oFolders.Count; $fld++){
        $oFolder = $oNamespace.GetDefaultFolder($arr_oFolders[$fld])
    
    첨부 파일 가져오기 이름 목록 추가
    마지막으로 (첨부 파일 수) CSV의 [첨부 파일 수] 열을 직접 입력합니다.$oItem.Attachments.Count 순환 항목을 추가하고 문자열에 파일 이름을 미리 처리합니다.
    # 添付ファイルリストを取得
    $attList=""
    foreach($att in $oItem.Attachments){
          $attList += ";" + $att.FileName
    }
    
    속성 변경$oItem.Attachments受信者名 = $oItem.To라면 자신을 제외하고는 모두 공백ReceivedByName이다.
    코드
    # Outlookのフォルダからメール一覧を作成、CSVに吐き出す
    
    # 参考(Outlook取得):https://www.itlab51.com/?p=6171
    # 参考(CSV出力):https://use-computer.net/powershell/powershell-course-5
    # 参考(列挙型):https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_enum?view=powershell-7.2
    
    
    $oOutlook = New-Object -ComObject Outlook.Application
    $oNamespace = $oOutlook.GetNamespace("MAPI")
    
    
    # フォルダIndexの配列を作成
    $arr_oFolders = @(5,6)
    #$olFolderInbox = 6 #受信トレイ
    #$olFolderSentMail = 5 #送信済みトレイ
    
    # ループ回数の上限を設定(CSVに書き出すメール数)
    $LimLoopCnt=10000
    
    # 取得する文字数に制限をかける
    $LimLenStr=10000                
    
    # 変数の初期化
    $CsvData = @()
    $rr=0
     
    # $ary_namesの要素を 1 つずつ $oFolder に格納してループする
    for($fld = 0; $fld -lt $arr_oFolders.Count; $fld++){
        $oFolder = $oNamespace.GetDefaultFolder($arr_oFolders[$fld])
    
        # $oFolder内の全アイテムを巡回して1レコードずつCSV出力用の変数に格納していく
        foreach($oItem in $oFolder.Items){
                # 取得する文字数に制限をかける(文字数が多すぎるとセルをはみ出してテーブル構造が崩れるため)
                $Str = $oItem.Body
                $LenStr = ($oItem.Body).Length
                if ( $LenStr -gt $LimLenStr)
                    {$Str = $Str.Substring(0,$LimLenStr)}
                
                # 添付ファイルリストを取得
                $attList=""
                foreach($att in $oItem.Attachments){
                    $attList += ";" + $att.FileName
                }
                
                # 1レコードずつCSV用の変数につぎ足していく
                $CsvData += [PSCustomObject]@{
                    No = $rr+1 # 0始まりのため出力は1始まりにする
                    件名 = $oItem.Subject
                    本文 = $Str.Replace("`r`n","") #改行殺し
                    受信日時 = $oItem.ReceivedTime
                    受信者名  =$oItem.To #ReceivedByNameだと自分以外が空白になる
                    送信者名  =$oItem.SenderName
                    CC = $oItem.CC
                    ConversationID = $oItem.ConversationID
                    添付ファイル = $attList
    
                }
    
                # ループ脱出
                $rr = $rr + 1
                if( $rr -gt $LimLoopCnt){break}
            }
    
    } 
    
    # CSVに吐き出す
    $CsvData | ft -AutoSize
    $CsvData | Export-Csv "ol_受信BOX_Itmes.csv" -Encoding Default
    
    남은 과제
    Access 맛 좀 보고 싶어요.
    현재 CSV가 이대로 가면, 코드가 엉망이거나 표의 첫 번째 줄의 여분의 문자열이 아니면 방해가 되어 직접 가져올 수 없습니다.
    Access로 처리해야 할지도 몰랐는데...
    창에 선택한 기록 보이기
    이거 아직 안 됐어요.
    엑셀 사용자 형태 제작법보다 엑세스 형식이 편하기 때문에 엑세스를 쓸 수 있다면 그걸 하고 싶어요.
    테이블의 구성이 바뀔 수도 있기 때문에 표현 방법이 마지막에도 가능하다는 경우도 있다.

    좋은 웹페이지 즐겨찾기