python - 尝试使用 cell.offset 在源工作表和目标工作表具有不同起始行的工作表之间进行复制
问题描述
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 并从第 2 行而不是第 7 行开始写入目标工作表列 A。
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")
推荐阅读
- java - 方法不存在类链接问题:在两个链接的 Java 项目中从具有相同名称和项目路径的类调用方法时
- linux - dnssec-dsfromkey 显示未知算法错误
- json - 使用 Node.js Express 检查 POST 正文请求语法和格式
- angular6 - Angular Elements:一个功能模块项目结构中的几个自定义 Web 组件可能吗?
- git - bitbucket 上的拉取请求不会触发竹子上的构建
- api - session_start():无法发送会话cookie - 已发送的标头。在发布请求的codeigniter rest-server api liberay中
- c# - WCF:SqlConnectionStringBuilder 中没有密码 - 为什么它起作用?
- node.js - 环回框架中远程方法的默认值
- ruby - 迭代哈希数组以根据另一个哈希键对一个哈希值的值求和
- php - 带有服务器端处理的 jquery 数据表生成并捕获验证和其他错误