2016-10-10 20 views
0

COMワークステーション、つまりPythonでWin32 APIを使用してExcelワークシートからすべての定義名を取得するにはどうすればよいですか?Win32:Excelからすべての列名を取得するPython

私は何らかのdictを取得したいと思います。例では、それは次のようになり下回っ:

cols['Stamm_ISIN'] = 2 

私はそれがいくつかの値を設定するためのID 2です使用して、後の列にアクセスすることができるように:excel.Cells(row, cols['Stamm_ISIN']).Value = 'x'

私はAPIドキュメントhttps://msdn.microsoft.com/en-us/library/office/ff841280.aspxで多少こだわっているので、それはそう何とか:(

enter image description here

+0

openpyxlを使用できませんか?それをチェックしてください:https://openpyxl.readthedocs.io/en/default/ – gplayer

+0

このタスクのためだけ?ええ、可能でしょう。それ以外はCOM APIを使用していますので、既にExcel内で開いているワークブック内の既存のセルを簡単に変更することができます。私はOpenPyxlがVBAとフォーマットを維持しないので、ワークブックを最初から開いて再保存したくありません。したがって、私はいくつかの細胞を変更するCOM APIを使用しています – tim

答えて

1

をgoogeling次のスクリプトは、特定の列見出しのすべてを表示する方法を示します際にどれしかも、私は任意の結果を見つけることができませんでした...可能にしますワークシート。まず、使用する列の数を計算し、各列を列挙します。次に、特定のWorkBookの名前付き範囲をすべて表示します。各範囲は、インスタンスをcols辞書に格納します。これはその後、与えられた値に、指定された名前付き範囲内のすべてのセルを設定するRange()と組み合わせて使用​​することができます。この例では

import win32com.client as win32 
excel = win32.gencache.EnsureDispatch('Excel.Application') 
wb = excel.Workbooks.Open(r"test file.xlsx") 
ws = wb.Worksheets("Sheet1") 

cols = {}  # Dictionary holding named range objects 

# Determine the number of columns used in the top row 
xlToLeft = -4159 
col_count = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column 

# Print each column heading 
for col in range(1, col_count + 1): 
    print "Col {}, {}".format(col, ws.Cells(1, col).Value) 

# Enumerate all named ranges in the Workbook 
for index in range(1, wb.Names.Count + 1): 
    print "Workbook: ", wb.Names(index).Name, wb.Names(index).Value 
    cols[wb.Names(index).Name] = wb.Names(index) 

# Enumerate any named ranges in the current Worksheet 
for index in range(1, ws.Names.Count + 1): 
    print "Sheet: ", ws.Names(index).Name, ws.Names(index).Value 

# Change all cells for a named range called "TestRange" to "TEST" 
ws.Range(cols["TestRange"]).Value = "TEST" 

# Save the changes 
wb.Save() 
excel.Application.Quit() 

、ExcelファイルはTestRangeと呼ばれる名前付き範囲を持っている必要があります。

関連する問題