win32comライブラリをPythonを使い、エクセル操作しております。
VBAで言うところの最終行取得(Rows.Count)に関しての質問です。
よろしくお願いいたします。
下記の様なコードを書いております。
<test.py>
1 import win32com.client 2 from win32com.client import Dispatch 3 import os 4 path1=os.getcwd() 5 path2="./myExcel_old.xlsx" 6 path3="./myExcel_new.xlsx" 7 xl=win32com.client.Dispatch("Excel.Application") 8 xl.Visible=False 9 path=os.path.join(path1,path2) 10 pathx=os.path.join(path1,path3) 11 wb = xl.Workbooks.Open(path) 12 ws=wb.Worksheets["Sheet2"] 13 ws=activate 14 max_Rows=ws.Rows.Count 15 for i in range (2,max_Rows): 16 xl.Cells(i,2).Value=xl.WorksheetFunction.CountIf(xl.Range(ws.Cells(2,1),ws3.Cells(i,1)),ws.Cells(i,1).Value) 17 ws.Columns(1).Insert 18 wb.SaveAs(pathx) 19 wb.Close(SaveChanges=True)
Q1)
14行目から16行目で、最終行を取得して、CountIFで処理を行い、別ファイル名にて保存すると言うコードになります。
しかし、上記のコードを実行すると、下記のエラーが発生します。
このエラーの意味は何になるのでしょうか? また、解決方法を教えて頂きたく。
========================
C:\Users\test_users\Desktop>python test8z3.py Traceback (most recent call last): File "test8z3.py", line 35, in <module> xl.Cells(i,2).Value=xl.WorksheetFunction.CountIf(xl.Range(ws3.Cells(2,1),ws3.Cells(i,1)),ws3.Cells(i,1).Value) File "<COMObject <unknown>>", line 2, in CountIf pywintypes.com_error: (-2147352567, '例外が発生しました。', (0, 'Microsoft Excel', '引数の数の誤りがあります。', 'xlmain11.chm', 0, -2146827284), None)
============================
不思議なのは、14行目をコメントアウトして、15行目のmax_Rowsを数値(例えば、300)に置き換えると(つまり、下記の様にすると)、
14 # max_Rows=ws.Rows.Count 15 for i in range (2,300): 16 xl.Cells(i,2).Value=xl.WorksheetFunction.CountIf(xl.Range(ws.Cells(2,1),ws3.Cells(i,1)),ws.Cells(i,1).Value)
ちゃんとCountifが正常に動き、別名でファイル保存もできます。(上記例では、300行まで動きます。エラーも発生しません。)
Q2)
なお、追加質問で恐縮なのですが、17行名の列追加のコードが機能しません。
エラーは出ないのですが、出来上がってきたファイルに、列が追加されておりません。(A列を追加するコードなのですが。)
こちらも、なぜ動作しないのかが分からず、困っております。
教えて頂きたく。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー