如何利用Python批量处理行、列和单元格详解

作者:落春只在无意间 时间:2023-02-05 05:07:35 

目录
  • 精确调整工作表的行高和列宽

  • 批量更改多个工作簿的数据格式

  • 批量更改工作簿的外观格式

    • 设置字体格式

      • 修改字体为宋体

      • 修改字号

      • 字体加粗

      • 字体颜色

      • 单元格填充颜色

      • 对齐方式

      • 添加合适粗细的边框

  • 替换工作簿的行数据

    • 提取指定数据

      • 提取列数据

        • 追加行数据

          • 提取所有工作表的唯一值

            • 总结

              精确调整工作表的行高和列宽

              步骤

              1. 打开工作簿。

              2. 遍历所有工作表

              核心代码


              for i in workbook.sheets:
              value = i.range('A1').expand('table')
              value.column_width = 12
              value.row_height = 20
              workbook.save()

              批量更改多个工作簿的数据格式

              步骤:

              1. 列出文件夹中所有子文件

              2. 遍历打开子文件

              3. 遍历工作表

              4. 获取工作表的最后一行

              5. 将指定列从上到下修改

              核心代码


              #遍历工作表
              for j in workbook.sheets:
              # 获取最后一行
              row_num = j['A1'].current_region.last_cell.row
              # 数据格式修改
              j['A2:A{}'.format(row_num)].number_format = 'm/d'
              j['D2:D{}'.format(row_num)].number_format = '¥#,##0.00'
              workbook.save()
              workbook.close()

              使用xwings模块中的number format属性来设置单元格区域中数据的格式。该属性的取值为一个代表特定格式的字符串,与Excel的“设置单元格格式”

              对话框中“数字”选项卡下设置的格式对应。

              批量更改工作簿的外观格式

              难点应该是外观格式如何更改了吧,这里介绍一些常用的外观格式。

              j 是工作表

              设置字体格式

              修改字体为宋体


              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['A1:H1']变成 j['A2'].expand('table') 就可以了

              添加合适粗细的边框


              # 遍历所有的单元格
              for cell in j['A1'].expand('table'):
              for b in range(7,12):
              # 设置单元格的边框线型
              cell.api.Borders(b).LineStyle = 1
              # 设置单元格的边框粗细
              cell.api.Borders(b).Weight = 2

              替换工作簿的行数据

              核心代码


              # 遍历工作表
              for j in eorkbook.sheets:
              # 获取工作表数据
              value = j['A2'].expand('table').value
              #按行遍历工作表数据
              for index,val in enumerate(value):
              # 判断行数据是否是这个
              if val == ['背包',16,65]:
              # 是的话替换为新数据
              value[index] = ['双肩包',36,79]
              #将完成替换的数据写入工作表中
              j['A2'].expand('table').value = value
              workbook.save()

              enumerate()是Python的内置函数,用于将一个可遍历的数据对象(如列表、元组或字符串等)组合为一个索引序列,可同时得到数据对象的索引及对应的值,一般用在for语句当中。该函数的语法格式和常用参数含义如下。


              enumerate(sequenxe,[start=0])
              # start 是索引的起始位置

              如果是修改指定行什么办呢?因为列是在行的第几个单元格中我们可以按如下代码进行修改


              #按行遍历工作表数据
              for index,val in enumerate(value):
              # 修改第三个单元格,即第index行,第 3列,下标是从0开始的
              val[2] = val[2] + 1
              # 替换整行数据
              value[index] = val

              提取指定数据


              import xlwings as xw
              import pandas as pd
              app = xw.App(visible = False, add_book = False)
              workbook = app.books.open('采购表.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('复印纸.xlsx')
              workbook.close()
              app.quit()

              提取列数据


              import xlwings as xw
              import pandas as pd
              app = xw.App(visible = False, add_book = False)
              workbook = app.books.open('采购表.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('提取表.xlsx')
              workbook.close()
              app.quit()

              追加行数据


              import os
              import xlwings as xw
              newContent = [['双肩包', '64', '110'], ['腰包', '23', '58']]
              app = xw.apps.add()
              file_path = '分部信息'  
              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()

              提取所有工作表的唯一值


              import xlwings as xw
              app = xw.App(visible = True, add_book = False)
              workbook = app.books.open('上半年销售统计表.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('书名.xlsx')
              workbook.close()
              app.quit()

              来源:https://blog.csdn.net/qq_39838607/article/details/120098397

              标签:python,批量,单元格
              0
              投稿

              猜你喜欢

            • 如何使用Python优雅的合并两个字典Dict

              2023-10-12 22:50:36
            • Mysql导入导出工具Mysqldump和Source命令用法详解

              2024-01-23 19:46:52
            • django项目简单调取百度翻译接口的方法

              2023-10-20 18:25:41
            • 聊聊golang的defer的使用

              2023-07-21 13:15:02
            • Python练习-承压计算

              2022-04-19 15:52:21
            • Python中如何实现MOOC扫码登录

              2021-10-08 14:24:50
            • 牛刀小试YUI compressor(YUI安装方法)

              2009-02-12 16:18:00
            • js中更短的 Array 类型转换

              2024-04-28 09:47:22
            • c#使用FreeSql生产环境时自动升级备份数据库

              2024-01-22 15:56:01
            • Python开发桌面小程序功能

              2023-07-01 14:46:59
            • SQL SERVER 2005中的同步复制技术

              2009-01-05 13:44:00
            • 内联格式化模式(line-height原理)

              2008-06-29 14:37:00
            • python Selenium爬取内容并存储至MySQL数据库的实现代码

              2024-01-13 17:51:28
            • 打包FlaskAdmin程序时关于static路径问题的解决

              2023-01-11 20:01:26
            • MySQL时间设置注意事项的深入总结

              2024-01-16 04:39:52
            • 深入分析javascript中console命令

              2024-06-05 09:34:26
            • xorm根据数据库生成go model文件的操作

              2024-01-16 00:29:22
            • js表格排序实例分析(支持int,float,date,string四种数据类型)

              2024-05-03 15:30:24
            • 深入理解Django的信号机制

              2023-01-20 10:19:58
            • python使用celery实现订单超时取消

              2023-09-25 00:30:42
            • asp之家 网络编程 m.aspxhome.com