[Python] python办公自动化(Excel)的实例教程

 
3831 4
小明Python 2022-11-19 14:59:58 | 显示全部楼层 |阅读模式
一、读取Excel中的数据

安装

xlrd 只能读取Excel内容

  1. pip install xlrd==1.2.0
复制代码

xlrd库的open_workbook函数打开Excel文件,并且返回一个Book对象,这个对象代表打开的Excel文件。

通过Book对象得到Excel文件的很多信息,比如 表单数量 和 表单名称

  1. import xlrd

  2. book - xlrd.open_workbook('income.xlsx')

  3. print(f"表单数量 {book.nsheets}")
  4. print(f"表单名称 {book.sheet_names()}")
复制代码

要读取某个表单里单元格中的数据,必须要先获取表单(sheet)对象


[size=1em]
  1. # 表单索引从0开始,获取第一个表单对象
  2. book.sheet_by_index( 0 )

  3. # 获取名为2022的表单对象
  4. book.sheet_by_name('2022')

  5. # 获取所有的表单对象,放入一个列表返回
  6. book.sheet()
复制代码

获取了表单对象后,可根据起其属性得到:

表单行数 nrows
列数 ncols
表单名 name
表单索引 number

  1. # 获取了表单对象后,可以使用cell_value方法,读取指定单元格中的文本内容
  2. sheet.cell_value(rowx=0,colx=0)

  3. # 读取指定行所有单元格的内容使用row_values方法,参数为行号,存放在一个列表中返回
  4. sheet.row_value(rowx=0)

  5. # 读取指定列所有单元格的内容使用col_values方法,参数为行号,存放在一个列表中返回
  6. sheet.col_value(colx=0)
复制代码
二、新建Excel,写入数据

创建一个新的Excel并写入数据,需要使用openpyxl库

openpyxl 库可读、写、改,但不支持老版本 Office2003的xls格式

  1. import openpyxl

  2. # 创建一个Excel workbook 对象
  3. book = openpyxl.Workbook()

  4. # 创建时,会自动产生一个sheet,通过active获取
  5. sh = book.active

  6. # 修改当前 sheet 标题为 工资表
  7. sh.title = '工资表'

  8. # 保存文件
  9. book.save('信息.xlsx')

  10. # 增加一个名为 '年龄表' 的sheet,放在最后
  11. sh1 = book.create_sheet('年龄表-最后')

  12. # 增加一个 sheet,放在最前
  13. sh2 = book.create_sheet('年龄表-最前',0)

  14. # 增加一个 sheet,指定为第2个表单
  15. sh3 = book.create_sheet('年龄表2',1)

  16. # 根据名称获取某个sheet对象
  17. sh = book['工资表']

  18. # 给第一个单元格写入内容
  19. sh['A1'] = '你好'

  20. # 获取某个单元格内容
  21. print(sh['A1'].value)

  22. # 根据行号列号, 给第一个单元格写入内容,
  23. # 注意和 xlrd 不同,是从 1 开始
  24. sh.cell(2,2).value = '白月黑羽'

  25. # 根据行号列号, 获取某个单元格内容
  26. print(sh.cell(1, 1).value)

  27. book.save('信息.xlsx')

  28. 插入行、列
  29. sheet 对象的 insert_rows 和 insert_cols 方法,分别用来插入行和列

  30. 删除行、列
  31. sheet 对象的 delete_rows 和 delete_cols 方法,分别用来删除行和列

  32. 文字颜色、字体、大小
  33. 单元格里面的样式风格(包括颜色、字体、大小、下划线等)都是通过Font对象设定的

  34. import openpyxl
  35. # 导入Font对象 和 colors 颜色常量
  36. from openpyxl.styles import Font,colors

  37. wb = openpyxl.load_workbook('income.xlsx')
  38. sheet = wb['2018']

  39. # 指定单元格字体颜色,
  40. sheet['A1'].font = Font(color=colors.RED, #使用预置的颜色常量
  41.                         size=15,    # 设定文字大小
  42.                         bold=True,  # 设定为粗体
  43.                         italic=True # 设定为斜体
  44.                         )

  45. # 也可以使用RGB数字表示的颜色
  46. sheet['B1'].font = Font(color="981818")

  47. # 指定整行 字体风格, 这里指定的是第3行
  48. font = Font(color="981818")
  49. for y in range(1, 100): # 第 1 到 100 列
  50.     sheet.cell(row=3, column=y).font = font

  51. # 指定整列 字体风格, 这里指定的是第2列
  52. font = Font(bold=True)
  53. for x in range(1, 100): # 第 1 到 100 行
  54.     sheet.cell(row=x, column=2).font = font

  55. # 指定 某个单元格背景色
  56. sheet['A1'].fill = PatternFill("solid", "E39191")

  57. # 指定 整行 背景色, 这里指定的是第2行
  58. fill = PatternFill("solid", "E39191")
  59. for y in range(1, 100): # 第 1 到 100 列
  60.     sheet.cell(row=2, column=y).fill = fill

  61. # 在第1行,第4列 的位置插入图片
  62. sheet.add_image(Image('1.png'), 'D1')

  63. wb.save('income-1.xlsx')
复制代码
补充:Excel文件批量合并[size=1em]

工具包

[size=1em]
  1. # 导入工具包
  2. import pandas as pd
  3. import os
复制代码

获取文件列表

  1. # 设置文件路径
  2. path = 'C:/Users/yyz/Desktop/python办公技巧/data/数据合并/'
  3. # 空列表, 用于存放文件路径
  4. files = []
  5. for file in os.listdir(path):
  6.     if file.endswith(".xlsx"):
  7.         files.append(path+file)

  8. # 查看列表
  9. files
复制代码

转换存储数据

  1. # 定义一个空的dataframe
  2. data = pd.DataFrame()  

  3. # 遍历所有文件
  4. for file in files:
  5.     datai = pd.read_excel(file)
  6.     datai_len = len(datai)
  7.     data = data.append(datai)   # 添加到总的数据中
  8.     print('读取%i行数据,合并后文件%i列, 名称:%s'%(datai_len,len(data.columns),file.split('/')[-1]))     
  9.     # 查看是否全部读取,格式是否出错
  10. # 重置索引   
  11. data.reset_index(drop=True,inplace=True)
复制代码
到此这篇关于python办公自动化(Excel)的文章就介绍到这了,
















小明Python 2022-11-21 13:58:27 | 显示全部楼层
小明Python 2022-11-23 22:28:33 | 显示全部楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行