操作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)