Python与Excel——Xlwings基础操作

xlwings的特色
  • xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改
  • 可以和matplotlib以及pandas无缝连接
  • 可以调用Excel文件中VBA写好的程序,也可以让VBA调用用Python写的程序。
  • 开源免费,一直在更新

基本操作

  1. 打开已保存的Excel文档
    # 导入xlwings模块,打开Excel程序,默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭
    import xlwings as xw
    app=xw.App(visible=True,add_book=False)
    app.display_alerts=False
    app.screen_updating=False
    # 文件位置:filepath,打开test文档,然后保存,关闭,结束程序
    filepath=r'g:\Python Scripts\test.xlsx'
    wb=app.books.open(filepath)
    wb.save()
    wb.close()
    app.quit()
  2. 新建Excel文档,命名为test.xlsx,并保存在D盘。
    import xlwings as xw
    app=xw.App(visible=True,add_book=False)
    wb=app.books.add()
    wb.save(r'd:\test.xlsx')
    wb.close()
    app.quit()
  3. 在单元格输入值
    新建test.xlsx,在sheet1的第一个单元格输入 “人生” ,然后保存关闭,退出Excel程序。
    import xlwings as xw
    app=xw.App(visible=True,add_book=False)
    wb=app.books.add()
    # wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值
    wb.sheets['sheet1'].range('A1').value='人生'
    wb.save(r'd:\test.xlsx')
    wb.close()
    app.quit()
    打开已保存的test.xlsx,在sheet2的第二个单元格输入“苦短”,然后保存关闭,退出Excel程序
    import xlwings as xw
    app=xw.App(visible=True,add_book=False)
    wb=app.books.open(r'd:\test.xlsx')
    # wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值
    wb.sheets['sheet1'].range('A1').value='苦短'
    wb.save()
    wb.close()
    app.quit()
    掌握以上代码,已经完全可以把Excel当作一个txt文本进行数据储存了,也可以读取Excel文件的数据,进行计算后,并将结果保存在Excel中。

引用工作簿、工作表和单元格

  1. 引用工作簿,注意工作簿应该首先被打开
    wb.=xw.books['工作簿的名字‘]
  2. 引用活动工作簿
    wb=xw.books.active
  3. 引用工作簿中的sheet
    sht=xw.books['工作簿的名字‘].sheets['sheet的名字']
    # 或者
    wb=xw.books['工作簿的名字']
    sht=wb.sheets[sheet的名字]
  4. 引用活动sheet
    sht=xw.sheets.active
  5. 引用A1单元格
    rng=xw.books['工作簿的名字‘].sheets['sheet的名字']
    # 或者
    sht=xw.books['工作簿的名字‘].sheets['sheet的名字']
    rng=sht.range('A1')
  6. 引用活动sheet上的单元格
    # 注意Range首字母大写
    rng=xw.Range('A1')
    其中需要注意的是单元格的完全引用路径是:
    # 第一个Excel程序的第一个工作薄的第一张sheet的第一个单元格
    xw.apps[0].books[0].sheets[0].range('A1')
    迅速引用单元格的方式是
    sht=xw.books['名字'].sheets['名字']
    # A1单元格
    rng=sht[’A1']
    # A1:B5单元格
    rng=sht['A1:B5']
    # 在第i+1行,第j+1列的单元格
    # B1单元格
    rng=sht[0,1]
    # A1:J10
    rng=sht[:10,:10]

PS: 对于单元格也可以用表示行列的tuple进行引用
# A1单元格的引用
xw.Range(1,1)
#A1:C3单元格的引用
xw.Range((1,1),(3,3))

储存数据

  1. 储存单个值
    # 注意".value“
    sht.range('A1').value=1
  2. 储存列表
    # 将列表[1,2,3]储存在A1:C1中
    sht.range('A1').value=[1,2,3]
    # 将列表[1,2,3]储存在A1:A3中
    sht.range('A1').options(transpose=True).value=[1,2,3]
    # 将2x2表格,即二维数组,储存在A1:B2中,如第一行1,2,第二行3,4
    sht.range('A1').options(expand='table')=[[1,2],[3,4]]

读取数据

  1. 读取单个值
    # 将A1的值,读取到a变量中
    a=sht.range('A1').value
  2. 将值读取到列表中
    #将A1到A2的值,读取到a列表中
    a=sht.range('A1:A2').value
    # 将第一行和第二行的数据按二维数组的方式读取
    a=sht.range('A1:B2').value

常用函数和方法

    1. Book 工作簿常用的api
      wb=xw.books[‘工作簿名称']
      • wb.activate()激活为当前工作簿
      • wb.fullname 返回工作簿的绝对路径
      • wb.name 返回工作簿的名称
      • wb.save(path=None) 保存工作簿,默认路径为工作簿原路径,若未保存则为脚本所在的路径
        -wb. close() 关闭工作簿
        代码例子:
        # 引用Excel程序中,当前的工作簿
        wb=xw.books.acitve
        # 返回工作簿的绝对路径
        x=wb.fullname
        # 返回工作簿的名称
        x=wb.name
        # 保存工作簿,默认路径为工作簿原路径,若未保存则为脚本所在的路径
        x=wb.save(path=None)
        # 关闭工作簿
        x=wb.close()
    2. sheet 常用的api
      # 引用某指定sheet
      sht=xw.books['工作簿名称'].sheets['sheet的名称']
      # 激活sheet为活动工作表
      sht.activate()
      # 清除sheet的内容和格式
      sht.clear()
      # 清除sheet的内容
      sht.contents()
      # 获取sheet的名称
      sht.name
      # 删除sheet
      sht.delete
    3. range常用的api
      # 引用当前活动工作表的单元格
      rng=xw.Range('A1')
      # 加入超链接
      # rng.add_hyperlink(r'www.baidu.com','百度',‘提示:点击即链接到百度')
      # 取得当前range的地址
      rng.address
      rng.get_address()
      # 清除range的内容
      rng.clear_contents()
      # 清除格式和内容
      rng.clear()
      # 取得range的背景色,以元组形式返回RGB值
      rng.color
      # 设置range的颜色
      rng.color=(255,255,255)
      # 清除range的背景色
      rng.color=None
      # 获得range的第一列列标
      rng.column
      # 返回range中单元格的数据
      rng.count
      # 返回current_region
      rng.current_region
      # 返回ctrl + 方向
      rng.end('down')
      # 获取公式或者输入公式
      rng.formula='=SUM(B1:B5)'
      # 数组公式
      rng.formula_array
      # 获得单元格的绝对地址
      rng.get_address(row_absolute=True, column_absolute=True,include_sheetname=False, external=False)
      # 获得列宽
      rng.column_width
      # 返回range的总宽度
      rng.width
      # 获得range的超链接
      rng.hyperlink
      # 获得range中右下角最后一个单元格
      rng.last_cell
      # range平移
      rng.offset(row_offset=0,column_offset=0)
      #range进行resize改变range的大小
      rng.resize(row_size=None,column_size=None)
      # range的第一行行标
      rng.row
      # 行的高度,所有行一样高返回行高,不一样返回None
      rng.row_height
      # 返回range的总高度
      rng.height
      # 返回range的行数和列数
      rng.shape
      # 返回range所在的sheet
      rng.sheet
      #返回range的所有行
      rng.rows
      # range的第一行
      rng.rows[0]
      # range的总行数
      rng.rows.count
      # 返回range的所有列
      rng.columns
      # 返回range的第一列
      rng.columns[0]
      # 返回range的列数
      rng.columns.count
      # 所有range的大小自适应
      rng.autofit()
      # 所有列宽度自适应
      rng.columns.autofit()
      # 所有行宽度自适应
      rng.rows.autofit()
    4. books 工作簿集合的api
      # 新建工作簿
      xw.books.add()
      # 引用当前活动工作簿
      xw.books.active
    5. sheets 工作表的集合
      # 新建工作表
      xw.sheets.add(name=None,before=None,after=None)
      # 引用当前活动sheet
      xw.sheets.active
posted @ 2019-07-30 10:05  sin涛涛  阅读(1381)  评论(0编辑  收藏  举报