python openpyxl 将光标设置在选定的单元格上

python openpyxl set cursor on the chosen cell

我正在使用 openpyxl 库对电子表格进行一些 excel cut/paste 操作。 假设我的操作产生以下数据(请将其用于可重现性目的):

col1;col2
1;0,17153686
2;0,615324797
3;0,573701744
4;0,503462355
5;0,154284926
6;0,10027259
7;0,926526263
8;0,871108863
9;0,048035143
10;0,38731583
11;0,48529708
12;0,901046699
13;0,985505734
14;0,606868435
15;0,280662943
16;0,356188065
17;0,102727139
18;0,800757985
19;0,767509347
20;0,418477445
21;0,751892035
22;0,959923786
23;0,524754643
24;0,014140778
25;0,267427799
26;0,666726192
27;0,019314009
28;0,764133187
29;0,587031993

这是根据给定参数选择活动单元格的代码:

from openpyxl import load_workbook, Workbook

def set_active_cell(new_file_name, active_row):
    print(active_row)
    workbook = load_workbook(new_file_name)
    sheet = workbook.get_sheet_names()[0] #get the name of first sheet
    worksheet = workbook.get_sheet_by_name(sheet)
    coords = "A" + str(active_row)
    print(coords)
    # worksheet.cell(row=active_row, column=1)
    worksheet.sheet_view.selection[0].activeCell = coords
    worksheet.sheet_view.selection[0].sqref = coords
    workbook.save(new_file_name)

if __name__ == "__main__":
    set_active_cell("data.xlsx", 28)

如您在所附图片中所见,我的默认视图包含前 18 行。如果 active_row 小于或等于 18,我得到了我想要的:我可以在 Excel 文件的起始视图中看到活动单元格。

但是,任何 active_row 的值大于 18 都会导致问题。活动单元格选择正确,但我的起始视图仍然是前 18 行,我需要向下滚动才能到达活动单元格。

有什么方法可以使用 openpyxl 更改视图吗?

滚动是通过调整 openpyxl.worksheet.views.SheetView.topLeftCell 变量来完成的。

您可以滚动到 coords 变量:

worksheet.sheet_view.topLeftCell = coords

您可以在 openpyxl documentation.

中找到更多详细信息

使用 openpyxl 2.6.2 你必须像这样设置 activeCellsqref

ws.views.sheetView[0].selection[0].activeCell = 'B15'
ws.views.sheetView[0].selection[0].sqref = 'B15'