[PHP-users 17400]COMオブジェクトへのマルチバイト文字 列の引渡しについて

tuffyrhodes2000 @ yahoo.co.jp tuffyrhodes2000 @ yahoo.co.jp
2003年 8月 21日 (木) 00:46:31 JST


高松と申します。
以前送信したメールが送れてなかったようなので、再送します。

PHPからWordドキュメントのテンプレートを開いてドキュメントを
編集し保存する、というのを実現しようとテストしています。

Wordのフォームフィールドに文字列の引渡しをすることは
できたのですが、日本語を渡したときに、渡した文字列の後ろに
変な文字が付加されてしまって困っています。

同じことを VisualBasicでやってみたところ、問題が無かったので、
phpスクリプトの問題かと思い、メールしました。

環境は
Windows2000
apache1.3.26
php4.3.1(CGI)
Office2000

以下、ソースです。(実際はEUCで記述)
 -----------------------------------
<?php

$text = "2バイト文字の入力";

// COMオブジェクトの作成
$word = new COM("word.application");
print "Loaded Word, version {$word->Version}<br>\n";

// テンプレートを開く
$doc = $word->Documents->Open("c:\\temp\\formtest.dot");
$doc->Activate;

// ドキュメントを編集する
$doc->FormFields["Text1"]->Result = 
    mb_convert_encoding( $text, "SJIS", "EUC-JP");

// 作成したドキュメントを保存する
$doc->SaveAs("c:\\temp\\formtest2.doc");

// ドキュメントを閉じる
$doc->Close();
// Wordを閉じる
$word->Quit();
$word->Release();
unset($word);
?>
ok.
 --------------------------------

ソース中の、formtext.dot がWordテンプレートで、
Text1というフォームドキュメントがあります。

これを実行すると、Text1は

2バイト文字の入力・?3・・・・・・・

などとなります。
引き渡した後にphpで取り出しvar_dumpしてみると、27バイトでした。

COMの問題かと思いましたが、同じようなことをVB6だと
正常にできました。

何か手がかりでもご存知の方がおりましたら、ご教授願います
。

--
Takamatsu <tuffyrhodes2000 @ yahoo.co.jp>



PHP-users メーリングリストの案内