如何用Python仅复制Excel单元格文本并保留目标文件格式?
解决方案
你的代码核心逻辑没问题,但存在两个关键问题:一是工作表名称拼写错误(Vcdorlage应为Vorlage),二是路径转义可能引发异常。另外,我们可以优化代码以更高效地仅复制单元格内容,同时确保目标文件格式完全保留。
修正并优化后的代码
import openpyxl as xl # 使用原始字符串避免路径转义问题,或改用双反斜杠 path1 = r'.\Test_files\monats.xlsx' path2 = r'.\Test_files\Vorlage.xlsx' # 加载源文件时指定data_only=True,读取单元格计算后的值而非公式 wb1 = xl.load_workbook(filename=path1, data_only=True) ws1 = wb1.worksheets[0] wb2 = xl.load_workbook(filename=path2) # 修正工作表名称拼写错误,与目标文件内的工作表名匹配 ws2 = wb2['Vorlage'] # 仅遍历源工作表中有数据的单元格范围,减少不必要的操作 for row in ws1.iter_rows(min_row=1, max_row=ws1.max_row, min_col=1, max_col=ws1.max_column): for cell in row: # 仅赋值单元格内容,不触碰任何格式属性 ws2[cell.coordinate].value = cell.value wb2.save(path2)
关键说明
- 格式保留机制:openpyxl中仅修改单元格的
value属性,不会改变其原有样式(字体、颜色、对齐方式、数字格式等),目标文件的格式会完整保留。 - 路径处理:用原始字符串
r''包裹路径,避免\T这类转义字符引发的路径解析错误。 - 数据读取优化:
data_only=True确保读取的是单元格最终计算结果,而非公式本身,适合纯内容复制场景。 - 范围限定:通过
iter_rows指定有效数据范围,避免遍历大量空单元格,提升代码运行效率。
如果仍出现格式异常,大概率是源单元格数据类型与目标单元格格式的正常兼容表现(比如目标单元格是日期格式,源单元格是数字,赋值后会按日期格式显示),并非格式被修改。
内容的提问来源于stack exchange,提问作者TUX One
相关产品推荐
相关产品推荐

