前提・実現したいこと
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/ツールのバージョンなど)
参考にしたサイト:リンク内容
回答1件
あなたの回答
tips
プレビュー