OSとVesion
Windows 10 Pro
Word Outlook 2013 32bit
現象を起こす方法
Outlook2013のメール画面からWord2013にコピーして、半角を改行に変換し、それをOutlookのメール本文に戻す
Outlookのテキスト形式の電子メールメッセージの入力画面(インスペクター)を立ち上げます。
次に以下の文章を打ちます。
これは アウトルックの電子メールメッセージ入力画面の本文で 入力しました 空白は すべて 半角スペースです
次にWinWordを起動し新規入力にします。
上記の文字列をコピーしてWordの画面に貼り付けます
置換をし、^32を^13に変換します。
Sub Macro1()
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^32"
.Replacement.Text = "^13"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Wordの画面では次のようになります。
これは
アウトルックの電子メールメッセージ入力画面の本文で
入力しました
空白は
すべて
半角スペースです
今度はこれをコピーしてOutlookの電子メールメッセージ入力画面(テキスト形式)の本文に貼り付けます。
これは アウトルックの電子メールメッセージ入力画面の本文で 入力しました 空白は すべて 半角スペースです
改行は半角に戻ります。
Word2013で改行を入力しながら文章を作成し、それをOutlook2013にコピペすると起きない。
Wordで新規文書を立ち上げ、以下のようにEnterで改行しながら入力します。
これは
ワードで
新規作成した文書(ドキュメント)で
Enterを押して改行しながら
入力しました
入力が面倒な人のためのマクロ
Sub MakeNewWordDocumentAndInputString()
Dim wdoc As Word.Document: Set wdoc = ThisDocument
Dim WdocN As Word.Document
Selection.HomeKey Unit:=wdStory, Extend:=wdExtend
Selection.WholeStory
Selection.TypeBackspace
Selection.HomeKey Unit:=wdStory
Set WdocN = Documents.Add(Template:="Normal", NewTemplate:=False, DocumentType:=0)
WdocN.Activate
Selection.TypeText Text:="これは"
Selection.TypeParagraph
Selection.TypeText Text:="Winword()"
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="ワード"
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="で"
Selection.TypeParagraph
Selection.TypeText Text:="文書(ドキュメント)で"
Selection.TypeParagraph
Selection.TypeText Text:="Enterを押して"
Selection.TypeParagraph
Selection.TypeText Text:="改行しながら"
Selection.TypeParagraph
Selection.TypeText Text:="入力しました"
End Sub
これをコピーしてOulookの電子メールメッセージ入力画面の本文に貼り付けます。
この場合は改行が保持されます。
これは
Winword(ワード)で
文書(ドキュメント)で
Enterを押して
改行しながら
入力しました
WordのOption
同文書、文書間の貼り付け 元の書式を保持(既定)
文書間の貼り付け(スタイルが異なる場合) 貼り付け先のスタイルを使用(既定)
他の文書からの貼り付け 元の書式を保持(既定)
OutlookのOption
メッセージの作成 テキスト形式
詳細設定
送信メッセージのエンコードは自動選択する
送信メッセージにおいて優先するエンコード方法 日本語(JIS)
Word2016 Outlook2016の場合は起きない
同じ設定でも
解決策
通常は^13で置換するとなっています。しかし、これはWordのみで有効で、Outlookメモ帳では有効にならないケースがあるようです。
この場合、置換コードを^13ではなく^11置換します。
任意指定の行区切り(強制改行)と呼ばれるコードです。
正規表現では\vです。
Wordの置換ではワイルドカード使用時に^l(山アルファベット小文字エル)もしくは^11で表されます。
VerticalTab 垂直タブ https://dobon.net/vb/dotnet/string/controlchars.html ではMicrosoft Windowsでは使用できないとなっていますが、Wordでは使用できるようです。
Wordで通常の文章を打つ際に垂直タブを入力するときはShift+Enterです。
これは文書のスタイルを保持して改行するという意味になります。
現在調査継続中
これは設定もあるのかもしれないため現在調査継続中です。
Office サポートチーム フォーラム(2019/04/01よりBLOGから移行)
Japan Office Developer Support Blog のフォーラム移行のお知らせ
2018年6月11日
※ この記事は以下の Office サポート フォーラムに移行しました。
こんにちは、Office 開発サポート チームの中村です。
今回の記事では、Word 2016 からテキスト形式のメールを送信するときの以下の動作について記載します。1. は Word 2016 での意図した仕様変更による動作です。2. は、Word 2016 製品の不具合によって生じます。
- >
- メール タイトルや本文などが UTF-8 で送信される
- 差し込み印刷でタイトルは ANSI(SJIS) / 本文は UTF-8 で送信される
Word 2016 からのテキスト形式のメールの送信では、Simple MAPIを使用しています。以下に記載する動作変更への対応として、Simple MAPI API が拡張され、従来 ANSI 用であった関数で UTF-8 が送信可能となっています。後述の通り、お手数をおかけしますが、メール アプリケーションを作成されている開発者様には、Simple MAPI の UTF-8 対応をお願いいたします。
1. Word 2016 でのテキストメールの UTF-8 への変更
Word 2013 まで、差し込み印刷や共有などの機能で Word からテキスト形式のメールを送信すると、タイトル、本文、添付ファイル名などの文字情報は、ANSI (SJIS) で送信されていました。しかしながら、グローバルで様々な言語を扱う上で ANSI では表現できない文字が多く、これらの文字への対応要望を多くいただいていました。
これらのフィードバックを受け、Word 2016 では UTF-8 でテキスト形式のメールを送信するように変更しました。
内部の仕組みとしては、Word はテキスト形式のメール送信時に、Simple MAPIを使用しています。MAPISendMail() 関数に MapiMessage 構造体として、タイトルや本文などの情報を渡し、既定のメール クライアントにメール送信リクエストを送信します。
MAPI には、Windows 8 以降で利用できる Unicode 向けの MAPISendMailW() 関数や MapiMessageW 構造体も用意されています。ただ、Windows 7 では Unicode 向け関数や構造体は用意されておらず、送信内容として Unicode 文字列が渡されてくるような場合は、Microsoft Windows Software Development Kit (SDK) for Windows 8 をインストールして MAPISendMailHelper() を呼び出し、ANSI に変換して送信します。
Word 2016 はシステム要件として、Windows 7 SP1 上でも動作します。テキスト形式メールの UTF-8 への対応にあたり、Windows 7 SP1 上でも UTF-8 として送信可能とするため、MapiMessage 構造体の ulReserved パラメーターを拡張し、ここに設定された値が 0 であれば ANSI、CP_UTF8 (UTF-8 のコード ページ) であれば UTF-8 と見分けられるようにしました。
Word 2016 でのテキスト形式メール送信時には MAPISendMail() 関数を引き続き呼び出し、ulReserved パラメーターに CP_UTF8 を指定して、メッセージの内容は UTF-8 でエンコードした状態で MapiMessage 構造体に格納してテキスト形式のメールを送信します。Outlook 2016 はこの拡張に対応しており、ulReserved パラメーターの値を判断して UTF-8 の場合も正しくデコードして表示します。
参考)
タイトル : MAPISendMail function
アドレス : https://msdn.microsoft.com/en-us/library/windows/desktop/dd296721.aspx
タイトル : MapiMessage structure
アドレス : https://msdn.microsoft.com/en-us/library/windows/desktop/dd296732.aspx
※ ulReserved パラメーターの拡張後の設定値が記載されています
タイトル : Code Page Identifiers
アドレス : https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756.aspx
対応方法
メール アプリケーションの開発者様には、MAPISendMail() 関数で MapiMessage 構造体の ulReserved パラメーターに CP_UTF8 が指定され、文字が UTF-8 でエンコードされて送信される場合に正しく表示できるようご対応をお願いしております。
エンド ユーザー様がこの状況に直面している場合
エンド ユーザー様がこの状況に直面している場合、以下のような回避策をお試しください。
- 既定のメール アプリケーションを Outlook 2016 に変更する
- メール アプリケーションの設定でメール受信時の文字コードを設定可能な場合は、UTF-8 に設定する
- メール アプリケーションでメールを作成後、Word で作成した文書を添付、または内容をコピー&貼り付けする
2. 差し込み印刷でタイトルのみ文字化けする
この現象は、最新バージョンをご利用の場合、ボリュームライセンス版の Office 2016 でのみ発生します。クイック実行版および Microsoft ストア アプリ版の Office 2016 では修正済みの動作です。
- で記載した変更により、Word 2016 からのテキスト形式のメールでは、UTF-8 を使用することを想定しています。しかしながら、製品の問題により、差し込み印刷からのテキスト形式メール送信のとき、タイトルのみ ANSI (SJIS) のまま送信される現象が発生します。
この問題は、クイック実行版、および Microsoft ストア アプリ版の Office 2016 では既に修正されており、タイトル、本文ともに UTF-8 で送信されます。
一方で、ボリュームライセンス版 (MSI インストーラ形式) の Office 2016 は、本日 2018/6/11 時点でこの動作は修正されていません。ボリュームライセンス版の修正については現在検討中です。進展がありましたらこの記事でお伝えします。
2018/8/20 Update
以下の更新プログラムで、ボリューム ライセンス版の Office 2016 にも修正を行い、タイトル、本文ともに UTF-8 で送信されるようになりました。
文書番号 : 4032258
タイトル : Word 2016 (KB4032258) の更新プログラムを 2018 年 8 月 7日
アドレス : https://support.microsoft.com/ja-jp/help/4032258
回避策
ご不便をおかけして申し訳ありませんが、現象が発生するバージョンの Office を利用している場合は以下の回避策をご検討ください。
- Outlook を使用している場合は、HTML 形式でメールを送信する (MAPI とは別の仕組みで送信されるため、この問題が生じる処理を行いません)
- メール アプリケーションでメールを作成後、Word で作成した文書を添付、または内容をコピー&貼り付けする
- クイック実行版の Office 2016 (最新バージョン) を利用する
今回の投稿は以上です。
Tags MAPI Office クライアント開発 Word