Traceback (most recent call last): File "D:\PyCharm\pythonProject2\main.py", line 13, in <module> from openpyxl.styles import copy_style ImportError: cannot import name 'copy_style' from 'openpyxl.styles' (D:\python\lib\site-packages\openpyxl\styles\__init__.py)
时间: 2023-07-30 16:08:55 浏览: 269
非常抱歉,我的错误。openpyxl 库中实际上没有名为 `copy_style` 的模块或函数。我之前的回答中的代码有误。
在这种情况下,我们可以使用 `openpyxl.styles` 模块中的 `copy` 方法来复制单元格的样式。以下是修正后的代码示例:
```python
from openpyxl import load_workbook, Workbook
from openpyxl.utils import get_column_letter
from openpyxl.styles import copy
def copy_data(file_path1, sheet1_name, file_path2, sheet2_name):
# 加载工作簿1
wb1 = load_workbook(file_path1)
# 获取 Sheet1
sheet1 = wb1[sheet1_name]
# 创建新的工作簿2
wb2 = Workbook()
# 获取或创建 Sheet2
if sheet2_name in wb2.sheetnames:
sheet2 = wb2[sheet2_name]
else:
sheet2 = wb2.create_sheet(sheet2_name)
# 复制列数据和格式
for col_idx in range(1, sheet1.max_column + 1):
column_has_data = False
for row_idx in range(1, sheet1.max_row + 1):
cell = sheet1.cell(row=row_idx, column=col_idx)
cell_value = cell.value
if cell_value is not None:
column_has_data = True
new_col_idx = len(sheet2.columns) + 1
new_col_letter = get_column_letter(new_col_idx)
sheet2.column_dimensions[new_col_letter].width = sheet1.column_dimensions[get_column_letter(col_idx)].width
sheet2[new_col_letter + str(row_idx)].value = cell_value
copy(source=cell, target=sheet2[new_col_letter + str(row_idx)])
if column_has_data:
sheet2.move_range(f"A{row_idx}:{get_column_letter(new_col_idx)}{row_idx}", rows=-row_idx+1, cols=-new_col_idx+col_idx)
# 保存工作簿2
wb2.save(file_path2)
# 示例用法
copy_data('工作簿1.xlsx', 'Sheet1', '工作簿2.xlsx', 'Sheet2')
```
在这个修改后的示例代码中,我们使用 `openpyxl.styles.copy` 方法来复制单元格的样式。我们将样式从源单元格复制到目标单元格,以保持原来的格式。
请确保你已经安装了 openpyxl 库,并替换示例用法中的文件路径和工作表名称为你实际使用的值。
非常抱歉给你带来的困惑。如果你还有其他问题,请随时提问。
阅读全文