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()
相关推荐
清晨细雨~1 小时前
SpringBoot整合EasyExcel实现Excel表头校验
spring boot·后端·excel
qq_401700411 小时前
Linux磁盘配置与管理
linux·运维·服务器
恒创科技HK1 小时前
香港大带宽服务器能降低ping值吗 ?
运维·服务器
爱代码的小黄人1 小时前
华硕主板BIOS设置台式机电脑“Restore AC Power Loss”(断电后恢复状态)设置
运维·服务器·电脑
中电金信2 小时前
云原生时代,应用运维模式如何破局?
运维·云原生
ringking1232 小时前
docker源文件配置以及密钥文件
运维·docker·容器
Code Warrior2 小时前
【Linux】传输层协议UDP
linux·运维·udp
Evan芙3 小时前
Bash 变量命名规则与类型使用
linux·运维·开发语言·chrome·bash
menge23334 小时前
Linux网站搭建
linux·运维·网络
Bruce_Liuxiaowei4 小时前
Kali Linux 加入 Windows 域实战指南:解决域发现与加入失败问题
linux·运维·windows