zoukankan      html  css  js  c++  java
  • openpyxl 模块学习记录

    openpyxl 学习记录

    1. 引用openpyxl库

      import openpyxl
      
    2. 对工作薄进行操作,openpyxl支持2007版本以上格式的Excel文件。

      wb = openpyxl.Workbook()							# 创建一个Workbook对象
      openwb = openpyxl.load_workbook('namelist.xlsx')	# 打开已存在的文件进行操作
      wb.save('test.xlsx')								# 将wb对象保存为文件
      wb.close()											# 关闭文件
      
    3. 对工作表进行操作

      # 创建一个名为“工作表1”的工作表,index的数值代表位置
      my_sheet = wb.create_sheet(index=0,title='工作表1')
      
      # 获取该工作薄中所有工作表名称列表,返回值为字符串列表
      sheet_names = wb.sheetnames
      
      # 获取活动工作表
      active_sheet = openwb.active
      
      # 获取指定名称工作表为活动工作表
      active_sheet = openwb['sheet1']
      
      # 设置活动工作表颜色
      active_sheet.sheet_properties.tabColor='205EB2'
      
    4. 遍历工作表

      # 方法一:利用工作表名称列表进行遍历
      for sheet_name in sheet_names:
          active_sheet = openwb[sheet_name]
          
      # 方法二:直接遍历所有工作表对象
      for active_sheet in openwb.worksheets:
          print(active_sheet.maxrow)
      
    5. 多单元格操作

      # 通过切片
      >>> cell_range = ws['A1':'C2']
      # 通过行(列)
      >>> colC = ws['C']
      >>> colC = ws['A'][3]  # A3单元格
      >>> col_range = ws['C:D']
      >>> row10 = ws[10]
      >>> row_range = ws[5:10]
      # 通过指定范围(行 → 行)
      >>> for row in  ws.iter_rows(min_row=1, max_col=3, max_row=2):
      ...    for cell in  row:
      ...        print(cell)
      <Cell Sheet1.A1>
      <Cell Sheet1.B1>
      <Cell Sheet1.C1>
      <Cell Sheet1.A2>
      <Cell Sheet1.B2>
      <Cell Sheet1.C2> 
      # 通过指定范围(列 → 列) 读取第34列从第8行开始到最大行-1位置的数据,只取值。
      >>> for col in ws.iter_cols(min_col=34, max_col=34, min_row=8, max_row=mrow - 1, values_only=True):
      ...    for cell in col:
      ...        print(cell)
      公共基础课
      5 / 5
      5 / 5
      5 / 5
      5 / 5
      5 / 5
      5 / 5
      ……
      # 遍历所有 方法一
      >>> ws = wb.active
      >>> ws['C9'] = 'hello world'
      >>> tuple(ws.rows)
      ((<Cell Sheet.A1>, <Cell Sheet.B1>, <Cell Sheet.C1>),
      (<Cell Sheet.A2>, <Cell Sheet.B2>, <Cell Sheet.C2>),
      ...
      (<Cell Sheet.A8>, <Cell Sheet.B8>, <Cell Sheet.C8>),
      (<Cell Sheet.A9>, <Cell Sheet.B9>, <Cell Sheet.C9>))
      # 遍历所有 方法二
      >>> tuple(ws.columns)
      ((<Cell Sheet.A1>,
      <Cell Sheet.A2>,
      <Cell Sheet.A3>,
      ...
      <Cell Sheet.B7>,
      <Cell Sheet.B8>,
      <Cell Sheet.B9>),
      (<Cell Sheet.C1>,
      ...
      <Cell Sheet.C8>,
      <Cell Sheet.C9>))
      
    6. 插入和删除行或列,ws.insert和ws.delete,在第几行位置开始操作,插入或删除指定数目的行或列,不指明默认为1行或1列。

      注意:序号从1开始计数,并且插入或删除并不会像在Excel中一样复制格式,真实操作方式是移动。

      ws.insert_rows(第几行前插入,[插入几行]):

      ws.insert_cols(第几列前插入,[插入几列]):

      ws.delete_rows(从第几行开始,[删除几行]):

      ws.delete_cols(从第几列开始,[删除几列]):

      from openpyxl import load_workbook
      
      wb = load_workbook('inster.xlsx')
      ws = wb.active
      # 从第20行开始到第4行,每行前面插入4个空行。
      for row in range(20, 3, -1):
          ws.insert_rows(row, 4)		# 插入行ws.insert_rows(在当前行前面插入,插入4行)
      ws.delete_cols(2,3)				# 删除列ws.delete.cols(从第2列开始,删除3列)    
      wb.save('inserted.xlsx')
      
    7. 对单元格进行操作

      # 选择Cell(B4)对象,并赋值,row参数为行,column参数为列,值为int类型数值
      dirCell=active_sheet.cell(row=4,column=2)
      dirCell.value='找到这个单元格了'
      
      # 直接给A1、A2单元格赋值,获取本工作表的行列数
      secondSheet['A1'].value='这个表的行数:'+str(secondSheet.max_row)
      secondSheet['A2'].value='这个表的列数:'+str(secondSheet.max_column)
      
      # 使用行号、列号方式获取指定单元格。这种方式行序号为1开始,列序号为0开始。
      print(ws[1][0].value)	#输出第1行第1列单元格的值,
      
    8. 工作表行列转换:根据数字得到字母、根据字母得到数字

      from openpyxl.utils import get_column_letter, column_index_from_string
      
      # 根据列的数字返回字母
      print(get_column_letter(2))  # B
      # 根据字母返回列的数字
      print(column_index_from_string('D'))  # 4
      
    9. 使用Excel自带函数

      from openpyxl import Workbook
      wb = Workbook()
      ws = wb.create_sheet('index', 0)
      ws['A1'] = 3
      ws['A2'] = 4
      ws['A3'] = '=sum(A1:A2)'
      wb.save('s.xlsx')
      
      结果 A3 单元格处为 7
      
      注意:获取函数的值时的坑(只能通过手动保存的方式来修改文件后才能获取到通过函数计算出来的值)
      from openpyxl import load_workbook
      wb = load_workbook('s.xlsx', data_only=True)  # 注意获取函数计算出来的值时要加上data_only=True
      ws = wb['index']
      print(ws['A3'].value)  # 7   若不手动保存,则获取的是 =sum(A1:A2)
      
    10. 对Excel工作表单元格进行样式设置

    # Font:字体字号颜色;PatternFill:单元格填充。
    from openpyxl.styles import Font, PatternFill
    def fail_style(cell):
        bold_red = Font(bold=True, color='FF0000')
        pink_fill = PatternFill('solid', fgColor='F2DCDB')
        cell.font = bold_red
        cell.fill = pink_fill
    fail_style(ws['C'])			# 将C列设置为fail_style样式
    
  • 相关阅读:
    5 Things Every Manager Should Know about Microsoft SharePoint 关于微软SharePoint每个经理应该知道的五件事
    Microsoft SharePoint 2010, is it a true Document Management System? 微软SharePoint 2010,它是真正的文档管理系统吗?
    You think you use SharePoint but you really don't 你认为你使用了SharePoint,但是实际上不是
    Introducing Document Management in SharePoint 2010 介绍SharePoint 2010中的文档管理
    Creating Your Own Document Management System With SharePoint 使用SharePoint创建你自己的文档管理系统
    MVP模式介绍
    权重初始化的选择
    机器学习中线性模型和非线性的区别
    神经网络激励函数的作用是什么
    深度学习中,交叉熵损失函数为什么优于均方差损失函数
  • 原文地址:https://www.cnblogs.com/amwkvi/p/14069453.html
Copyright © 2011-2022 走看看