質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

1886閲覧

謎の文字を解読して検出・削除したいです。(python)

kumataro_

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

2クリップ

投稿2020/04/13 08:33

編集2020/04/15 04:09

謎の文字を解読して検出・削除したいです。

[経緯]
excelマクロを使用してwordの見出し文字をcsvに出力しました。
csv結果を見ると、vscode(UTF-8 with BOM)では何も表示されないのですが、
コンソールの出力では謎の文字(矢印)が出現しています。
これをpythonのreplaceで除去したいです。

[csv]
3,(1)見出し1
3, (2)見出し2
3, (3)見出し3
3,(4)見出し4
3,
3,(5)見出し5
この上矢印を除去したいです。

[解析?結果]
1行目はそのまま、2行目は.encode('UTF-8')、3行目は.encode('unicode-escape')]

3,(1)見出し1
b'3,(1)\xe8\xa6\x8b\xe5\x87\xba\xe3\x81\x97\xef\xbc\x91'
b'3,(1)\u898b\u51fa\u3057\uff11'

3, (2)見出し2
b'3,\x0c (2)\xe8\xa6\x8b\xe5\x87\xba\xe3\x81\x97\xef\xbc\x92'
b'3,\x0c (2)\u898b\u51fa\u3057\uff12'

3, (3)見出し3
b'3,\x0c(3)\xe8\xa6\x8b\xe5\x87\xba\xe3\x81\x97\xef\xbc\x93'
b'3,\x0c(3)\u898b\u51fa\u3057\uff13'

3,(4)見出し4
b'3,(4)\xe8\xa6\x8b\xe5\x87\xba\xe3\x81\x97\xef\xbc\x94'
b'3,(4)\u898b\u51fa\u3057\uff14'

3,
b'3,\x0c'
b'3,\x0c'

3,(5)見出し5
b'3,(5)\xe8\xa6\x8b\xe5\x87\xba\xe3\x81\x97\xef\xbc\x95'
b'3,(5)\u898b\u51fa\u3057\uff15'

イメージ説明

・出力側は以下のURLを参考に作成しております。
(出力箇所だけイミディエイトからファイル出力に変更しています。)
https://www.relief.jp/docs/word-vba-heading-style-strings.html

vba

1Sub sample() 2 Dim out As String 3 4 Dim adoSt As Object 5 Set adoSt = CreateObject("ADODB.Stream") 6 7 Const doc_path As String = "C:\xxxxxxxxxx\sample.docx" 8 Const csv_path As String = "C:\xxxxxxxxxx\sample.csv" 9 10 With adoSt 11 .Charset = "UTF-8" 12 .LineSeparator = adLF 13 .Open 14 15 Dim par As Paragraph 16 With Documents.Open(doc_path) 17 ActiveDocument.ActiveWindow.Visible = False 18 For Each par In ActiveDocument.Paragraphs 19 If par.OutlineLevel <> wdOutlineLevelBodyText Then 20 out = par.OutlineLevel & "," & Replace(par.Range.Text, vbCr, "") 21 adoSt.WriteText out, adWriteLine 22 End If 23 Next par 24 End With 25 26 .SaveToFile csv_path, adSaveCreateOverWrite 27 .Close 28 End With 29 30End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/04/13 21:43

>この上矢印 ブラウザや環境によるかもしれませんが少なくとも私には表示されてません。 画面キャプチャ提示された方が確実に伝わると思います。
m.ts10806

2020/04/13 21:44

ただ、「出力後に除去」は悪手かと思います。そもそも出ないように対応すべきでは? 出力プログラムも併せてご提示ください
kumataro_

2020/04/15 00:47

追記させていただきました。よろしくお願い致します。
dit.

2020/04/15 00:49

提示のコード、インデント部分が全角スペースなんですが実際のコードも同じですか?
kumataro_

2020/04/15 00:56

すみません、実装は半角スペースです。(引用先が全角になっていたようです。)
dit.

2020/04/15 00:57

私のように勘違いしてしまう方がいるかもしれないので、実際のコードに直しておいてくださいね。
kumataro_

2020/04/15 01:03

すみません。直しました。
dit.

2020/04/15 01:53

「excelマクロを使用してwordの見出し文字をcsvに出力」するためのコードはどうなっているのでしょうか。 提示のコード(参考サイトのコード)をWord内で実行したところ余計な文字(上矢印)もなくイミディエイトウィンドウに出力されました。 ※私の環境ではteratail上では矢印が見えていますので、teratailの質問(または回答)欄にコピペして余計な文字の出力がされていないかの確認をしています。 m.ts10806さんと同じく「そもそも出ないように対応すべき」と思っているので出力方法をより詳細にご提示ください。
kumataro_

2020/04/15 04:15

>>「excelマクロを使用してwordの見出し文字をcsvに出力」するためのコードはどうなっているのでしょうか。 更新しました。ただ、word上でもexcelからでもこちら側では結果は同じになっています。 >>提示のコード(参考サイトのコード)をWord内で実行したところ余計な文字(上矢印)もなくイミディエイトウィンドウに出力されました。 正常に出るものと余計な文字(上矢印)が混ざるものがあります。 おそらくwordファイル側の問題なのかと思っているのですが、wordファイル自体が外に出せるものではないので、csvから取り除くという方向性で相談させて頂いておりました。 また、先ほどpythonの正規表現で削除できました。もし上記のexcelマクロの方に問題がない場合は、クローズした方がいいのかなと思いました。
dit.

2020/04/15 05:17

提示のコードを利用してcsv出力を試してみました。 適当な文章に適当に見出しを設定し、見出しの先頭にいくつかの記号や環境依存文字等記載してみましたが再現できませんでした。(Wordファイルが提示できないのは仕方がないのでこれ以上は諦めます) 元々pythonで処理したいという質問だったのに、引っ掻き回してしまってすみません。
kumataro_

2020/04/15 09:14

了解しました。 いえいえ、こちらこそ手間をとらせてすみません。ありがとうございました。
ikadzuchi

2020/04/15 14:27

0x0Cは制御文字のForm Feedなので、Wordでページ送りなり段落送りなりの書式の変更操作をしたり元に戻したり色々やっていると入ってしまいそうな雰囲気がしますね。
kumataro_

2020/04/16 00:38

なるほど、Form Feed調べてみましたが、改ページの制御コードなんですね。勉強になりました。ありがとうございます。
guest

回答1

0

自己解決

pythonの正規表現で置換できたので、クローズとします。
ありがとうございました。

python

1line = re.sub('\x0c',"",line)

投稿2020/04/15 09:18

kumataro_

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問