欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python之Excel编辑-[小试牛刀]将表格列分拆或合并

程序员文章站 2022-03-11 09:08:28
...

任务1:将表格指定列内容分拆成多列

将如下格式的表格中规格列的内容进行分拆,分解成长,宽,高
Python之Excel编辑-[小试牛刀]将表格列分拆或合并
解决思路:
将数据读取成Pandas的DataFrame形式,然后采用字符串分割的方法对规格列的内容进行分割,并添加长,宽,高三列。

app = xw.App(visible=True, add_book=False)
    file_list = os.listdir(file_path)
    for file in file_list:
        if '~$' in file:
            continue
        if file.split('.')[-1] != 'xlsx':
            continue
        wb = app.books.open(file_path+'\\'+file)
        for sheet in wb.sheets:
            values = sheet.range('A1').expand().options(pd.DataFrame, header = 1, index = False).value
            if values['规格'].empty:
                continue
            newValue = values['规格'].str.split('*', expand = True)
            values['长(mm)'] = newValue[0]
            values['宽(mm)'] = newValue[1]
            values['高(mm)'] = newValue[2]

            values.drop(['规格'],axis=1, inplace = True)
            sheet['A1'].options(index = False).value = values
            print(values)
        wb.save()
        wb.close()
    app.quit()

任务2:将表格多列内容进行合并

将如下格式的表格中的长,宽,高三列进行合并
Python之Excel编辑-[小试牛刀]将表格列分拆或合并
解决思路:
将数据读取成Pandas的DataFrame形式,然后采用字符串合并的方法对长,宽,高三列内容进行字符串合并。

app = xw.App(visible=True, add_book=False)
    file_list = os.listdir(file_path)
    for file in file_list:
        if '~$' in file:
            continue
        if file.split('.')[-1] != 'xlsx':
            continue
        wb = app.books.open(file_path+'\\'+file)
        for sheet in wb.sheets:
            values = sheet.range('A1').expand().options(pd.DataFrame, header=1, index=False).value
            if values['长(mm)'].empty or values['宽(mm)'].empty or values['高(mm)'].empty:
                continue
            values['规格'] = values['长(mm)'].astype('str') + '*' + values['宽(mm)'].astype('str') + '*' + values['高(mm)'].astype('str')
            values.drop(['长(mm)', '宽(mm)', '高(mm)'], axis=1, inplace=True)
            sheet.clear()
            sheet['A1'].options(index=False).value = values
            sheet.autofit()
        wb.save()
        wb.close()
    app.quit()

备注:

  1. 在本任务中,需要用新的数据覆盖原有的数据,在上面使用sheet.clear()来清除原有的数据
  2. Pandas的DataFrame数据是带了序号的,在往excel表格中写入时如果不期望将这个序号写入,则需要使用options(index=False)来指示不带这个序号
  3. 表格中读出的数字不是字符串类型,因此在进行合并时需要进行类型转换,使用astype(‘str’)来指示按照str的类型来进行处理