大家早上好,本人姓吴,如果觉得文章写得还行的话也可以叫我吴老师。欢迎大家跟我一起走进数据分析的世界,一起学习!

感兴趣的朋友可以关注我的数据分析专栏,里面有许多优质的文章跟大家分享哦。


前段时间在工作的时候遇到了一个问题——如何将数据保存到已存在的一个表格中,因为在之前整理的openpyxl大整理的这篇博文中我已经说过如何将表格中的sheet复制到另一个sheet中,所以这一次我自然而然的也想到了这个方法。

这里我再附上这段代码:

def copy_sheet(wb, wb2):
    sheetnames = wb.sheetnames
    for sheetname in sheetnames:
        print(sheetname)
        sheet = wb[sheetname]
        sheet2 = wb2.create_sheet(sheetname)

        # tab颜色
        sheet2.sheet_properties.tabColor = sheet.sheet_properties.tabColor

        wm = list(sheet.merged_cells)
        if len(wm) > 0:
            for i in range(0, len(wm)):
                cell2 = str(wm[i]).replace('(<CellRange ', '').replace('>,)', '')
                sheet2.merge_cells(cell2)

        for i, row in enumerate(sheet.iter_rows()):
            sheet2.row_dimensions[i+1].height = sheet.row_dimensions[i+1].height
            for j, cell in enumerate(row):
                sheet2.column_dimensions[get_column_letter(j+1)].width = sheet.column_dimensions[get_column_letter(j+1)].width
                sheet2.cell(row=i + 1, column=j + 1, value=cell.value)

                # 设置单元格格式
                source_cell = sheet.cell(i+1, j+1)
                target_cell = sheet2.cell(i+1, j+1)
                target_cell.fill = copy.copy(source_cell.fill)
                if source_cell.has_style:
                    target_cell._style = copy.copy(source_cell._style)
                    target_cell.font = copy.copy(source_cell.font)
                    target_cell.border = copy.copy(source_cell.border)
                    target_cell.fill = copy.copy(source_cell.fill)
                    target_cell.number_format = copy.copy(source_cell.number_format)
                    target_cell.protection = copy.copy(source_cell.protection)
                    target_cell.alignment = copy.copy(source_cell.alignment)

此时我们已经复制好原先表格的数据了,可以再此基本上继续进行操作。

这段代码我个人感觉能够满足绝大情况下的标题中的需求,但是这种方法同时也存在着很大的弊端——用时太长。

如果一个表格中只有一两个sheet,或者,每个sheet的内容很少的话,这个方法用起来自然没什么问题。但问题是在真实的工作场景中,哪里有那么简单的需求(或者说需求那么简单还要你写段代码干嘛),而且复制完之后呢,人们通常都更喜欢用pandas来处理数据,而这里用到的是openpyxl,并不是很讨喜,所以说这个方法只能给大家提供一个思路上的参考,而属实不能推荐给大家解决实际问题。

所以我思考了许久,终于发现了一个很实用的方法。

raw_excel = 'excel_raw.xlsx'
result_excel = 'result.xlsx'
workbook = load_workbook(raw_excel)
writer = pd.ExcelWriter(result_excel , engine='openpyxl')
writer.book = workbook

df_1.to_excel(writer, sheet_name='test1_sheet')
df_2.to_excel(writer, sheet_name='test2_sheet')

writer.save()
writer.close()

这种情况相较于上一种情况而言,真的毫不费时,不过这种方法主要是适用于在结合使用pandas的场景下,而对于我们绝大多数的数据方向的从业者来说,可以说是很适用了。

结束语

看完这篇,还有更多知识点分享给你哦,自己慢慢找哈,就在下面链接。


推荐关注的专栏

👨‍👩‍👦‍👦 机器学习:分享机器学习实战项目和常用模型讲解
👨‍👩‍👦‍👦 数据分析:分享数据分析实战项目和常用技能整理

往期内容回顾

💚 学习Python全套代码【超详细】Python入门、核心语法、数据结构、Python进阶【致那个想学好Python的你】
❤️ 学习pandas全套代码【超详细】数据查看、输入输出、选取、集成、清洗、转换、重塑、数学和统计方法、排序
💙 学习pandas全套代码【超详细】分箱操作、分组聚合、时间序列、数据可视化
💜 学习NumPy全套代码【超详细】基本操作、数据类型、数组运算、复制和试图、索引、切片和迭代、形状操作、通用函数、线性代数


关注我,了解更多相关知识!

CSDN@报告,今天也有好好学习

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