用Python操作Excel的数据

img


如图,如何使用Python将各个Sheet中的数据复制到指定位置?

使用Xlrd库或者openpyxl库,先按照内容的格式读取数据,然后在按指定格式写入

用pyxls、pyexcel这些库,支持读写excel文件,那么你要做的就是读取,再写入

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7640648
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:【Python数据分析】利用Python删除EXCEL表格中指定的列数据或行数据
  • 除此之外, 这篇博客: 十分钟教会你使用Python操作excel,内附步骤和代码!python其实很简单中的 获取sheet对象 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • sheet = workbook[‘zszxz’]

  • 您还可以看一下 裴帅帅老师的Python操作Excel实战办公自动化课程中的 为什么使用Python处理Excel小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    可以使用xlwt和xlrd等Python模块操作Excel表格中的数据。

    xlwt可用于将数据写入xls文件,而xlrd用于读取xls文件中的数据。同时,xlwt也可以使用write_xls_excel函数将多个sheet合并为一个xls文件。

    下面是一份示例代码,用于将指定xls文件的多个sheet中的数据复制粘贴到单独到工作表中。

    import xlrd
    import xlwt
    
    def copy_sheet_data(src_book, src_sheet_idx, dst_book, dst_sheet_name, copy_row_start, copy_row_end, style_overwrite = True):
        """
        将源工作表中指定行数据复制到目标工作表中
        :param src_book: 源工作簿对象
        :param src_sheet_idx: 源工作表索引
        :param dst_book: 目标工作簿对象
        :param dst_sheet_name: 目标工作表名称
        :param copy_row_start: 复制的开始行
        :param copy_row_end: 复制的结束行
        :param style_overwrite: 是否覆盖样式
        """
        if not isinstance(src_book, xlrd.book.Book):
            raise ValueError('src_book必须是xlrd打开的workbook对象')
    
        if not isinstance(dst_book, xlwt.Workbook):
            raise ValueError('dst_book必须是xlwt打开的workbook对象')
    
        # 获取源工作表
        src_sheet = src_book.sheet_by_index(src_sheet_idx)
    
        dst_sheet = dst_book.add_sheet(dst_sheet_name)
    
        merged_cells = src_sheet.merged_cells
        merge_areas_list = []
        if len(merged_cells) > 0:
            i = -1
            for area in merged_cells:
                if i != area[0]:
                    # 新的范围
                    merge_areas_list.append(area)
                else:
                    merge_areas_list[-1] = (
                        merge_areas_list[-1][0],
                        merge_areas_list[-1][1],
                        max(merge_areas_list[-1][2], area[2]),
                        max(merge_areas_list[-1][3], area[3])
                    )
                i = area[0]
    
        # 复制表头
        for j in range(src_sheet.ncols):
            dst_sheet.write(0, j, src_sheet.cell_value(0, j), \
                             xlwt.Style.easyxf(src_sheet.cell_xf_index(0, j) if style_overwrite else 0))
    
        # 复制数据
        for i in range(copy_row_start, copy_row_end):
            for j in range(src_sheet.ncols):
                dst_sheet.write(i - copy_row_start + 1, j, src_sheet.cell_value(i, j), \
                                 xlwt.Style.easyxf(src_sheet.cell_xf_index(i, j) if style_overwrite else 0))
    
        # 处理合并单元格
        for area in merge_areas_list:
            #assert len(area) == 4
            for row in range(max(area[0], copy_row_start), min(copy_row_end, area[2])+1):
                start_col, end_col = None, None
                for col in range(area[1], area[3]+1):
                    if src_sheet.cell(row, col).value:
                        end_col = col
    
                if end_col is not None:
                    if start_col is None:
                        start_col = area[1]
                    dst_sheet.write_merge(row - copy_row_start + 1, row - copy_row_start + 1, \
                                          start_col, end_col, src_sheet.cell(row, start_col).value, \
                                          xlwt.Style.easyxf(src_sheet.cell_xf_index(row, start_col) if style_overwrite else 0))
    
    
    # 源xls文件路径
    src_xls_file = 'source_xls.xls'
    
    # 目标xls文件路径
    dst_xls_file = 'target_xls.xls'
    
    src_book = xlrd.open_workbook(src_xls_file)
    
    # 循环复制所有sheet
    for i in range(src_book.nsheets):
        src_sheet = src_book.sheet_by_index(i)
    
        # 复制的目标工作表名称
        dst_sheet_name = src_sheet.name
    
        dst_book = xlwt.Workbook()
        copy_sheet_data(src_book, i, dst_book, dst_sheet_name, 1, src_sheet.nrows)
    
        # 将每个sheet的值复制到同一个xls文件的不同sheet中
        with open(dst_xls_file, 'ab') as f:
            dst_book.save(f)