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

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

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

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Python

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

Q&A

解決済

1回答

1348閲覧

VBA python 連携について

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Python

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

0グッド

0クリップ

投稿2020/11/05 06:35

編集2020/11/05 07:33

前提・実現したいこと

VBAからpythonのファイルを呼び出したい
簡単なものは呼び出せたがjsonがかかわっているpython1はうまく作動しない
(python1単体では作動します)
原因がわからず困っていますどなたか解決方法ご存じの方ご教授お願いします。

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

コマンドプロンプト上

Traceback (most recent call last): File "spd.py", line 13, in <module> credentials = ServiceAccountCredentials.from_json_keyfile_name('xxxxx.json', scope) File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python38\lib\site-packages\oauth2client\service_account.py", line 219, in from_json_keyfile_name with open(filename, 'r') as file_obj: FileNotFoundError: [Errno 2] No such file or directory: 'xxxxxx.json'

該当のソースコード

VBA

1Sub call1() 2 CreateObject("WScript.Shell").Run "CMD.EXE /k C: & cd C:\Users\xxxxx\Desktop\python02\自社開発 & python spd.py" 3End Sub 4

python1

1import gspread 2from oauth2client.service_account import ServiceAccountCredentials 3from gspread_dataframe import get_as_dataframe, set_with_dataframe 4import pandas as pd 5import win32com.client 6import time 7import json 8 9scope = ['https://spreadsheets.google.com/feeds', 10 'https://www.googleapis.com/auth/drive'] 11 12 13credentials = ServiceAccountCredentials.from_json_keyfile_name('xxxxx.json', scope) 14gc = gspread.authorize(credentials) 15wks = gc.open('gspreadサンプル').worksheet("シート1") 16 17path1=r"xxxxxxxxxxxxxxxxx.xlsx" 18#sheetからdateframeで受け取る 19df = pd.read_excel(path1,sheet_name="id",usecols="A:X",header=0,index_col=0,skiprows=1) 20print(df) 21#セル列の最大値を求める。 22COLMAX= len(df.columns) 23#セル行の最大値を求める。※1行目はタイトルなので、+1してあげる。 24ROWMAX = len(df.index)+1 25 26#カラム名を取得する。 27c_list=list(df.columns.values) 28#列を移動するためのリスト ※必要な分だけ作成 29col =('BM','BN','BO','BP','BQ','BR','BS','BT','BU','BV','BW','BX','BY','BZ','CA','CB','CC','CD','CE','CF','CG','CH','CI') 30cc = 0 31# 更新範囲指定。A2:A100 のような文字列をつくる 32for cc in range(COLMAX): 33 data_range = col[0+cc] + "5:" + col[0+cc] + str(ROWMAX) 34 print(data_range) 35 cell_list = wks.range(data_range) 36 for (i,cell) in enumerate(cell_list): 37 cell.value = str(df[c_list[0+cc]].iloc[i]) 38 wks.update_cells(cell_list) 39 cc=cc+1 40

試したこと

excellファイルの同一ディレクトリ内にもjsonファイル入れるも効果なし

python2

1print("これはPythonから出力された文字です")

という簡単なものをa.pyというファイル名にし

VBA

1Sub call1() 2 CreateObject("WScript.Shell").Run "CMD.EXE /k C: & cd C:\Users\xxxxx\Desktop\python02\自社開発 & python a.py" 3End Sub

a.pyの方はちゃんと呼び出されました

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

参考にしたサイト:リンク内容

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

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

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

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

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

meg_

2020/11/05 07:23

「FileNotFoundError」はパスの問題だと思うのですが、ファイル内容がjsonであることが本当に問題なのでしょうか?
退会済みユーザー

退会済みユーザー

2020/11/05 07:33

ご返事ありがとうございます。 私の考え方なのですが python1の中にjsonを使用しておりpython2のコードは使用していない比較により私はパスには問題がないと考えに至りました。 またNo such file or directory: 'xxxxxx.json'と出てきたのでjsonに問題があるのでは?となりました。 もしパス自体に問題があるとなるとpython1とpython2まったく同じパスを使用しているのですが何がダメなのでしょうか?????
meg_

2020/11/05 07:49 編集

'xxxxx.json'のところを絶対パスで書いたらどうなりますか? ※「python1とpython2まったく同じパスを使用している」の意味が分かりませんでした。
tatsu99

2020/11/05 08:31

カレントディレクトリが C:\Users\xxxxx\Desktop\python02\自社開発 なので C:\Users\xxxxx\Desktop\python02\自社開発の下に xxxxxx.json を置いて見てはいかがでしょうか。
退会済みユーザー

退会済みユーザー

2020/11/05 08:45

@meg_様 絶対パスにしますとできました!!ありがとうございます ベストアンサーにしたいのでお手数ですが回答場所に記載して頂ければ幸いです???? @tatsu99 解決してしまいましたがご返事ありがとうございます! ちなみにC:\Users\xxxxx\Desktop\python02\自社開発の下にxxxxxx.jsonおいておりました。!
guest

回答1

0

ベストアンサー

「FileNotFoundError」はパスの問題なので、'xxxxx.json'のところを絶対パスにすると解決するかと思います。

投稿2020/11/05 09:14

meg_

総合スコア10760

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問