実現したいこと
Pythonでエクセルが立ち上がったことを確認してから、プログラムを進めたい
発生している問題・分からないこと
エクセルを開くプログラムは動作していますが、エクセルが実際に開く前にプログラムが進んでしまい。
XLOOKUP関数が正常に動作していません。
対象のエクセルが立ち上がっていないため、エクセルのセルに#NAMEが表示されてしまいます。
該当のソースコード
python
12 3import openpyxl as px 4import glob 5import os 6 7 8from openpyxl import load_workbook 9from openpyxl.formula.translate import Translator 10from openpyxl.utils.cell import coordinate_to_tuple 11 12 13# Excelファイルの指定14inputFile = r"C:\Users\User\Downloads\伝票明細.xlsx"15# 指定したExcelを開く16wb = px.load_workbook(inputFile)17# 開いたExcelファイルの一番左のシートを選択18ws = wb.worksheets[0]19 20 21# セルデータの置換 無駄なスペースを削除22origin_cell_1="R3"23(origin_row_1, origin_col_1)= coordinate_to_tuple(origin_cell_1)24 25for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=origin_col_1, max_col=origin_col_1):26 for cell in row:27 cell.value = cell.value.replace(' ', '')28 pass29 30 31 32# セルデータの文字列を数値に変更33origin_cell_2="J3"34(origin_row_2, origin_col_2)= coordinate_to_tuple(origin_cell_2)35 36for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=origin_col_2, max_col=origin_col_2):37 for cell in row:38 # セルの値が数値に変換可能かどうかチェック39 try:40 # 数値に変換可能であれば、数値に変換して代入41 cell.value = float(cell.value)42 except ValueError:43 # 数値に変換できない場合は、そのままの値を代入44 pass45 46 47# 数式と、数式を埋め込む一番上のセルを指定。48origin_formula='=IF(L3="",IF(R3<>"","",K3),IF(K3>=L3,K3,L3))'49origin_cell="M3"50(origin_row, origin_col)= coordinate_to_tuple(origin_cell)51 52#originの列、2行目から一番したまで数式をフィル53#origin Cellに数式をあらかじめ埋めておく必要はない。54for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=origin_col, max_col=origin_col):55 ws[row[0].coordinate]= Translator(origin_formula,origin=origin_cell).translate_formula(row[0].coordinate)56 #print(ws[row[0].coordinate].value)57#保存58wb.save(r"C:\Users\User\Downloads\伝票明細.xlsx")59 60 61 62#ーーーーーここでエクセルを開く 63 64#エクセルXLOOKUP関数を実行するためエクセルを開く65fullpath_xlsx = r'C:\Usersr\Downloads\伝票明細.xlsx' 66subprocess.Popen(['start', fullpath_xlsx], shell=True)67 68 69 70# フォルダ内のファイルを読み出し71files = glob.glob(r"C:\Users\User\Desktop\回答用\*")72 73#ーーーーーエクセルが実際に開くまで以下のプログラムの実行を待機したい74 75# 回答処理76for file in files:77 # Excelファイルの指定78 inputFile = file79 80 # 指定したExcelを開く81 wb = px.load_workbook(inputFile)82 83 # 開いたExcelファイルの一番左のシートを選択84 ws = wb.worksheets[0]85 86 # 数式と、数式を埋め込む一番上のセルを指定。87 origin_formula="=XLOOKUP(D3,'[伝票明細.xlsx]data'!$j:$j,'[伝票明細.xlsx]Data'!$m:$m)"88 origin_cell="A3"89 (origin_row, origin_col)= coordinate_to_tuple(origin_cell)90 91#originの列、3行目から一番したまで数式をフィル92#origin Cellに数式をあらかじめ埋めておく必要はない。93 for row in ws.iter_rows(min_row=3, max_row=ws.max_row, min_col=origin_col, max_col=origin_col):94 ws[row[0].coordinate]= Translator(origin_formula,origin=origin_cell).translate_formula(row[0].coordinate)95#print(ws[row[0].coordinate].value)96 97 # ファイル保存98 wb.save(inputFile)99
試したこと・調べたこと
上記の詳細・結果
検索してみましたが、エクセルが実際に開いているか確認する方法がわかりませんでした。
補足
特になし
0 コメント