Python操作excel基础

目录

Excel写入数据-xlwt

Excel读取数据-xlrd

 Excel更新数据-xlutils

 Excel设置样式

Excel读取数据-openpyxl

Excel写入数据-openpyxl 

 Excel写入样式-openpyxl

Excel合并单元格-openpyxl


Python操作excel基础_第1张图片

        办公自动化是将现代化办公和计算机技术结合起来的一种新型的办 公方式 office 家族其实都可以用 VBA 解决自动化的问题,但可能很多人不 会用 python 针对 excel 有很多的第三方库可以用,比如 xlwings、 xlsxwriter、xlrd、xlwt、pandas、 xlsxwriter、win32com、xlutils 等等 这些库可以很方便地实现对 excel 文件的增删改写、格式修改等, 当然并不推荐你全部都去学 尝试一下,这样时间成本太大了

Python操作excel基础_第2张图片

xlrd:用于读取 Excel 文件;

xlwt:用于写入 Excel 文件;

xlutils:用于操作 Excel 文件的实用工具,比如复制、分割、筛选等 

Excel写入数据-xlwt

安装

pip install xlwt

常用方法

Python操作excel基础_第3张图片

代码演示 

# 导入xlwt模块
import xlwt
# 创建excel
wb = xlwt.Workbook()
# 创建一个工作薄
ws = wb.add_sheet('电影')
# 往工作薄的单元格增加数据
    # ws.write(row,col) 从0开始记数
    # 增加第1行数据
ws.write(0,0,'影片')
ws.write(0,1,'综合票房')
ws.write(0,2,'票房占比')
ws.write(0,3,'排片场次')
    # 增加第2行数据
ws.write(1,0,'如果声音记不得')
ws.write(1,1,361.57)
ws.write(1,2,33.3)
ws.write(1,3,95371)

# 保存数据
wb.save('./create_data/01_电影数据.xlsx')

Excel读取数据-xlrd

安装

pip install xlrd

常用方法与属性

Python操作excel基础_第4张图片 代码演示

# 导入模块
import xlrd

# 打开excel文件
wb = xlrd.open_workbook('./create_data/01_电影数据.xlsx')
# 读取里面的数据
# 获取工作薄
print(f'excel中有{wb.nsheets}个工作薄')
print(f'excel中sheets的名字:{wb.sheet_names()}')
# 选中工作薄
ws1 = wb.sheet_by_index(0)
ws2 = wb.sheet_by_name('电影')
# print(ws1)
# print(ws2)
# 获取单元格的数据
print(f'sheet里面一共有{ws1.nrows}行 {ws1.ncols}列的数据')
# 获取单个单元格
print(f'第1行第2列的值:{ws1.cell_value(0,1)}')
print(f'第1行第2列的值:{ws1.cell(0,1).value}')
print(f'第1行第2列的值:{ws1.row(0)[1].value}')
# 获取多个单元格
print(f'第1行的数据是:{ws1.row_values(0)}')
print(f'第1列的数据是:{ws1.col_values(0)}')

# 获取所有单元格
for r in range(ws1.nrows):
    for c in range(ws1.ncols):
        print(f'第{r}行 第{c}列的数据是:{ws1.cell_value(r,c)}')

 Excel更新数据-xlutils

安装

pip install xlutils

常用方法与属性

 代码演示

import xlrd
from xlutils.copy import copy

# 读取文件
read_wb = xlrd.open_workbook('./create_data/01_电影数据.xlsx')
# 复制文件
wb = copy(read_wb)
# 修改数据
# 获取当前excel里面的第1个工作薄
ws =  wb.get_sheet(0)
# 增加数据
ws.write(5,0,'保家卫国')
ws.write(5,1,113)
ws.write(5,2,5.1)
ws.write(5,3,490)

# 增加统计信息
read_ws = read_wb.sheet_by_index(0)
count = 0
for r in range(1,read_ws.nrows):
    num = read_ws.cell_value(r,3)
    # 累加排场次数
    count += num
# 增加一个新的工作薄
new_ws = wb.add_sheet('汇总数据')
new_ws.write(0,0,'总排片次数')
new_ws.write(0,1,count)

# 保存数据
wb.save('./create_data/02_电影数据_new.xlsx')

 Excel设置样式

常用方法与属性

Python操作excel基础_第5张图片

Python操作excel基础_第6张图片 设置字体

import xlwt

# 创建一个excel文件
wb = xlwt.Workbook()
# 创建一个工作薄
ws = wb.add_sheet('数据')
# 设置样式
# 创建一个字体样式
ft = xlwt.Font()
ft.name = '微软雅黑' # 设置字体
ft.height = 30*20 # 设置字体大小
ft.bold = True # 设置字体加粗
ft.underline = True # 设置字体下划线
ft.italic = True # 设置字体斜体
ft.colour_index = 2 # 设置字体颜色

