Python操作Excel教程(图文教程,超详细)Python xlwings模块详解,

慈云数据 1年前 (2024-03-19) 技术支持 93 0

「作者主页」:士别三日wyx

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者

「推荐专栏」:小白零基础《Python入门到精通》

在这里插入图片描述

xlwings模块详解

  • 1、快速入门
  • 1、打开Excel
  • 2、创建工作簿
    • 2.1、使用工作簿
    • 2.2、操作工作簿
    • 3、创建工作表
      • 3.1、使用工作表
      • 3.2、操作工作表
      • 3.3、删除工作表
      • 4、读写单元格
        • 4.1、选择单元格
        • 4.2、写入数据到单元格
        • 4.3、读取单元格的数据
        • 4.4、设置单元格样式
        • 4.4、删除单元格

          xlwings 是用来「处理Excel」的Python第三方库,开源免费,一直在更新。

          使用前需要「下载」、安装 xlwings 模块

          【File】-【Settings】-【Progect:xxx】-【Python Interpreter】

          在这里插入图片描述

          然后「导入模块」,as是别名,方便后续调用

          import xlwings as xw
          

          在 xlwings 中

          • App:表示Excel程序
          • Book:表示工作簿
          • Sheet:表示工作表
          • Range:表示单元格

            1、快速入门

            import xlwings as xw
            # 1、打开Excel程序,处理过程可观
            with xw.App(visible=True) as app:
                # 2、选择使用的工作簿
                book = app.books[0]
                # 3、选择使用的工作表
                sheet = book.sheets[0]
                # 4、选择单元格范围,设置背景颜色
                sheet.range('A1').color = '#ff0000'
                # 向单元格写入数据
                sheet.range('A2').value = 'hello Excel'
                # 5、保存工作簿
                book.save('myExcel.xlsx')
            

            预期:文件保存到当前目录,打开后看到我们写入的内容。

            1、打开Excel

            使用 App() 打开Excel程序,一个App对应一个Excel实例。

            为了防止僵尸进程,建议这样「启动」Excel( with 搭建上下文,会「自动释放」资源,无需手动close)

            import xlwings as xw
            with xw.App(visible=True) as app:
                print(app)
            

            输出:

             
            

            提示:

            • 桌面下方的任务栏会有Excel的程序一闪而过,这是因为 with 会自动关闭Excel;
            • 如果 visible=False,则任务栏看不到变化(程序不可见);
            • 如果直接用 xw.App() 的方式打开Excel,则会在桌面打开Excel,并且不会关闭。
            • app.activate():活动Excel,将Excel程序放到桌面最前方。focus=True表示将鼠标焦点移动到Excel。

              实例

              import xlwings as xw
              with xw.App(visible=True) as app:
                  app.activate(True)
              

              预期:Excel显示在桌面最前方(一闪而过)。

              2、创建工作簿

              在Excel中,「新建」一个工作簿,并返回工作簿对象Book,有三种创建方式:

              • xw.Book()
              • xw.books.add()
              • app.books.add()

                实例

                import xlwings as xw
                with xw.App(visible=True) as app:
                    print('自带一个工作簿:', app.books[0])
                    book2 = xw.Book()
                    print(book2)
                    book3 = xw.books.add()
                    print(book3)
                    book4 = app.books.add()
                    print(book4)
                    print(app.books)
                

                输出:

                自带一个工作簿: 
                
                
                
                Books([, , , ...])
                

                2.1、使用工作簿

                1)「使用」指定的工作簿,根据工作簿的名字/索引/序号,并返回工作簿对象,有五种方式。

                注意:() 根据 序号 选择,从1开始;[]根据 索引 选择,从0开始。

                • app.books (序号)
                • app.books [索引]
                • xw.books [索引]
                • xw.books (序号)
                • xw.Book (名字)

                  实例

                  import xlwings as xw
                  with xw.App(visible=True) as app:
                      print(app.books)
                      print(app.books(1))
                      print(app.books[0])
                      print(xw.books[0])
                      print(xw.books(1))
                      print(xw.Book('工作簿1'))
                  

                  输出:

                  Books([])
                  
                  
                  
                  
                  
                  

                  2)使用指定的工作簿,根据「文件路径」(用r字符串包裹路径),有三种方式

                  • xw.Book( 路径 )
                  • xw.books.open( 路径 )
                  • app.books.open( 路径 )

                    实例

                    import xlwings as xw
                    with xw.App(visible=True) as app:
                        print(xw.Book(r'E:\test.xlsx'))
                        print(xw.books.open(r'E:\test.xlsx'))
                        print(app.books.open(r'E:\test.xlsx'))
                        print(app.books)
                    

                    输出:

                    
                    
                    Books([, ])
                    

                    2.2、操作工作簿

                    • book.name:返回工作簿的名字
                    • book.sheets:返回工作簿的所有sheet页(列表)
                    • book.app:返回工作簿所在的App对象(Excel程序)

                      实例

                      import xlwings as xw
                      with xw.App(visible=True) as app:
                          book = app.books[0]
                          print(book.name)
                          print(book.sheets)
                          print(book.app, app)
                          print(book.selection)
                      

                      输出:

                      工作簿1
                      Sheets([])
                       
                      
                      

                      • book.save():保存工作簿,如果不指定路径,则保存到当前路径。

                        语法

                        book.save( path, password )
                        

                        参数

                        • path :(可选)文件保存路径
                        • password :(可选)文件打开密码

                          实例

                          import xlwings as xw
                          with xw.App(visible=True) as app:
                              book = app.books[0]
                              book.save(r'E:/test1.xlsx', 123456)
                          

                          预期:文件保存到E盘,打开需要「输入密码」。

                          • book.to_pdf():导出PDF,如果不指定路径,则保存到当前路径。

                            注意:Excel必须有「内容」,才能导出PDF,否则会报错

                            语法

                            book.to_pdf( path, include, exclude, show )
                            

                            参数

                            • path :(可选)PDF文件保存路径,默认当前目录
                            • include :(可选)包含哪些工作表,单个工作表名 或 多个工作表名的列表
                            • exclude :(可选)不包含哪些工作表,单个工作表名 或 多个工作表名的列表
                            • show :(可选)创建后使用默认应用打开PDF,默认值False

                              实例

                              import xlwings as xw
                              with xw.App(visible=True) as app:
                                  book = app.books[0]
                                  book.sheets[0]['A1'].value = 'text'
                                  book.to_pdf(show=True)
                              

                              预期:PDF文件保存到当前目录下,并「自动打开」。

                              3、创建工作表

                              使用工作簿对象 Book ,「创建」工作表,返回工作表对象 Sheet ,一个 Sheet 对应一个工作表,有两种创建方式:

                              • app.books[0].sheets.add()
                              • xw.books[0].sheets.add()

                                创建工作表时,可以「设置表名」。参数2中, after 表示插入到某个表后面, before 表示插入到某个表前面。

                                • app.books[0].sheets.add('name1')
                                • xw.books[0].sheets.add('name2')

                                  实例

                                  import xlwings as xw
                                  with xw.App(visible=True) as app:
                                      app.books[0].sheets.add('name1')
                                      xw.books[0].sheets.add()
                                      print('所有工作表:', app.books[0].sheets)
                                  

                                  输出:

                                  所有工作表: Sheets([, , ])
                                  

                                  3.1、使用工作表

                                  通过工作簿对象 Book ,「使用」指定的工作表,根据工作表的名字/索引/序号,并返回工作表对象 Sheet ,有六种方式:

                                  • app.books[0].sheets[0]
                                  • app.books[0].sheets(1)
                                  • app.books[0].sheets['Sheet1']
                                  • xw.books[0].sheets[0]
                                  • xw.books[0].sheets(1)
                                  • xw.books[0].sheets['Sheet1']

                                    注意:() 根据 序号 选择,从1开始;[]根据 索引 选择,从0开始。

                                    实例

                                    import xlwings as xw
                                    with xw.App(visible=True) as app:
                                        book = app.books[0]
                                        print(book.sheets[0])
                                        print(book.sheets(1))
                                        print(book.sheets['Sheet1'])
                                        wb = xw.books[0]
                                        print(wb.sheets[0])
                                        print(wb.sheets(1))
                                        print(wb.sheets['Sheet1'])
                                        print('工作表列表:', book.sheets)
                                    

                                    输出:

                                    
                                    
                                    
                                    
                                    
                                    工作表列表: Sheets([])
                                    

                                    3.2、操作工作表

                                    1)工作表名

                                    • app.books[0].sheets[0].name = 'sheetName':设置工作表名
                                    • app.books[0].sheets[0].name:获取工作表名
                                    • app.books[0].sheets[0].book:获取工作表所属的工作簿
                                    • app.books[0].sheets[0].index:获取工作表的索引(从1开始)

                                      2)行高列宽

                                      • app.books[0].sheets[0].autofit():自适应行高列宽
                                      • app.books[0].sheets[0].autofit(axis='rows'):自适应行高
                                      • app.books[0].sheets[0].autofit(axis='columns'):自适应列宽

                                        3)导出工作表(不指定路径,默认保存到当前目录)

                                        • app.books[0].sheets[0].to_html():导出 HTML
                                        • app.books[0].sheets[0].to_pdf():导出 PDF(内容不能为空)

                                          4)复制工作表

                                          • app.books[0].sheets('sheetName').copy():复制工作表为副本
                                          • name:(可选,str)副本的名字
                                          • before:(可选,sheet对象)复制到哪个工作表之前
                                          • after:(可选,sheet对象)复制到哪个工作表之后

                                            3.3、删除工作表

                                            • app.books[0].sheets[0].clear_contents():删除文本但保留样式
                                            • app.books[0].sheets[0].clear_formats():删除样式但保留文本
                                            • app.books[0].sheets[0].clear():删除文本和样式
                                            • app.books[0].sheets[0].delete():删除工作表

                                              4、读写单元格

                                              单元格不需要创建,选中单元格「范围」,然后读写即可,一个 Range 对应一个单元格。

                                              4.1、选择单元格

                                              按照范围、位置,选择单元格,并返回单元格对象,有多种方式。

                                              1)按照A1表示法(例:选中A1到B3范围的单元格)

                                              • sheet.range('A1')
                                              • sheet.range('A1:B2')

                                                2)按照坐标位置,坐标从左上角起始

                                                • sheet.range(1, 1)
                                                • sheet.range((1, 1), (3, 4))

                                                  3)切片方式选择范围

                                                  • sheet['A1']
                                                  • sheet['A1:B2']
                                                  • sheet[0, 0]
                                                  • sheet[0:1, 0:4]

                                                    4)按照单元格名字

                                                    • sheet.range('a1_name')

                                                      实例

                                                      import xlwings as xw
                                                      with xw.App(visible=True) as app:
                                                          book = app.books[0]
                                                          sheet = book.sheets[0]
                                                          range1 = sheet.range('A1')
                                                          print(range1)
                                                          range2 = sheet.range('A1:B2')
                                                          print(range2)
                                                          range3 = sheet.range(1, 1)
                                                          print(range3)
                                                          range4 = sheet.range((1, 1), (3, 4))
                                                          print(range4)
                                                          print(sheet['A1'])
                                                          print(sheet['A1:B2'])
                                                          print(sheet[0, 0])
                                                          print(sheet[0:1, 0:4])
                                                      

                                                      输出:

                                                      
                                                      
                                                      
                                                      
                                                      
                                                      
                                                      
                                                      

                                                      4.2、写入数据到单元格

                                                      向指定单元格中写入数据,数据可以是单个值、一维列表、二维列表

                                                      • sheet.range('A1').value = 'hello Excel'
                                                      • sheet.range('A2').value = [1, 2, 3]
                                                      • sheet.range('A3').value = [[11, 22], [33, 44]]

                                                        写入效果参见下图

                                                        在这里插入图片描述

                                                        提示:已经有数据的单元格,再次写入,会覆盖原来的数据,常用来修改单元格数据。

                                                        4.3、读取单元格的数据

                                                        按照A1表示法,读取指定范围内单元格的数据,读出的数据可以是单个数据、列表、二维列表形式。

                                                        • sheet.range('A1').value
                                                        • sheet.range('A2:C2').value
                                                        • sheet.range('A3:B4').value

                                                          我们将上一步写入的数据读出来,输出结果如下:

                                                          hello Excel
                                                          [1.0, 2.0, 3.0]
                                                          [[11.0, 22.0], [33.0, 44.0]]
                                                          

                                                          4.4、设置单元格样式

                                                          1)背景颜色

                                                          • sheet.range('A1:A2').color = '#FF0000':按照颜色代码设置颜色
                                                          • sheet.range('B1').color = (255, 255, 0):按照颜色坐标设置颜色
                                                          • sheet.range('A2').color = None:去除背景颜色
                                                          • sheet.range('A2').color is None:判断背景颜色是否为空
                                                          • sheet.range('B1').color:获取背景颜色

                                                            2)行高列宽

                                                            • sheet.range('A1').row_height:获取行高
                                                            • sheet.range('A1').column_width:获取列宽
                                                            • sheet.range('A1').row_height = 20:设置行高
                                                            • sheet.range('A1').column_width = 20:设置列宽
                                                            • sheet.range('A1').rows.autofit():自适应行高
                                                            • sheet.range('A1').columns.autofit():自适应列宽
                                                            • sheet.range('A1').autofit():自适应行高列宽

                                                              3)合并单元格

                                                              • sheet.range('A1:C1').merge():合并单元格
                                                              • sheet.range('B1:C1').unmerge():取消合并
                                                              • sheet.range('A1').merge_area:返回指定单元格的合并范围,如果没有合并,就返回单元格本身
                                                              • sheet.range('A1').merge_cells:判断是否包含合并单元格(True包含;False不包含)

                                                                4)函数公式

                                                                • sheet.range('D1').formula = '=SUM(A1:C1)':设置函数公式
                                                                • sheet.range('D1').formula:获取函数公式

                                                                  5)单元格名字

                                                                  • sheet.range('A1').name = 'a1_name':设置单元格名字
                                                                  • sheet.range('A1').name:获取单元格名字

                                                                    6)复制粘贴

                                                                    • sheet.range('A1').copy():将单元格的内容复制到剪贴板
                                                                    • sheet.range('A2').paste():将剪贴板的内容复制到单元格

                                                                      4.4、删除单元格

                                                                      删除指定范围的单元格、数据、样式

                                                                      • sheet.range('A1').clear_contents():删除数据但保留样式
                                                                      • sheet.range('A2').clear_formats():删除样式但保留数据
                                                                      • sheet.range('A3').clear():删除数据和样式
                                                                      • sheet.range('A1').delete():删除单元格
微信扫一扫加客服

微信扫一扫加客服