暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

当你学会用 Python 处理 Excel....

我是赵六 2020-08-31
481

Hello!大家好,我是小赵。


最近经常在朋友圈看到一则广告:让自己学会Python后,成了同事眼中的大神,于是我耐不住好奇心,粗略地学习了用Python处理Excel,现在把它写出来,希望你们喜欢。(此图片仅说明学习动机,无其他任何用途)





读取Excel文档


从工作簿中取得工作表:

openpyxl.load_workbook() 函数接收文件名,返回一个 workbook 数据类型的值。这个workbook对象代表这个Excel文件。

sheetnames 方法可以取得工作薄中所有表名的列表。

通过 worksheet对象[‘表名字符串’] 可以工作薄中的一个指定工作表。

worksheet对象.active 可以取得工作簿的活动表。

    import openpyxl


    # 用openpyxl模块打开Excel文档
    wb = openpyxl.load_workbook('D:\\PythonCodes\\Excel.xlsx')
    print(type(wb)) # <class 'openpyxl.workbook.workbook.Workbook'>




    # 从工作簿中取得工作表
    #
    print(wb.sheetnames) # ['Sheet1', 'Sheet2', 'Sheet3']


    sheet = wb['Sheet1']
    print(sheet) # <Worksheet "Sheet1"> 通过表名取得表格


    anotherSheet = wb.active
    print(anotherSheet)  # <Worksheet "Sheet3"> 活动表,即工作薄在Excel打开时出现的工作表


    从表中取得单元格:

    有了 worksheet 对象之后,就可以按名字访问 Cell 对象。
    value 属性:单元格中保存的值
    row、column 和 coordinate 属性提供保存该单元格的位置信息。
    row:行
    column:列
    coordinate:行和列
    利用 cell() 方法,传入整数作为 row 和 column 关键字参数,也可以得到一个单元格。

      import openpyxl


      # 用openpyxl模块打开Excel文档
      wb = openpyxl.load_workbook('D:\\PythonCodes\\Excel.xlsx')
      print(type(wb)) # <class 'openpyxl.workbook.workbook.Workbook'>




      # 从表中取得单元格
      sheet2 = wb['Sheet3']
      print(sheet2['A1'].value) # 4/5/2015 1:34:02 PM
      c = sheet2['B1']
      print(c.value) # Apples
      print('Row' + str(c.row) + ',Column ' + str(c.column) + ' is ' + c.value)
      # Row1,Column 2 is Apples


      print('Cell ' + c.coordinate + ' is ' + c.value)
      # Cell B1 is Apples




      # cell()方法
      print(sheet2.cell(row=1, column=2).value) # Apples
      for i in range(1, 8, 2):
      print(i, sheet2.cell(row=i, column=2).value)
      '''得到第1,3,5行的第二列
      1 Apples
      3 Pears
      5 Apples
      7 Strawberries
      '''

      列字母和数字之间的转换:

      Excel 表格用字母来指定列,A~Z,在 Z 之后,列开始用两个字母,AA、AB、AC,要想知道 AA 是第几列,就要将列字母转换为列数字;要想知道27列的列字母是什么,就要将列数字转换为列字母。

        首先引入模块:
        from openpyxl.utils import get_column_letter, column_index_from_string
        调用get_column_letter()函数将字母转换成数字。
        调用column_index_from_string()将数字转换成字母。

        程序如下:

          import openpyxl
          from openpyxl.utils import get_column_letter, column_index_from_string


          # 用openpyxl模块打开Excel文档
          wb = openpyxl.load_workbook('D:\\PythonCodes\\Excel.xlsx')


          # 调用函数使列字母和列数字之间相互转换
          print(get_column_letter(27)) # AA
          print(get_column_letter(900)) # AHP
            print(column_index_from_string('AA'))  # 27

          从表中取得行和列:

          可以将 worksheet 对象切片,取得电子表格中的一行、一列或一个矩形区域中的所有 Cell 对象。然后可以循环遍历这个切片中的所有单元格。

            import openpyxl


            # 用openpyxl模块打开Excel文档
            wb = openpyxl.load_workbook('D:\\PythonCodes\\Excel.xlsx')
            print(type(wb)) # <class 'openpyxl.workbook.workbook.Workbook'>


            sheet = wb['Sheet3']
            print(tuple(sheet['A1':'C3']))
            '''运行结果:
            ((<Cell 'Sheet3'.A1>, <Cell 'Sheet3'.B1>, <Cell 'Sheet3'.C1>), (<Cell 'Sheet3'.A2>, <Cell 'Sheet3'.B2>, <Cell 'Sheet3'.C2>), (<Cell 'Sheet3'.A3>, <Cell 'Sheet3'.B3>, <Cell 'Sheet3'.C3>))
            '''


            for rowOfCellObjects in sheet['A1':'C3']:
            for cellObj in rowOfCellObjects:
            print(cellObj.coordinate, cellObj.value)
            print("---END OF ROW---")
            '''运行结果:
            A1 4/5/2015 1:34:02 PM
            B1 Apples
            C1 73
            ---END OF ROW---
            A2 4/5/2015 3:41:23 AM
            B2 Cherries
            C2 85
            ---END OF ROW---
            A3 4/6/2015 12:46:51 PM
            B3 Pears
            C3 14
            ---END OF ROW---
            '''

            在这里我们指定了要从 A1 到 C3 的矩形区域中的Cell对象,为了看得更清楚,在一个元组中列出这些 Cell 对象。这个元组包含三个元组,每个元组代表一行,这三个元组包含指定区域中一行的 Cell 对象。
            要打印这个区域中所有单元格的值,使用两个 for 循环,外层循环遍历每一行,内层循环遍历每一行中的每个单元格。



            写入Excel


            创建并保存Excel文档:

            创建新文件:先调用 openpyxl.Workbook() 函数创建空的 workbook 对象,写入数据后,保存,到指定目录下就可以找到这个新的 Excel 文件。

              import openpyxl


              # 创建空的 workbook 对象
              wb = openpyxl.Workbook()
              print(wb.sheetnames) # ['Sheet']
              sheet = wb.active
              # 写入数据
              sheet['A1'] = 12
              sheet['A2'] = 13
              # 保存文件
              wb.save('D:\\PythonCodes\\example.xlsx')

              修改文件:先调用 openpyxl.load_workbook() 函数读入文件,修改其中某些内容,另存为一个文件,到指定目录下即可找到该文件以及比对修改的信息。

                import openpyxl


                # 读取 Excel 文件
                wb = openpyxl.load_workbook('D:\\PythonCodes\\example.xlsx')
                # 修改该 Excel 文件的工作表名称
                sheet = wb.active
                sheet.title = 'new_Sheet'
                # 将修改保存
                wb.save('D:\\PythonCodes\\example_copy.xlsx')

                创建和删除工作表:

                利用 create_sheet() 方法创建新的工作表,利用 remove(工作表)或 del 工作表名[sheetname] 删除工作表。

                  import openpyxl


                  # 创建新文件
                  # 创建空的 workbook 对象
                  wb = openpyxl.Workbook()
                  print(wb.sheetnames) # ['Sheet']
                  sheet = wb.active
                  # 写入数据
                  sheet['A1'] = 12
                  sheet['A2'] = 13
                  # 创建一个新的工作表
                  wb.create_sheet('Sheet1')
                  print(wb.sheetnames) # ['Sheet', 'Sheet1']
                  # 创建工作表,并利用 index 和 title 关键字参数,指定新工作表的索引和名称
                  wb.create_sheet(index=0, title='First Sheet')
                  wb.create_sheet(index=2, title='Third Sheet')
                  print(wb.sheetnames) # ['First Sheet', 'Sheet', 'Third Sheet', 'Sheet1']


                  # 删除工作表
                  # del wb['Third Sheet'] 或者
                  wb.remove(wb['Third Sheet'])
                  print(wb.sheetnames)  # ['First Sheet', 'Sheet', 'Sheet1']

                  先写到这里吧!虽说只是粗略的学了一点,但是对于某些情况用Python处理Excel的确会方便很多,比如数模题的十万行数据.....


                  持续关注,精彩不驻!

                  你的在看,是我创作的最大动力!

                  文章转载自我是赵六,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论