制御文字の削除No.07550
おすぎ さん 15/04/21 09:51
 
お世話になっております。

秀丸のCOM操作を使って、ワードファイルの文章を
秀丸にコピーしようとしています。

コピーすると、文頭に制御文字(ハイライトされた「G」の字)が
入る場合があります。
これを防ぐ方法または確実に削除できる方法があったら教えて下さい。

ワードの各文章(表を含む)をsentenceオブジェクトで指定して、
TEXTを読み出し、秀丸ファイルにinsertしています。
ワードの表のTEXTを読み出すと、insertした文章の文頭に
「制御文字」が入ってしまいます。

防止策があれば助かるのですが。。。
よろしくお願いいたします。




[ ]
RE:07550 制御文字の削除No.07551
秀丸担当 さん 15/04/21 15:28
 

制御文字は、文字列で"\x07"というように\xの後に16進数二桁で表記することが
できます。

秀丸エディタ上では、\x01が反転Aで、\x02が反転B、という感じで表示され、
\x07が反転Gになります。
これを置換して消すとしたら、以下のようなマクロになります。

setcompatiblemode 0x20000;
replaceallfast "\x07", "";

[ ]
RE:07551 制御文字の削除No.07552
おすぎ さん 15/04/21 15:48
 
秀丸担当さま

消去できました。大変助かりました
ありがとうございました。

「制御文字が文字列 "\x07" 〜」とかになると理解を超えています(^^;


もう一つ教えて下さい。

秀丸COMで、ワードのテーブルを操作しようとしていますが、
できない操作がポロポロあります。
たとえばテーブルの削除や選択など。。。

これって、致し方ないってことでしょうか?

[ ]
RE:07552 制御文字の削除No.07553
秀丸担当 さん 15/04/21 16:17
 

具体的なことがわからないとなんとも言えないですが、まずはvbsやjsで書いて
確かめてみて、それを秀丸マクロに文法を変えるといいと思います。

文法を書き換えると難解になりやすいので、プログラムの規模によっては、
vbsやjsにパラメータを付けて直接呼んでしまった方が簡単かもしれません。

[ ]
RE:07553 制御文字の削除No.07554
おすぎ さん 15/04/21 16:28
 
ありがとうございます。

vbsでトライしてみます。

[ ]
RE:07554 制御文字の削除No.07555
おすぎ さん 15/04/21 16:53
 
確認したいのですが、

ワードの操作で、
秀丸COMでは動かなかったが、
vbsでは動いた、
みたいなことはあり得るのでしょうか?

[ ]
RE:07555 制御文字の削除No.07556
秀丸担当 さん 15/04/21 17:09
 

秀丸のマクロでは通常文字列と数値しか扱えないので、それ以外の種類のパラ
メータだとうまくいかない可能性もあると思います。
その場合、allowobjparamという特殊な文があって、パラメータの種類を指定す
る方法があって、オブジェクトのパラメータやバイナリのパラメータを指定でき
たりします。

[ ]
RE:07556 制御文字の削除No.07557
おすぎ さん 15/04/22 09:15
 
vbsを勉強したいと思います。
ありがとうございました。

[ ]
RE:07557 制御文字の削除No.07558
秀丸担当 さん 15/04/22 09:37
 

1つ気になることがありました。
ここでいうVBSというのは、WSHのことで、Excel上ではなく、wscript.exeの上で
動くスクリプトのことです。
Excelの中でスクリプトを記述する、いわゆるVBAとは違います。
VBAはExcel内部として動き、VBSは外部からの操作として動きます。
VBAではできることが、VBSではできないという例はあったような気がします。
秀丸マクロはVBSと同じ位置づけになるので、VBAではできることが、秀丸マクロ
ではできないということはあり得ると思います。

[ ]
RE:07558 制御文字の削除No.07559
おすぎ さん 15/04/22 09:53
 
ありがとうございます。

やっぱりそうでしたか。

ワードVBAの操作の一部(たとえば、テーブルの削除など)が、
秀丸COMではできないので、おかしいなと思っていたのです。

VBSで同じことを試みてもダメっぽいでしょうか?

[ ]
RE:07559 制御文字の削除No.07560
秀丸担当 さん 15/04/22 10:20
 

同じ原因だとしたら、VBSでもできないと思います。
VBSで何ができて何ができないのかというのは、ワードの仕様になるので、すみ
ませんがわからないです。
もしVBSでできるけど秀丸マクロでできないとしたら、秀丸側に問題がある可能
性もあると思います。

[ ]
RE:07560 制御文字の削除No.07561
おすぎ さん 15/04/22 10:39
 
VBSで試みてみます。
ありがとうございました。

[ ]
RE:07561 制御文字の削除No.07562
おすぎ さん 15/04/22 12:18
 
結局、ワードVBAの操作(テーブル削除)は、秀丸COMでもできました。

できないと思った原因の1つは、
COM呼出し文の getresultex(10) がうまく機能していないためでした。

ワードファイル上ではちゃんと動作しているのに、
getresultex(10) は 0 を出力していました。


ご確認いただけましたら幸いです。

[ ]
RE:07562 制御文字の削除No.07563
秀丸担当 さん 15/04/22 14:21
 

以下のようなマクロで試してみたところでは、成功となりました。
ワードのオブジェクトの使い方がよくわかっていないのですが、違っていたらす
みません。
具体的な例を教えてもらえると助かります。

#objWordApp=createobject("Word.Application");
setpropnum #objWordApp,"Visible",-1;
#objDocuments = member(#objWordApp, "Documents" );
callmethod #objDocuments, "Open", "c:\\folder\\test.docx";
#objActiveDocument = member(#objWordApp, "ActiveDocument" );
#objTables = member(#objActiveDocument, "Tables" );

#objItem = member(#objTables, "Item", 1 );
if( getresultex(10) != 0 ) {
  message "成功1";
} else {
  message "失敗1";
}

callmethod #objItem, "Delete";
if( getresultex(10) != 0 ) {
  message "成功2";
} else {
  message "失敗2";
}

[ ]
RE:07563 制御文字の削除No.07564
おすぎ さん 15/04/22 15:59
 
ありがとうございます。

私は、
callmethod #objItem, "Delete"; を、
#objItemDelete = member(#objItem, "Delete"); のようにしていました。

この表現だと、getresultex(10) = 0 ですが、
テーブルは削除されます。

表記がおかしかったようです。
すみませんでした。

せめて、
member #objItem, "Delete";
とすれば良かったようです。

[ ]
RE:07564 制御文字の削除No.07565
秀丸担当 さん 15/04/22 16:24
 

そういう書き方だと、確かに実行できつつもエラーとなるようです。
vbsでも、以下のようにすると、同じく実行できつつエラーとなって、そういう
もののようです。
原因もわかって出来たということで、よかったです。

Set objWordApp=createobject("Word.Application")
objWordApp.Visible = True
Set objDocuments = objWordApp.Documents
objDocuments.Open( "c:\folder\test.docx" )

'エラー
Set objItemDelete = objWordApp.ActiveDocument.Tables.Item(1).Delete

'OK
'objWordApp.ActiveDocument.Tables.Item(1).Delete

[ ]