# 创建一个样式对象
style1 =  xlwt.XFStyle()
style1.font = ft
# 增加内容
ws.write(1,1,'吕小布')
ws.write(2,2,'吕小布',style1)
# 保存数据
wb.save('./create_data/03_excel样式.xlsx')

 设置边框

import xlwt

# 创建一个excel文件
wb = xlwt.Workbook()
# 创建一个工作薄
ws = wb.add_sheet('数据')
# 设置样式
# 创建一个字体样式
boder = xlwt.Borders()
# 线的种类
# 细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7
boder.top = 1
boder.bottom = 6
boder.left = 4
boder.right = 5
# 线的颜色
boder.top_colour = 3
boder.bottom_colour = 4
boder.left_colour = 7
boder.right_colour = 6

# 创建一个样式对象
style1 =  xlwt.XFStyle()
style1.borders = boder
# 增加内容
ws.write(1,1,'吕小布')
ws.write(2,2,'吕小布',style1)
# 保存数据
wb.save('./create_data/04_excel样式_边框.xlsx')

设置内容

import xlwt

# 创建一个excel文件
wb = xlwt.Workbook()
# 创建一个工作薄
ws = wb.add_sheet('数据')
# 设置样式
# 创建一个字体样式
align = xlwt.Alignment()
# 设置 上下位置 0 上 1 中  2 下
align.vert = 1
# 设置 左右位置 1左 2中 3右
align.horz = 2

# 设置单元格大小
# 如果要设置单元格高度,需要开启设置高度属性
ws.row(2).height_mismatch= True # 开启设置高度权限
ws.row(2).height = 50 *256
ws.col(2).width = 50 * 50

# 创建一个样式对象
style1 =  xlwt.XFStyle()
style1.alignment = align
# 增加内容
ws.write(1,1,'吕小布')
ws.write(2,2,'吕小布',style1)
# 保存数据
wb.save('./create_data/05_excel样式_内容位置.xlsx')

设置背景

import xlwt

# 创建一个excel文件
wb = xlwt.Workbook()
# 创建一个工作薄
ws = wb.add_sheet('数据')
# 设置样式
# 创建一个字体样式
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN  # 实心颜色
pattern.pattern_fore_colour = 6

# 创建一个样式对象
style1 =  xlwt.XFStyle()
style1.pattern = pattern

# 通过easyxf()设置样式
style2 = xlwt.easyxf('font:bold on,colour_index 5;align: vert center,horiz center')
# 增加内容
ws.write(1,1,'吕小布')
ws.write(2,2,'吕小布',style1)
ws.write(3,3,'吕小布',style2)
# 保存数据
wb.save('./create_data/06_excel样式_背景颜色.xlsx')

Excel读取数据-openpyxl

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

安装

pip install openpyxl

常用方法与属性

Python操作excel基础_第7张图片

# pip install openpyxl
from openpyxl import load_workbook

def open_excel():
    # 打开excel文件
    wb = load_workbook('./base_data/data01.xlsx')
    # 获取工作薄
    ws1 = wb.active
    ws2 = wb['Sheet1']
    ws3 = wb.get_sheet_by_name('Sheet1') #  DeprecationWarning 被抛弃,不推荐使用
    print(ws1)
    print(ws2)
    print(ws3)
    print(ws1 is ws2 is ws3)

def show_sheets():
    # 打开excel文件
    wb = load_workbook('./base_data/data01.xlsx')
    print(wb.sheetnames)
    for ws in wb:
        print(ws.title)

def get_one_value():
    # 打开excel文件
    wb = load_workbook('./base_data/data01.xlsx')
    ws = wb.active
    value1 = ws.cell(3,3).value  # 数字是从1开始记数
    value2 = ws['c3'].value
    print(value1)
    print(value2)

def get_many_value():
    # 打开excel文件
    wb = load_workbook('./base_data/data01.xlsx')
    ws = wb.active
    # 获取范围的单元格
    cells = ws['c1':'c5']
    print(cells)
    # 获取整行,整列
    cell_rows_6 = ws[6]
    cell_cols_c = ws['C']
    print(cell_rows_6)
    print(cell_cols_c)
    # 获取部分行
    cell_rows_6_10 = ws[6:10]
    print(cell_rows_6_10)

def get_many_value2():
    # 打开excel文件
    wb = load_workbook('./base_data/data01.xlsx')
    ws = wb.active
    for row in ws.iter_rows(min_row=11,max_row=15,max_col=4,min_col=3):
        for cell in row:
            print(cell)
