Python操作excel基础

简介: Python操作excel基础

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

xlrd:用于读取 Excel 文件;


xlwt:用于写入 Excel 文件;


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


Excel写入数据-xlwt

安装


pip install xlwt


常用方法



代码演示

# 导入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


常用方法与属性

代码演示


# 导入模块
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设置样式

常用方法与属性


设置字体

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


常用方法与属性


# 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

常用方法与属性



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

常用方法与属性



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()
目录
相关文章
|
12天前
|
Python
Pandas处理日常EXCEL表格的便捷操作
Pandas处理日常EXCEL表格的便捷操作
|
13天前
|
Python
高阶函数如`map`, `filter`, `reduce`和`functools.partial`在Python中用于函数操作
【6月更文挑战第20天】高阶函数如`map`, `filter`, `reduce`和`functools.partial`在Python中用于函数操作。装饰器如`@timer`接收或返回函数,用于扩展功能,如记录执行时间。`timer`装饰器通过包裹函数并计算执行间隙展示时间消耗,如`my_function(2)`执行耗时2秒。
16 3
|
13天前
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
22 0
|
13天前
|
存储 Go 索引
牢记python对象的操作方式
【6月更文挑战第20天】在Python中,`hash()`和`is`帮助确定对象的相等性。`dir()`和`vars()`揭示对象的属性和内部表示,`__slots__`优化内存使用。列表和字典结构有不同的内存和性能特性,字典使用哈希表进行快速访问。
60 5
牢记python对象的操作方式
|
9天前
|
存储 数据挖掘 Python
使用Python集合高效统计Excel数据
使用Python集合高效统计Excel数据
25 7
|
7天前
python+Pycharm+selenium操作浏览器(Chorme或Edge)
python+Pycharm+selenium操作浏览器(Chorme或Edge)
13 1
Excel如何使用VBA操作引用其它工作簿中的单元格
Excel引用其它工作簿中的单元格的值及使用VBA操作
|
7天前
|
jenkins 持续交付 API
使用Python操作Jenkins的过程详解
Python作为一种简洁、灵活且功能丰富的编程语言,可以与各种API轻松集成,Jenkins的API也不例外。借助于Python中的python-jenkins模块,我们可以轻松地编写脚本来连接到Jenkins服务器,并执行各种操作,如创建、删除、构建Jobs等。这种自动化的方式不仅提高了效率,还使得CI/CD流程更加灵活和可控。
|
14天前
|
Python
Python列表推导式是一种简洁的创建新列表的方式,它允许你在一行代码中完成对数据的操作和转换
【6月更文挑战第19天】Python列表推导式是创建新列表的简洁语法,它在一行内处理数据。表达式如`[expr for item in iterable if cond]`,其中`expr`是对元素的操作,`item`来自`iterable`,`if cond`是可选过滤条件。例如,将数字列表平方:`[x**2 for x in numbers]`。嵌套列表推导处理复杂结构,如合并二维数组:`[[a+b for a,b in zip(row1, row2)] for row1, row2 in zip(matrix1, matrix2)]`。简洁但勿过度复杂化。
23 5
|
14天前
|
Python
Python教程:Python中的输入与输出操作
在编程语言中,输入(Input)和输出(Output),简称I/O,是基础且重要的概念。Python作为一门易于学习且功能强大的编程语言,在处理输入和输出方面提供了多种方式。本文将深入探讨Python中的输入输出操作,包括标准输入输出、文件操作、以及网络I/O等领域
25 4

相关实验场景

更多