为有中文需求的客户提供多渠道中文技术支持.

Mon Sep 08, 2025 8:51 am

def copy_row_between_excel_files():
try:
# 定义文件路径
source_file = "test_authur.li_2ede10b9-e867-49eb-ac9b-f2c167f9b62b.xlsx"
target_file = "test_authur.li_0682109e-c1f4-4bd8-91ea-78a627c14bb5.xlsx"

# 检查文件是否存在
if not os.path.exists(source_file):
print(f"源文件不存在: {source_file}")
return
if not os.path.exists(target_file):
print(f"目标文件不存在: {target_file}")
return

# 创建工作簿实例
source_workbook = Workbook()
target_workbook = Workbook()

# 加载Excel文件
source_workbook.LoadFromFile(source_file)
target_workbook.LoadFromFile(target_file)

# 获取第一个工作表
source_sheet = source_workbook.Worksheets[0]
target_sheet = target_workbook.Worksheets[0]
# print(source_sheet.HasOleObjects, source_sheet.HasOleObjects)
row = source_sheet.Rows[2]
source_sheet.CopyRow(row, target_sheet, 4, CopyRangeOptions.All)
# source_ole_range = source_sheet.Range["I3"]
# target_ole_range = target_sheet.Range["I4"]
# source_ole_range.Copy(target_ole_range, CopyRangeOptions.All)
# 保存目标文件
target_workbook.SaveToFile("merged.xlsx", ExcelVersion.Version2016)

# 释放资源
source_workbook.Dispose()
target_workbook.Dispose()

print("操作成功完成!已将源文件的第3行插入到目标文件的第3行之后。")

except Exception as e:
print(f"操作过程中发生错误: {traceback.format_exc()}")

copy_row_between_excel_files()
无论是使用Copy()还是CopyRow()方法,都无法正确复制含有ole对象的单元格,请问有没有什么解决办法

authur.li
 
Posts: 4
Joined: Mon Sep 08, 2025 8:45 am

Mon Sep 08, 2025 11:36 am

您好,

感谢您的询问。
Excel中的OLE对象并非存储于单元格内部,而是作为独立对象存在于工作表中。因此,通过复制行无法实现对OLE对象的复制。你可以采用复制sheet表的方式或复制区域的方式来复制含OLE对象的内容。
复制sheet表代码:
Code: Select all
workbook = Workbook()
workbook.LoadFromFile(r"test1.xlsx")
source_sheet = workbook.Worksheets[0]

target_workbook = Workbook()
target_workbook.LoadFromFile(r"test2.xlsx")
newSheet = target_workbook.CreateEmptySheet()
newSheet.CopyFrom(source_sheet)
newSheet.Name = "Copy"

# 自动调整列宽以确保内容显示完整
source_sheet.AllocatedRange.AutoFitColumns()
newSheet.AllocatedRange.AutoFitColumns()

target_workbook.SaveToFile(r"output.xlsx", ExcelVersion.Version2013)

复制区域:
Code: Select all
source_workbook = Workbook()
source_workbook.LoadFromFile(r"test1.xlsx")
target_workbook = Workbook()
target_workbook.LoadFromFile(r"test2.xlsx")

source_sheet = source_workbook.Worksheets[0]
sheetCopy = source_sheet.Range[1, 1, source_sheet.LastDataRow, source_sheet.LastDataColumn]

target_sheet = target_workbook.Worksheets[0]
cells = target_sheet.Range["A4:K35"]

# 复制区域应包括整个ole对象所在区域
source_sheet.Range["A1:K30"].Copy(cells)

target_workbook.SaveToFile(r"output.xlsx",ExcelVersion.Version2013)

如果使用以上代码问题仍然存在,请将您的测试文件发给我们。我们将进行进一步的调查,您可以将文件附在本论坛上耶可以发送至邮箱[email protected]。期待您的反馈。
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 331
Joined: Mon Apr 14, 2025 3:33 am

Wed Sep 24, 2025 10:23 am

你好,感谢您的解答,但是尝试了提供的方法,依然没办法把ole文件对象复制过来,结果截图请见附件

代码如下:
source_workbook.LoadFromFile(source_file)
target_workbook.LoadFromFile(target_file)

source_sheet = source_workbook.Worksheets[0]
sheetCopy = source_sheet.Range[1, 1, source_sheet.LastDataRow, source_sheet.LastDataColumn]
target_sheet = target_workbook.Worksheets[0]
cells = target_sheet.Range["A4:J4"]
source_sheet.Range["A3:J3"].Copy(cells) # sheetCopy.Copy(cells)也不行

authur.li
 
Posts: 4
Joined: Mon Sep 08, 2025 8:45 am

Thu Sep 25, 2025 2:05 am

您好,

感谢您的反馈。
您可以将您的测试文件发给我们吗?我们将进行进一步的调查。您可以将文件附在本论坛上或者发送到邮箱:[email protected]. 感谢您的合作与理解!
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 331
Joined: Mon Apr 14, 2025 3:33 am

Thu Sep 25, 2025 2:25 am

你好,以下是测试文件,感谢支持!

authur.li
 
Posts: 4
Joined: Mon Sep 08, 2025 8:45 am

Thu Sep 25, 2025 3:54 am

您好,

感谢您的分享。
通过分析您的文件,我们发现您的需要复制的Excel中的OLE对象实际位于[I3:I4]区域(如截图所示),而您代码中设置的复制区域仅为[A3:J3],未能完全覆盖OLE对象所在的区域,因此导致复制失败。建议您调整OLE对象的尺寸,使其仅占据I3单元格,或适当扩大复制区域的范围以包含整个OLE对象,以下是调整后的代码供您参考:
Code: Select all
source_workbook = Workbook()
target_workbook = Workbook()

source_workbook.LoadFromFile(r"test_authur.li_2ede10b9-e867-49eb-ac9b-f2c167f9b62b.xlsx")
target_workbook.LoadFromFile(r"test_authur.li_0682109e-c1f4-4bd8-91ea-78a627c14bb5.xlsx")

source_sheet = source_workbook.Worksheets[0]
target_sheet = target_workbook.Worksheets[0]
target_sheet.InsertRow(4)
cells = target_sheet.Range["A4:J5"]
source_sheet.Range["A3:J4"].Copy(cells)

target_workbook.SaveToFile(r"test1.xlsx", ExcelVersion.Version2016)

ole对象.png

期待您的测试反馈。
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 331
Joined: Mon Apr 14, 2025 3:33 am

Thu Sep 25, 2025 6:05 am

你好,为何我看到我看到您给我发的结果文件中的test1.excel中依然没有复制过来的ole对象,详见附件
我当前是想把source_file中的第三行复制到target_file的第四行,包括ole对象
因为我突然访问不了论坛,所以只能以邮件的形式向您反馈,感谢支持

authur.li
 
Posts: 4
Joined: Mon Sep 08, 2025 8:45 am

Thu Sep 25, 2025 6:39 am

您好,

感谢您的反馈。
当我将test1.xlsx文件在Microsoft Excel 2019中打开显示结果正常,效果如以下截图。我注意到您使用的是WPS 查看文件,当我使用wps打开则复现了您遇到的问题,这个问题我已经记录到我们的问题跟踪系统,跟踪编号:SPIREXLS-5970。我们的开发人员将进一步调查并修复他,一旦有任何进展,我们将会第一时间通知您。
需要说明的是,Spire.XLS 功能对标的是Microsoft Excel,而由于WPS 与 Excel 在标准上存在差异,同一份文档在两套软件中可能会出现显示或排版不一致的情况。未来,我们也将持续优化对 WPS 的兼容性。感谢您的耐心与理解。
test_excel.png
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 331
Joined: Mon Apr 14, 2025 3:33 am

Thu Feb 05, 2026 9:25 am

您好,

感谢您的耐心等待。
您之前提出的问题SPIREXLS-5970(复制ole对象在wps中不显示)在最新版本(Spire.Xls.Python 16.2.0 )已经得到了修复,欢迎您更新测试。
网站下载:https://www.e-iceblue.cn/Downloads/Spire-XLS-Python.html
Sincerely,
Talia
E-iceblue support team
User avatar

talia.liu
 
Posts: 331
Joined: Mon Apr 14, 2025 3:33 am

Return to 中文技术支持