def get_all_data_row():
    # 打开excel文件
    wb = load_workbook('./base_data/data01.xlsx')
    ws = wb.active
    for row in ws.rows:
        for cell in row:
            print(cell)
def get_all_data_col():
    # 打开excel文件
    wb = load_workbook('./base_data/data01.xlsx')
    ws = wb.active
    for col in ws.columns:
        for cell in col:
            print(cell)
def get_num():
    # 获取总行号,列号
    # 打开excel文件
    wb = load_workbook('./base_data/data01.xlsx')
    ws = wb.active
    print(ws.max_column)
    print(ws.max_row)

if __name__ =='__main__':
    # open_excel()
    # show_sheets()
    # get_one_value()
    # get_many_value()
    # get_many_value2()
    # get_all_data_row()
    # get_all_data_col()
    get_num()

Excel写入数据-openpyxl 

常用方法与属性

Python操作excel基础_第8张图片

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()

 Excel写入样式-openpyxl

常用方法与属性

Python操作excel基础_第9张图片

from openpyxl import Workbook
from openpyxl.styles import Font,colors,Alignment

def set_font():
    '''
    设置字体样式
    '''
    wb = Workbook()
    ws = wb.active
    ws['A1'] = 'Hello'
    ws['B2'] = 'Python'
    ws['C3'] = 'Excel'
    # 创建一个字体样式对象
    ft = Font(name='微软雅黑',size=30,italic=True,bold=True,color=colors.BLUE)
    ft2 = Font(name='微软雅黑',size=30,italic=True,bold=True,color='CDAD00')
    # 将字体的样式应用到单元格
    ws['B2'].font = ft
    ws['C3'].font = ft2
    # 保存数据
    wb.save('./create_data/13_openpyxl_字体样式.xlsx')

def set_aligment():
    '''
    设置内容对齐方式
    '''
    wb = Workbook()
    ws = wb.active
    ws['A1'] = 'Hello'
    ws['B2'] = 'Python'
    ws['C3'] = 'Excel'
    # 创建一个对齐方式对象
    aligment = Alignment(horizontal='left',vertical='top')
    aligment2 = Alignment(horizontal='right',vertical='bottom')
    # 设置单元格的宽与高
    ws.row_dimensions[1].height = 50
    ws.column_dimensions['A'].width = 50

    ws['B2'].alignment = aligment
    ws['C3'].alignment = aligment2

    # 保存数据
    wb.save('./create_data/14_openpyxl_位置样式.xlsx')
if __name__ =='__main__':
    # set_font()
    set_aligment()
from openpyxl import Workbook
from openpyxl.styles import Border,Side,colors,PatternFill

def set_border():
    '''
    设置边框样式
    '''
    wb = Workbook()
    ws = wb.active
    ws['A1'] = 'Hello'
    ws['B2'] = 'Python'
    ws['C3'] = 'Excel'
    # 创建一个线的样式对象
    side = Side(color=colors.BLUE,style='medium')
    side2 = Side(color='00008000',style='double')
    # 创建边框样式对象
    border = Border(left=side,right=side2,top=side,bottom=side2)
    # 将边框样式应用到单元格
    ws['B2'].border = border
    # 保存数据
    wb.save('./create_data/15_openpyxl_边框样式.xlsx')

def set_pattern():
    '''
    设置背景颜色
    '''
    wb = Workbook()
    ws = wb.active
    ws['A1'] = 'Hello'
    ws['B2'] = 'Python'
    ws['C3'] = 'Excel'
    # 创建背景的样式对象
    pattern = PatternFill('solid',fgColor=colors.BLUE)
    # 将背景颜色样式应用单元格, 不要用pattern属性
    ws['B2'].fill = pattern # AttributeError: 'Cell' object has no attribute 'pattern' 
    # 保存数据
    wb.save('./create_data/16_openpyxl_背景样式.xlsx')


if __name__ =='__main__':
    # set_border()
    set_pattern()

Excel合并单元格-openpyxl

常用方法与属性

from openpyxl import Workbook

def merge_cell():
    '''
    合并单元格
    '''
    wb = Workbook()
    ws = wb.active

    # 合并操作 A1:A5 合并一列
    ws.merge_cells('A1:A5')
    # 合并操作 A1:A5 合并一行
    ws.merge_cells('c1:h1')
    # 合并操作 A1:A5 合并多行,多列
    ws.merge_cells('c4:h8')
    # 注意:从小到大,从上到下,从前到后
    # 保存数据
    wb.save('./create_data/17_合并单元格.xlsx')


if __name__ =="__main__":
    merge_cell()

你可能感兴趣的:(办公自动化,数据分析,python)