龙空技术网

5Python批量处理Excel行/列/单元格

均衡永没 174

前言:

现在各位老铁们对“python电子表格加一行合并居中标题”大约比较关切,小伙伴们都需要剖析一些“python电子表格加一行合并居中标题”的相关资讯。那么小编在网上收集了一些有关“python电子表格加一行合并居中标题””的相关内容,希望咱们能喜欢,各位老铁们快快来学习一下吧!

# 案例01 精确调整多个工作簿的行高和列宽import os  # 导入os模块import xlwings as xw  # 导入xlwings模块file_path = 'E:\\Python案例操作\\销售表'  # 给出工作簿所在的文件夹路径file_list = os.listdir(file_path)  # 列出文件夹下所有文件和子文件夹的名称app = xw.App(visible = False, add_book = False)  # 启动Excel程序for i in file_list:  # 遍历文件夹路径下的所有文件名    if i.startswith('~$'):  # 判断是否有文件名以“~$”开头的文件        continue  # 如果有,则跳过这种类型的文件    file_paths = os.path.join(file_path, i)  # 将文件夹路径和文件名拼接成工作簿的完整路径    workbook = app.books.open(file_paths)  # 打开要调整行高和列宽的工作簿    for j in workbook.sheets:  # 遍历当前工作簿中的工作表        value = j.range('A1').expand('table')  # 在工作表中选择要调整行高和列宽的单元格区域        value.column_width = 12  # 将列宽调整为可容纳12个字符的宽度        value.row_height = 20  # 将行高调整为20磅    workbook.save()  # 保存当前工作簿    workbook.close()  # 关闭当前工作簿app.quit()  # 退出Excel程序

In [2]:

# 案例01-1 精确调整一个工作簿中所有工作表的行高和列宽import xlwings as xwapp = xw.App(visible = False, add_book = False)workbook = app.books.open('E:\Python案例操作\销售表\\采购表.xlsx')for i in workbook.sheets:    value = i.range('A1').expand('table')    value.column_width = 12    value.row_height = 20workbook.save()app.quit()

In [3]:

# 案例02 批量更改多个工作簿的数据格式import os  # 导入os模块import xlwings as xw  # 导入xlwings模块file_path = 'E:\\Python案例操作\\采购表'  # 给出工作簿所在的文件夹路径file_list = os.listdir(file_path)  # 列出文件夹下所有文件和子文件夹的名称app = xw.App(visible = False, add_book = False)  # 启动Excel程序for i in file_list:  # 遍历文件夹路径下的所有文件名    if i.startswith('~$'):  # 判断是否有文件名以“~$”开头的文件        continue  # 如果有,则跳过这种类型的文件    file_paths = os.path.join(file_path, i)  # 将文件夹路径和文件名拼接成工作簿的完整路径    workbook = app.books.open(file_paths)  # 打开要设置数据格式的工作簿    for j in workbook.sheets:  # 遍历当前工作簿中的工作表        row_num = j['A1'].current_region.last_cell.row  # 获取工作表中数据区域最后一行的行号        j['A2:A{}'.format(row_num)].number_format = 'm/d'  # 将A列的“采购日期”数据全部更改为“月/日”格式        j['D2:D{}'.format(row_num)].number_format = '¥#,##0.00'  # 将D列的“采购金额”数据全部更改为带货币符号和两位小数的格式    workbook.save()  # 保存工作簿    workbook.close()  # 关闭工作簿app.quit()  # 退出Excel程序

In [8]:

# 案例02-1 批量更改多个工作簿的外观格式import osimport xlwings as xwfile_path = 'E:\\Python案例操作\\销售表'file_list = os.listdir(file_path)app = xw.App(visible = False, add_book = False)for i in file_list:    if i.startswith('~$'):        continue    file_paths = os.path.join(file_path, i)    workbook = app.books.open(file_paths)    for j in workbook.sheets:         j['A1:H1'].api.Font.Name = '宋体'  # 设置工作表标题行的字体为“宋体”        j['A1:H1'].api.Font.Size = 10  # 设置工作表标题行的字号为“10”磅        j['A1:H1'].api.Font.Bold = True  # 加粗工作表标题行        j['A1:H1'].api.Font.Color = xw.utils.rgb_to_int((255,255,255))  # 设置工作表标题行的字体颜色为“白色”        j['A1:H1'].color = xw.utils.rgb_to_int((0,0,0))  # 设置工作表标题行的单元格填充颜色为“黑色”        j['A1:H1'].api.HorizontalAlignment = xw.constants.HAlign.xlHAlignCenter  # 设置工作表标题行的水平对齐方式为“居中”        j['A1:H1'].api.VerticalAlignment = xw.constants.VAlign.xlVAlignCenter  # 设置工作表标题行的垂直对齐方式为“居中”        j['A2'].expand('table').api.Font.Name = '宋体'  # 设置工作表的正文字体为“宋体”        j['A2'].expand('table').api.Font.Size = 10  # 设置工作表的正文字号为“10”磅        j['A2'].expand('table').api.HorizontalAlignment = xw.constants.HAlign.xlHAlignLeft  # 设置工作表正文的水平对齐方式为“靠左”        j['A2'].expand('table').api.VerticalAlignment = xw.constants.VAlign.xlVAlignCenter  # 设置工作表正文的垂直对齐方式为“居中”        for cell in j['A1'].expand('table'):  # 从单元格A1开始为工作表添加合适粗细的边框            for b in range(7,12):                cell.api.Borders(b).LineStyle = 1  # 设置单元格的边框线型                cell.api.Borders(b).Weight = 2  # 设置单元格的边框粗细    workbook.save()    workbook.close()app.quit()

In [10]:

# 案例03 批量替换多个工作簿的行数据import os  # 导入os模块import xlwings as xw   # 导入xlwings模块file_path = 'E:\\Python案例操作\\分部信息'  # 给出要批量处理的工作簿所在的文件夹路径file_list = os.listdir(file_path)  #  列出文件夹下所有文件和子文件夹的名称app = xw.App(visible = False, add_book = False)  #  启动Excel程序for i in file_list:    if i.startswith('~$'):  #  判断是否有文件名以“~$”开头的文件        continue  #  如果有,则跳过这种类型的文件    file_paths = os.path.join(file_path, i)  # 将文件夹路径和文件名拼接成工作簿的完整路径    workbook = app.books.open(file_paths)  # 打开要处理的工作簿    for j in workbook.sheets:  # 遍历工作簿中的工作表        value = j['A2'].expand('table').value  # 读取工作表数据        for index, val in enumerate(value):  # 按行遍历工作表数据            if val == ['背包', 16, 65]:  # 判断行数据是否为“背包”、16、65                value[index] = ['双肩包', 36, 79]  # 如果是,则将该行数据替换为新的数据        j['A2'].expand('table').value = value  # 将完成替换的数据写入工作表    workbook.save()  # 保存工作簿    workbook.close()  # 关闭工作簿app.quit()  # 退出Excel程序

In [11]:

# 案例03-1 批量替换多个工作簿中的单元格数据import osimport xlwings as xwfile_path = 'E:\\Python案例操作\\分部信息'file_list = os.listdir(file_path)app = xw.App(visible = False, add_book = False)for i in file_list:    if i.startswith('~$'):        continue    file_paths = os.path.join(file_path, i)    workbook = app.books.open(file_paths)    for j in workbook.sheets:         value = j['A2'].expand('table').value  # 读取工作表数据        for index, val in enumerate(value):  # 按行遍历工作表数据            if val[0] == '单肩包':  # 判断当前行第1个单元格的数据是否为“背包”                val[0] = '双肩包'  # 将第1个单元格的数据修改为“双肩包”                value[index] = val  # 替换整行数据        j['A2'].expand('table').value = value  # 将完成替换的数据写入工作表    workbook.save()    workbook.close()app.quit()

In [16]:

# 案例03-2 批量修改多个工作簿中指定工作表的列数据import osimport xlwings as xwfile_path = 'E:\\Python案例操作\\分部信息'file_list = os.listdir(file_path)app = xw.App(visible = False, add_book = False)for i in file_list:    if i.startswith('~$'):        continue    file_paths = os.path.join(file_path, i)    workbook = app.books.open(file_paths)    worksheet = workbook.sheets['产品分类表']  #指定要修改的工作表    value = worksheet['A2'].expand('table').value    for index, val in enumerate(value):         val[2] = val[2] * (1 + 0.05)  # 修改第3个单元格的数据,这里就是指将销售价上调5%    value[index] = val  # 替换整行数据    worksheet['A2'].expand('table').value = value  # 将完成替换的数据写入工作表    workbook.save()    workbook.close()app.quit()

In [17]:

# 案例04 批量提取一个工作簿中所有工作表的特定数据import xlwings as xw  # 导入xlwings模块import pandas as pd  # 导入pandas模块app = xw.App(visible = False, add_book = False)  # 启动Excel程序workbook = app.books.open('E:\\Python案例操作\\分部信息\\采购表.xlsx')  # 打开工作簿worksheet = workbook.sheets  # 列出工作簿中的所有工作表data = []  # 创建一个空列表用于存放数据for i in worksheet:  # 遍历工作簿中的工作表    values = i.range('A1').expand().options(pd.DataFrame).value  # 读取当前工作表的所有数据    filtered = values[values['采购物品'] == '复印纸']  # 提取“采购物品”为“复印纸”的行数据    if not filtered.empty:  # 判断提取出的行数据是否为空        data.append(filtered)  # 将提取出的行数据追加到列表中new_workbook = xw.books.add()  # 新建工作簿new_worksheet = new_workbook.sheets.add('复印纸')  # 在新工作簿中新增一个名为“复印纸”的工作表new_worksheet.range('A1').value = pd.concat(data, ignore_index = False)  # 将提取出的行数据写入工作表“复印纸”中new_workbook.save('E:\\Python案例操作\\分部信息\\复印纸.xlsx')  # 保存新工作簿并命名为“复印纸.xlsx”workbook.close()  # 关闭工作簿app.quit()  # 退出Excel程序

In [18]:

# 案例04-1 批量提取一个工作簿中所有工作表的列数据import xlwings as xwimport pandas as pdapp = xw.App(visible = False, add_book = False) workbook = app.books.open('E:\\Python案例操作\\分部信息\\采购表.xlsx')worksheet = workbook.sheets column = ['采购日期', '采购金额']  # 指定要提取的列的列标题data = []for i in worksheet:    values = i.range('A1').expand().options(pd.DataFrame, index = False).value    filtered = values[column]  # 根据前面指定的列标题提取数据    data.append(filtered)new_workbook = xw.books.add()new_worksheet = new_workbook.sheets.add('提取数据')new_worksheet.range('A1').value = pd.concat(data, ignore_index = False).set_index(column[0])new_workbook.save('E:\\Python案例操作\\分部信息\\提取表.xlsx')workbook.close()app.quit()

In [19]:

# 案例04-2 在多个工作簿的指定工作表中批量追加行数据import osimport xlwings as xwnewContent = [['双肩包55', '64', '110'], ['腰包66', '23', '58']]  # 给出要追加的行数据app = xw.apps.add()file_path = 'E:\\Python案例操作\\分部信息'file_list = os.listdir(file_path)for i in file_list:    if os.path.splitext(i)[1] == '.xlsx':        workbook = app.books.open(file_path + '\\' + i)        worksheet = workbook.sheets['产品分类表']  # 指定要追加行数据的工作表        values = worksheet.range('A1').expand()  # 读取原有数据        number = values.shape[0]  # 获取原有数据的行数        worksheet.range(number + 1, 1).value = newContent  # 将前面指定的行数据追加到原有数据的下方        workbook.save()        workbook.close()app.quit()

In [20]:

# 案例05 对多个工作簿中指定工作表的数据进行分列import os  # 导入os模块import xlwings as xw  # 导入xlwings模块import pandas as pd  # 导入pandas模块file_path = 'E:\\Python案例操作\\产品记录表'  # 给出要处理的工作簿所在的文件夹路径file_list = os.listdir(file_path)  # 列出文件夹下所有文件和子文件夹的名称app = xw.App(visible = False, add_book = False)  # 启动Excel程序for i in file_list:  # 遍历文件夹路径下的所有文件名    if i.startswith('~$'):  # 判断是否有文件名以“~$”开头的文件        continue  # 如果有,则跳过这种类型的文件    file_paths = os.path.join(file_path, i)  # 将文件夹路径和文件名拼接成工作簿的完整路径    workbook = app.books.open(file_paths)  # 打开工作簿    worksheet = workbook.sheets['规格表']  # 指定要处理的工作表    values = worksheet.range('A1').options(pd.DataFrame, header = 1, index = False, expand = 'table').value  # 读取指定工作表中的数据    new_values = values['规格'].str.split('*', expand = True)  # 根据“*”号拆分“规格”列    values['长(mm)'] = new_values[0]  # 将拆分出的第1部分数据添加到标题为“长(mm)”的列中    values['宽(mm)'] = new_values[1]  # 将拆分出的第2部分数据添加到标题为“宽(mm)”的列中    values['高(mm)'] = new_values[2]  # 将拆分出的第3部分数据添加到标题为“高(mm)”的列中    values.drop(columns =['规格'], inplace = True)  # 删除“规格”列    worksheet['A1'].options(index = False).value = values  # 用分列后的数据替换工作表中的原有数据    worksheet.autofit()  # 根据数据内容自动调整工作表的行高和列宽    workbook.save()  # 保存工作簿    workbook.close()  # 关闭工作簿app.quit()  # 退出Excel程序

In [ ]:

# 案例05-1 批量合并多个工作簿中指定工作表的列数据import osimport xlwings as xwimport pandas as pdfile_path = 'E:\\Python案例操作\\产品记录表'file_list = os.listdir(file_path)app = xw.App(visible = False, add_book = False)for i in file_list:    if i.startswith('~$'):        continue    file_paths = os.path.join(file_path, i)    workbook = app.books.open(file_paths)    worksheet = workbook.sheets['规格表']     values = worksheet.range('A1').options(pd.DataFrame, header = 1, index = False, expand = 'table').value    values['规格'] = values['长(mm)'].astype('str') + '*' + values['宽 (mm)'].astype('str') + '*' + values['高(mm)'].astype('str')  # 合并列数据    values.drop(columns = ['长(mm)'], inplace = True)  # 删除标题为“长(mm)”的列    values.drop(columns = ['宽(mm)'], inplace = True)  # 删除标题为“宽(mm)”的列    values.drop(columns = ['高(mm)'], inplace = True)  # 删除标题为“高(mm)”的列    worksheet.clear()  # 清除工作表“规格表”中原有的数据    worksheet['A1'].options(index = False).value = values  # 将处理好的数据写入工作表    worksheet.autofit()     workbook.save()    workbook.close()app.quit()

In [ ]:

# 案例05-2 将多个工作簿中指定工作表的列数据拆分为多行import osimport xlwings as xwimport pandas as pdfile_path = 'E:\\Python案例操作\\产品记录表'file_list = os.listdir(file_path)app = xw.App(visible = False, add_book = False)for i in file_list:    if i.startswith('~$'):        continue    file_paths = os.path.join(file_path, i)    workbook = app.books.open(file_paths)    worksheet = workbook.sheets['规格表']     values = worksheet.range('A1').options(pd.DataFrame, header = 1, index = False, expand = 'table').value     new_values = values['规格'].str.split('*', expand=True)     values['长(mm)'] = new_values[0]     values['宽(mm)'] = new_values[1]     values['高(mm)'] = new_values[2]     values.drop(columns =['规格'], inplace = True)     values = values.T  # 转置数据的行列    values.columns = values.iloc[0]     values.index.name = values.iloc[0].index.name     values.drop(values.iloc[0].index.name, inplace = True)     worksheet.clear()    worksheet['A1'].value = values     worksheet.autofit()     workbook.save()     workbook.close() app.quit()

In [21]:

# 案例06 批量提取一个工作簿中所有工作表的唯一值import xlwings as xw  # 导入xlwings模块app = xw.App(visible = True, add_book = False)  # 启动Excel程序workbook = app.books.open('E:\\Python案例操作\\销售表\\上半年销售统计表.xlsx')  # 打开指定工作簿data = []  # 创建一个空列表用于存放书名数据for i, worksheet in enumerate(workbook.sheets):  # 遍历工作簿中的工作表    values = worksheet['A2'].expand('down').value  # 提取当前工作表中的书名数据    data = data + values  # 将提取出的书名数据添加到前面创建的列表中data = list(set(data))  # 对列表中的书名数据进行去重操作data.insert(0, '书名')  # 在去重后的书名数据前添加列标题“书名”new_workbook = xw.books.add()  # 新建工作簿new_worksheet = new_workbook.sheets.add('书名')  # 在新工作簿中新增一个名为“书名”的工作表new_worksheet['A1'].options(transpose = True).value = data  # 将处理好的书名数据写入新工作表new_worksheet.autofit()  # 根据数据内容自动调整新工作表的行高和列宽new_workbook.save('E:\\Python案例操作\\销售表\\书名.xlsx')  # 保存新工作簿并命名为“书名.xlsx”workbook.close()  # 关闭工作簿app.quit()  # 退出Excel程序

In [22]:

# 案例06-1 批量提取一个工作簿中所有工作表的唯一值并汇总import osimport xlwings as xwapp = xw.App(visible = True, add_book = False)wb = app.books.open('E:\\Python案例操作\\销售表\\上半年销售统计表.xlsx')data = list()  # 创建一个空列表用于存放书名和销量的明细数据for i, sht in enumerate(wb.sheets):    values = sht['A2'].expand('table').value    data = data + valuessales = dict()  # 创建一个空字典用于存放书名和销量的汇总数据for i in range(len(data)):  # 按行遍历书名和销量的明细数据    name = data[i][0]  # 获取当前书名    sale = data[i][1]  # 获取当前销量    if name not in sales:  # 判断字典中是否不存在当前书名        sales[name] = sale  # 如果不存在,则在字典中添加此书名的销量记录    else:        sales[name] += sale  # 如果已存在,则计算此书名的累计销量dictlist = list()  for key, value in sales.items():    temp = [key, value]  # 列出书名与对应的累计销量    dictlist.append(temp)dictlist.insert(0,  ['书名', '销量'])  # 在获取的数据前添加列标题“书名”和“销量”new_workbook = xw.books.add()new_worksheet = new_workbook.sheets.add('销售统计')new_worksheet['A1'].value = dictlistnew_worksheet.autofit()new_workbook.save('E:\\Python案例操作\\销售表\\销售统计.xlsx')wb.close()app.quit()

标签: #python电子表格加一行合并居中标题 #python每一行前加行号