openpyxl -> 将一片单元格写入新工作簿
openpyxl -> Write a slice of cells to new workbook
我通过从 150-2000 多个源 Excel 文档中截取前 20 行并将它们一起编译在一个文档中来生成大型数据集的摘要表。我希望减少一些编译时间。目前使用 python 的 openpyxl 模块来加载和收集我需要的片段,但我想做的是一次性将一个单元格片段//片段写入一个新的工作簿,而不是遍历每个单元格细胞单独。假设我将切片定义为:
sheetSlice=sh[f"A1:{chr(colcount-1+65)}{min(rowlim,rowcount)}"]
请原谅我设置切片符号的方式的丑陋
有什么方法可以将这个切片//一组单元格一次写入一个新的 openpyxl.Workbook() 对象?我找不到有关此类操作的任何文档。谢谢! xoxo
不,您必须逐个单元地访问它。但是,您可以使用列表推导和 ws.iter_rows()
编写一个函数来整齐地复制和粘贴一系列数据。
import openpyxl as op
def flatten(t):
return [item for sublist in t for item in sublist]
def excel_copy_paste(
ws_copy, ws_paste, row_min, row_max, col_min, col_max, paste_row=1, paste_col=1
):
# Copying your range
copy_range = flatten(
[
[cell.value for cell in row]
for row in ws_copy.iter_rows(
min_row=row_min, max_row=row_max, min_col=col_min, max_col=col_max
)
]
)
paste_range = flatten(
[
[cell for cell in row]
for row in ws_paste.iter_rows(
min_row=paste_row,
max_row=paste_row + row_max - row_min,
min_col=paste_col,
max_col=paste_col + col_max - col_min,
)
]
)
for cell_copy, cell_paste in zip(copy_range, paste_range):
cell_paste.value = cell_copy
# Workbook, worksheets
wb = op.load_workbook("EXAMPLE.xlsx")
ws = wb["All data"]
ws_new = wb["Sheet1"]
# Copy/paste
excel_copy_paste(ws, ws_new, row_min=1, row_max=5, col_min=1, col_max=7)
# Save
wb.save("EXAMPLE.xlsx")
请注意,这不会保留格式。
我通过从 150-2000 多个源 Excel 文档中截取前 20 行并将它们一起编译在一个文档中来生成大型数据集的摘要表。我希望减少一些编译时间。目前使用 python 的 openpyxl 模块来加载和收集我需要的片段,但我想做的是一次性将一个单元格片段//片段写入一个新的工作簿,而不是遍历每个单元格细胞单独。假设我将切片定义为:
sheetSlice=sh[f"A1:{chr(colcount-1+65)}{min(rowlim,rowcount)}"]
请原谅我设置切片符号的方式的丑陋
有什么方法可以将这个切片//一组单元格一次写入一个新的 openpyxl.Workbook() 对象?我找不到有关此类操作的任何文档。谢谢! xoxo
不,您必须逐个单元地访问它。但是,您可以使用列表推导和 ws.iter_rows()
编写一个函数来整齐地复制和粘贴一系列数据。
import openpyxl as op
def flatten(t):
return [item for sublist in t for item in sublist]
def excel_copy_paste(
ws_copy, ws_paste, row_min, row_max, col_min, col_max, paste_row=1, paste_col=1
):
# Copying your range
copy_range = flatten(
[
[cell.value for cell in row]
for row in ws_copy.iter_rows(
min_row=row_min, max_row=row_max, min_col=col_min, max_col=col_max
)
]
)
paste_range = flatten(
[
[cell for cell in row]
for row in ws_paste.iter_rows(
min_row=paste_row,
max_row=paste_row + row_max - row_min,
min_col=paste_col,
max_col=paste_col + col_max - col_min,
)
]
)
for cell_copy, cell_paste in zip(copy_range, paste_range):
cell_paste.value = cell_copy
# Workbook, worksheets
wb = op.load_workbook("EXAMPLE.xlsx")
ws = wb["All data"]
ws_new = wb["Sheet1"]
# Copy/paste
excel_copy_paste(ws, ws_new, row_min=1, row_max=5, col_min=1, col_max=7)
# Save
wb.save("EXAMPLE.xlsx")
请注意,这不会保留格式。