我想使用python来查找excel电子表格当前活动工作表中当前活动或选定单元格的地址或坐标。
到目前为止,我所能做的只是后者。也许我只是用错误的词来搜索。然而,这是两年来第一次编写第一个VBA和现在的Python,我一直无法搜索并找到答案。即使我花了半天时间 我已经在readthedocs(http://openpyxl.readthedocs.org/en/latest/_modules/index.html)中搜索了代码 并查看了openpyxl.cell.cell,openpyxl.worksheet.worksheet,openpyxl.worksheet.views代码。最后似乎有一些承诺,并导致我编写下面的代码。仍然,没有快乐,我似乎无法说出我的在线搜索能够查明谈论找到实际活动/选定单元格的结果。也许这是因为openpyxl实际上正在查看保存的电子表格,该电子表格可能不包括要选择的最后一个单元格上的任何数据。 我在Python 3.4.3和2.7.11中都尝试过它。使用openpyxl 2.4.0。 这是让我最接近目标的代码。我在Python3中运行它。
from openpyxl.worksheet.views import Selection
import openpyxl
wb = openpyxl.load_workbook('example.xlsx')
ws = wb.active
print(wb.get_sheet_names())
print(ws)
print(Selection.activeCell)
这给了我以下的内容。
['Sheet1', 'Sheet2', 'Sheet3']
<Worksheet "Sheet3">
Values must be of type <class 'str'>
我输入前两张照片只是为了证明我实际上是在访问工作簿/工作表。
如果我将最后一行更改为:
print(Selection.activeCellId)
我明白了:
Values must be of type <class 'int'>
我认为这是因为这些仅用于写入而不是查询。我已经玩弄了编写VBA宏并从python运行它的想法。但是,此代码将与我无法控制的电子表格一起使用。由不一定能解决任何问题的人。我认为我没有能力写出足以处理任何问题的东西。
任何帮助将不胜感激。
答案 0 :(得分:3)
很难看到像openpyxl这样的库的活动单元的目的,因为它实际上是一个GUI工件。然而,因为openpyxl很难实现OOXML规范,所以应该可以读取前一个应用程序存储的值,或者编写它。
ws.views.sheetView[0].selection[0].activeCell
答案 1 :(得分:0)
考虑win32com
库来复制Excel VBA属性ActiveCell。 Openpyxl可能对此属性的方法有限,而wind32com
允许Python充分利用Windows程序的COM库,包括MS Office Suite(Excel,Word,Access等)。您甚至可以将文件作为子进程操作,就像您直接编写VBA一样。
import win32com.client
# OPEN EXCEL APP AND SPREADSHEET
xlApp = win32com.client.Dispatch("Excel.Application")
xlApp.Workbooks.Open('example.xlsx')
xlApp.ActiveWorkbook.Worksheets('Sheet1').Activate
print(xlApp.ActiveCell)
xlApp.ActiveWorkbook.Close(False)
xlApp.Quit
xlApp = None