从工作簿复制列,粘贴到第二个工作簿的第二个 sheet,openPyXL
Copy columns from workbook, paste in second sheet of second workbook, openPyXL
我是 openpyxl 的新手,正在开发一个需要复制和粘贴列的工具。
我有一个包含两组 excel 文件的文件夹。我需要脚本遍历文件,找到名为 "GenLU_xx" 的文件(xx 代表卡尔加里等地的名称)并复制 C 和 E 列(3 和 5)。然后它需要找到名为 "LU_Summary_xx" 的相应文件(xx 再次代表地点名称,例如卡尔加里)并将复制的列粘贴到该工作簿的第二个 sheet。它需要匹配 GenLU_Calgary 和 LUZ_Summary_Calgary 等等所有文件。到目前为止,我还没有弄清楚复制和粘贴列的代码,看似双重迭代让我感到困惑。我的 python 技能是初学者,尽管我通常能够通过查看示例来理解代码。在这种情况下,我在查找示例代码时遇到了一些麻烦。刚开始使用openpyxl。除了与 excel 有关的部分外,我已经完成了脚本。希望有人能帮忙。任何帮助将非常感激!
编辑:也是 Whosebug 的新手,所以不确定为什么我得到 -2。可能是因为缺少任何代码?
这是我目前的情况:
import os, openpyxl, glob
from openpyxl import Workbook
Tables = r"path"
os.chdir(Tables)
for file in glob.glob ("LUZ*"):
wb = openpyxl.load_workbook(file)
ws = wb.active
ws ["G1"] = "GEN_LU_ZN"
wb.create_sheet(title="Sheet2")
wb.save(file)
这只是为每个以 LUZ 开头的文件的 G1 添加一个值,并创建第二个 sheet。
正如我之前提到的,我什至还没有弄清楚复制整个列的值的代码。
我想我可以使用 glob 遍历所有以 "GenLU*" 开头的文件,然后存储第 3 列和第 5 列的值,但我仍然无法弄清楚如何访问列的值。我没有行范围,因为每个工作簿的两列行数不同。
编辑 2:我可以使用以下代码访问特定列的单元格值:
for file in glob.glob ("GenLU_Airdrie*"):
wb = openpyxl.load_workbook(file, use_iterators=True)
ws = wb.active
for row in ws.iter_rows ('C1:C200'):
for cell in row:
values = cell.value
print values
但是我不确定如何处理 'pasting' 其他 sheet 的 A 列中的这些值。
如果您真的想使用列,那么您可以在读取文件时使用 .columns
属性。
要将值从一个 sheet 复制到另一个,您只需分配它们即可。下面将A1的值从一个作品sheet复制到另一个作品
ws1 = wb1.active
ws2 = wb2.active
ws2['A1'] = ws1['A1'].value
要复制 D 列代码可能如下所示
col_d = ws1.columns[3] # 0-indexing
for idx, cell in enumerate(col_d, 1):
ws.cell(row=idx, col=4).value = cell.value #1-indexing
Charlie 的代码对我有用,使用 openpyxl-2.3.3
将 'col=4' 更改为 'column=4'
ws.cell(row=idx, column=4).value = cell.value
我是 openpyxl 的新手,正在开发一个需要复制和粘贴列的工具。
我有一个包含两组 excel 文件的文件夹。我需要脚本遍历文件,找到名为 "GenLU_xx" 的文件(xx 代表卡尔加里等地的名称)并复制 C 和 E 列(3 和 5)。然后它需要找到名为 "LU_Summary_xx" 的相应文件(xx 再次代表地点名称,例如卡尔加里)并将复制的列粘贴到该工作簿的第二个 sheet。它需要匹配 GenLU_Calgary 和 LUZ_Summary_Calgary 等等所有文件。到目前为止,我还没有弄清楚复制和粘贴列的代码,看似双重迭代让我感到困惑。我的 python 技能是初学者,尽管我通常能够通过查看示例来理解代码。在这种情况下,我在查找示例代码时遇到了一些麻烦。刚开始使用openpyxl。除了与 excel 有关的部分外,我已经完成了脚本。希望有人能帮忙。任何帮助将非常感激!
编辑:也是 Whosebug 的新手,所以不确定为什么我得到 -2。可能是因为缺少任何代码?
这是我目前的情况:
import os, openpyxl, glob
from openpyxl import Workbook
Tables = r"path"
os.chdir(Tables)
for file in glob.glob ("LUZ*"):
wb = openpyxl.load_workbook(file)
ws = wb.active
ws ["G1"] = "GEN_LU_ZN"
wb.create_sheet(title="Sheet2")
wb.save(file)
这只是为每个以 LUZ 开头的文件的 G1 添加一个值,并创建第二个 sheet。
正如我之前提到的,我什至还没有弄清楚复制整个列的值的代码。
我想我可以使用 glob 遍历所有以 "GenLU*" 开头的文件,然后存储第 3 列和第 5 列的值,但我仍然无法弄清楚如何访问列的值。我没有行范围,因为每个工作簿的两列行数不同。
编辑 2:我可以使用以下代码访问特定列的单元格值:
for file in glob.glob ("GenLU_Airdrie*"):
wb = openpyxl.load_workbook(file, use_iterators=True)
ws = wb.active
for row in ws.iter_rows ('C1:C200'):
for cell in row:
values = cell.value
print values
但是我不确定如何处理 'pasting' 其他 sheet 的 A 列中的这些值。
如果您真的想使用列,那么您可以在读取文件时使用 .columns
属性。
要将值从一个 sheet 复制到另一个,您只需分配它们即可。下面将A1的值从一个作品sheet复制到另一个作品
ws1 = wb1.active
ws2 = wb2.active
ws2['A1'] = ws1['A1'].value
要复制 D 列代码可能如下所示
col_d = ws1.columns[3] # 0-indexing
for idx, cell in enumerate(col_d, 1):
ws.cell(row=idx, col=4).value = cell.value #1-indexing
Charlie 的代码对我有用,使用 openpyxl-2.3.3
将 'col=4' 更改为 'column=4'ws.cell(row=idx, column=4).value = cell.value