操作excel数据:一个合并单元格内容的实践

今天我要用python赋能一下自己

背景:最近会用excel处理数据,需要把表格中每一行第三列之后所有列的内容进行合并,然后还要删掉第一列

因为excel玩得不够六,我都是手动合并,做多了感觉很浪费时间,所以就产生了用python来处理的想法

例如,原始表格如下

处理后,希望变成

思路:

1、从原始excel文件中,提取出数据,此时每一行的数据会组合成一个列表,因为需要舍弃第一列,所以在提取数据时,可以直接从第二列开始提取

2、接着上面,去掉第一列数据后,处理后续提取到的每一行数据:首先第1个和第2个数据保持原有形态不动,它俩先组成一个列表data,

然后把第3个及其后面的数据合并为一整个字符串,最后把这个字符串追加到第列表data后面

3、最后把处理后的数据写入一个新的excel文件

 

代码如下:

使用xlrd库读取数据,使用 xlsxwriter库 向一个excel写入数据

# coding: utf-8
"""
author: hmk
detail: 
create_time: 
"""
import xlrd
import xlsxwriter


class AutoOperateExcel:

    @staticmethod
    def get_data_excel(filepath):
        workbook = xlrd.open_workbook(filepath)
        sheet = workbook.sheet_by_index(0)

        data = []
        for i in range(0, sheet.nrows):

            data.append(sheet.row_values(i)[1:])  # 获取excel每一行的数据,然后每一行的数据从第二列开始截取

        # for m in data:
        #     print(m)
        return data

    def write_data_excel(self, filepath1, filepath2):
        workbook = xlsxwriter.Workbook(filepath2)
        sheet = workbook.add_worksheet()

        original_data = self.get_data_excel(filepath1)

        data = []
        for j in original_data:
            data.append(j[0:2] + (''.join(j[2:])).split("不存在的字符"))
        # j[0:2]表示提取列表中的第1个、第2个元素,把它俩形成一个新的列表m
        # ''.join(j[2:])表示把列表中的第3个元素及其之后的元素组合为一整个字符串
        # 使用split()把字符串转换为一个列表n,并且这个列表中只有这一个字符串,注意分隔符要用一个字符串中不存在的元素,不然会把这个字符串分割为多个部分
        # 最后把m和n组合在一起,把它们追加到data中

        for k in range(len(data)):
            # print(len(data[k]))  # 逐行把data中的元素写入excel中的每一行
            for p in range(len(data[k])):
                sheet.write(k, p, data[k][p])  # 把每一行数据分别写入excel对应的坐标

        workbook.close()


if __name__ == '__main__':
    file1 = '/Users/admin/Desktop/aa.xlsx'
    file2 = '/Users/admin/Desktop/bb.xlsx'
    test = AutoOperateExcel()
    # test.get_data_excel(file1)
    test.write_data_excel(file1, file2)

 

posted @ 2022-03-06 12:00  我是冰霜  阅读(690)  评论(0编辑  收藏  举报