Python之Excel自动化处理(三)

一、Excel数据拆分-xlrd

1.1、代码

python 复制代码
import xlrd
from xlutils.copy import copy


def get_data():
  wb = xlrd.open_workbook('./base_data/data01.xlsx')
  sh = wb.sheet_by_index(0)
  '''
   {
    a: [{},{},{}],
    b:[{},{},{}],
    c:[{},{},{}],
   }


   '''
  all_data = {}
  for r in range(sh.nrows):
    d = {'type':sh.cell_value(r,1),'name':sh.cell_value(r,2),'count':sh.cell_value(r,3),'price':sh.cell_value(r,4)}
    key = sh.cell_value(r,0)
    if all_data.get(key):
      all_data[key].append(d)
    else:
      all_data[key] = [d]
  return all_data
def save(data):
  wb = xlrd.open_workbook('./base_data/data01.xlsx')
  wb2 = copy(wb)
  for key in data.keys():
    temp_sheet = wb2.add_sheet(key)
    for i, d in enumerate(data.get(key)):
      temp_sheet.write(i,0,d.get('type'))
      temp_sheet.write(i,1,d.get('name'))
      temp_sheet.write(i,2,d.get('count'))
      temp_sheet.write(i,3,d.get('price'))
  wb2.save('./create_data/06_表格的拆分.xlsx')


if __name__ == "__main__":
  all_data = get_data()
  # save(all_data)
  print(all_data)

二、Excel读取数据-openpyxl

Python操作Excel的一个常用库openpyxl,openpyl是第3方模块库,可以方便的对excel执行读取与写入操作

2.1、安装

python 复制代码
pip install openpyxl

2.2、常用方法与属性

函数名&属性 含义
openpyxl.load_workbook(path) 加载Excel文件
workbook.active 激活第1个工作薄
workbook[name] 获取根据名字工作薄
workbook.get_sheet_by_name(name) 获取根据名字工作薄
workbook.sheetnames 获取所有工作薄名字
sheet.title 获取工作薄名字
sheet.max_row 获取行数
sheet.max_column 获取列数
sheet.cell(row,col) 获取指定单元格
sheet[cell_name] 获取指定单元格,例如:C2
sheet[col/row_name] 获取整行或整列单元格:填写num为整行,row_name为整列
sheet[col:col] 获取指定范围整行单元格
sheet[cell_name:cell_name] 获取指定范围单元格
sheet.iter_rows(min_row =0 , max_row =0, min_col =0, max_col =0) 获取指定范围单元格
sheet.rows 获取所有行
sheet.columns 获取所有列
cell.value 获取单元格的值

2.3、代码

python 复制代码
# pip install openpyxl
def open():
  from openpyxl import load_workbook
  wb = load_workbook('./base_data/data01.xlsx')
  # 获取工作薄
  sh1 = wb.active
  sh2 = wb['Sheet1']
  sh3 = wb.get_sheet_by_name('Sheet1')
  print(sh1 is sh2 is sh3)


def show_sheets():
  from openpyxl import load_workbook
  wb = load_workbook('./base_data/data01.xlsx')
  print(wb.sheetnames)
  for sh in wb:
    print(sh.title)


def get_one_value():
  from openpyxl import load_workbook
  wb = load_workbook('./base_data/data01.xlsx')
  sh1 = wb.active
  value1 = sh1.cell(2,3).value
  value2 = sh1['c2'].value
  print(value1,value2)


def get_many_value():
  from openpyxl import load_workbook
  wb = load_workbook('./base_data/data01.xlsx')
  sh1 = wb['Sheet1']
  # 切片
  cells1 = sh1['c2':'d3']
  # print(cells1)
  # 整行,整列
  cell_row3 = sh1[3]
  cell_col3 = sh1['c']
  print(cell_row3)
  print(cell_col3)
  cell_row3_5 = sh1[3:5]
  print(cell_row3_5)


  # 通过迭代获取数据
  # for row in sh1.iter_rows(min_row =2 , max_row =5, max_col =3):
  #   for cell in row:
  #     print(cell.value)


  for row in sh1.iter_rows(min_row =2 , max_row =5, min_col =2, max_col =4):
    for cell in row:
      print(cell.value)
def get_all_data():
  from openpyxl import load_workbook
  wb = load_workbook('./base_data/data01.xlsx')
  sh1 = wb['Sheet1']
  for row in sh1.rows:
    for cell in row:
      print(cell.value)


  for column in sh1.columns:
    for cell in column:
      print(cell.value)


def get_num():
  from openpyxl import load_workbook
  wb = load_workbook('./base_data/data01.xlsx')
  sh1 = wb['Sheet1'] 
  print(sh1.max_row)
  print(sh1.max_column)
if __name__ == "__main__":
  # open()
  # show_sheets()
  # get_one_value()
  # get_many_value()
  # get_all_data()
  get_num()

三、Excel写入数据-openpyxl

3.1、常用方法与属性

函数名&属性 含义
Workbook() 创建Excel文件
workbook.create_sheet(name,<num>) 在指定位置创建sheet表
cell.value 获取单元格值,也可直接赋值
cell.font 获取字体样式,也可直接赋值
cell.alignment 获取单元格内容位置,也可直接赋值
openpyxl.styles.Font() 创建字体样式
openpyxl.styles.Alignment() 创建单元格内容位置样式
sheet.row_dimensions[num].height 设置指定行高度
sheet.column_dimensions[col_name].width 设置指定列宽度

3.2、代码

python 复制代码
from openpyxl import Workbook
def create_excel():
  # 创建excel
  wb = Workbook()
  # 激活第1个工作薄
  ws1 = wb.active
  # 创建工作薄
  ws2 = wb.create_sheet('数据')
  # 在指定位置创建工作薄、
  ws3 = wb.create_sheet('人员',0)
  # 保存数据
  wb.save('./create_data/09_创建excel文件.xlsx')


def set_value1():
  # 创建excel
  wb = Workbook()
  # 激活第1个工作薄
  ws1 = wb.active
  # 写入数据
  ws1['A1'] = 'Hello'
  ws1['B2'] = 'Excel'
  ws1['C3'] = 'Python'
   # 保存数据
  wb.save('./create_data/10_创建excel文件_写入数据.xlsx')
def set_value2():
  # 创建excel
  wb = Workbook()
  # 激活第1个工作薄
  ws1 = wb.active
  # 需要写入的数据
  data = ['Hello','Excel','Python']


  for i,d in enumerate(data):
    ws1.cell(i+1,i+1).value = d # 注意 openpyxl里面 记数是从1开始
  # 保存数据
  wb.save('./create_data/11_创建excel文件_写入数据2.xlsx')


def set_value3():
  # 创建excel
  wb = Workbook()
  # 激活第1个工作薄
  ws1 = wb.active
  # 需要写入的数据
  data = ['Hello','Excel','Python']
  # 把数据追加到工作薄
  ws1.append(data)
  # 保存数据
  wb.save('./create_data/12_创建excel文件_写入数据3.xlsx')
if __name__ == '__main__':
  # create_excel()
  # set_value1()
  # set_value2()
  set_value3()
相关推荐
七夜zippoe6 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6487 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满7 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠8 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9038 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技9 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀9 小时前
Linux环境变量
linux·运维·服务器
zzzsde9 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
CodeToGym9 小时前
【Java 办公自动化】Apache POI 入门:手把手教你实现 Excel 导入与导出
java·apache·excel
聆风吟º11 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann