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

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

新規登録して質問してみよう
ただいま回答率
85.50%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

VBA

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

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1191閲覧

pdf2txt.pyを利用するコードをVBAで動かしたい

znda13

総合スコア0

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

VBA

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

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/13 06:56

編集2022/01/12 10:55

python初心者で勉強中のものです。よろしくお願いします。

前提・実現したいこと

PDFの内容をテキストファイルに抽出したいと思っています。
pdf2txt.pyを利用するコードを作成し、pythonでの所望の動作をすることが確認できました。
エクセルのセルに入力されたPDFファイルの場所をもとにテキストファイルを生成させたいため、エクセルのVBAでpythonコードを実行させたいのです。
しかし、VBAからpythonのコードを実行させようとしたところ、テキストファイルを生成できないという問題が発生しました。
エラーメッセージも出ず、どこを直せばよいかわかりません。

発生している問題・エラーメッセージ

【追記1】下記試したことの【追記1】実行時のエラー
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "c:\users\■■■■■■■\py2xl.py", line 15, in myPDF2TXT
run(["py", str(py_path), "-o test4.txt", str(ppath)],shell = True,stdout=PIPE,stderr = PIPE,check=True).stdout
File "C:\Py\Python\lib\subprocess.py", line 512, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['py', 'C:\Py\Python\Scripts\pdf2txt.py', '-o test4.txt', 'None']' returned non-zero exit status 1.

該当のソースコード

エクセルのVBA(ファイル名はpy2xl.xlsm)
行数を引数として渡したいです。

Sub pycall() Dim row As Long row = 2 Call RunPython("import py2xl; py2xl.myPDF2TXT(" & row & ")") End Sub

python(ファイル名はpy2xl.py)
このコードだけでテキストファイルが生成できることは確認できています。
※エクセルのB2セルにPDFの場所を入力してあります。

import sys import xlwings as xw from pathlib import Path from subprocess import PIPE from subprocess import run def myPDF2TXT(row): py_path = Path(sys.exec_prefix) / "Scripts" / "pdf2txt.py" ppath = xw.Range((row,2)).value run(["py", str(py_path), "-o test.txt", str(ppath)],shell = True,stdout=PIPE,stderr = PIPE,check=True).stdout #以下は単体動作用 row = 2 myPDF2TXT(row)

試したこと

・シェルコマンドをrunでなくcall、check_out、Popenとする
・【追記1】引数のrowを空白セルになるようにして実行すると上記エラーメッセージの【追記1】が発生します。このことからpython側のrunの実行まではできていて、出力としてテキストファイルを生成するところで不具合があるのではと考えています。

補足情報(FW/ツールのバージョンなど)

・python3.8.2
・Microsoft Visual Basic for Applications 7.1
・上記xlsmファイルとpyファイル、PDFファイルは同じフォルダに格納してあります
・VBAにはxlwings.basをインポート済です

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

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

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

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

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

satokei

2020/05/18 14:01

> ppath = xw.Range((row,2)).value ここで変数「row」「ppath」には期待通りの値が入っているのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問