openpyxl的单元模块具有属性偏移量:https://openpyxl.readthedocs.io/en/stable/api/openpyxl.cell.cell.html
offset(row=0, column=0)[source]
Returns a cell location relative to this cell.
Parameters:
row (int) – number of rows to offset
column (int) – number of columns to offset
Return type:
openpyxl.cell.Cell
[我正在尝试了解如何使用cell.offset(如上所述)将数据从源工作表复制到源工作表,源工作表从A列的第2行开始,到目标工作表从A列的第7行开始。
我实际上可以通过以下不同方法来实现:
row_offset=5
for rows in ws2.iter_rows(min_row=2, max_row=None, min_col=1, max_col=1):
for cell in rows:
ws3.cell(row=cell.row + row_offset, column=1, value=cell.value)
wb3.save('C:\\folder\\destOutputOffsetby5.xlsx')
以上将数据从第2行的ws2复制到第7行的ws3(由于偏移量5)。
但是我想将“单元”模块的“偏移”属性用于我自己的培训/学习目的。
如何用偏移量模块替换上面的内容?
这是我到目前为止的内容:
for row in ws2.iter_rows(min_row=2, max_row=None, min_col=1, max_col=1):
for cell in row:
foo = cell.offset(row=5, column=0)
如果我随后运行:
"print(foo)"
我得到了正确的偏移量起始行以及其他行(此处未显示所有行):
<Cell 'report1570826222449'.A7>
<Cell 'report1570826222449'.A8>
<Cell 'report1570826222449'.A9>
依此类推。
如果我跑步
print(foo.value)
我当然会得到数据本身:
2019-10-03 00:00:00
2019-10-02 00:00:00
依此类推。
但是我不知道将foo(或foo.value?)从ws2复制到ws3。我尝试的每种方法都只会忽略cell.offset并将其写入目标工作表A列,该列从第2行而不是第7行开始。
ws3正在:
wb3 = load_workbook('C:\\folder\\DetOutPutOffset5.xlsx')
ws3 = wb3['Sheet2']
这不会复制任何数据,因为在ws3中实际上没有任何更改。
for rows in ws2.iter_rows(min_row=2, max_row=None, min_col=1, max_col=1):
for cell in rows:
cell.offset(row=5, column=0)
wb3.save('C:\\folder\\Destfile.xlsx')
还有这个:
for rows in ws2.iter_rows(min_row=2, max_row=None, min_col=1, max_col=1):
for cell in rows:
ws3.cell.offset(row=5, column=0)
wb3.save('C:\\folder\\Destfile.xlsx')
引发异常
AttributeError: 'function' object has no attribute 'offset'
有什么建议吗?我觉得我只是在这里缺少一些基本概念来弥合ws2和ws3之间的差距。预先感谢!
这将从ws1的行偏移ws2 5行上的值:
from openpyxl import load_workbook
wb = load_workbook("copies.xlsx")
ws1 = wb.worksheets[0]
ws2 = wb.worksheets[1]
# Get the row
for rows in ws1.iter_rows(min_row=2, max_row=None, min_col=1, max_col=1):
# Get the cell
for cell in rows:
# offset the values for cells on ws2 with cell offset
ws2.cell(row=cell.offset(row=5, column=0).row, column=1, value=cell.value)
wb.save("copies_copied.xlsx")