自学内容网 自学内容网

Python处理Excel

xlrd库 —— 读写Excel

安装xlrd库  :pip install xlrd==1.2.0

获取Book对象

import xlrd
book = xlrd.open_workbook("income.xlsx")#打开Excel并返回一个Book对象,这个对象代表打开的Excel文件
print(f"表单名分别为:{book.sheet_names()}")

>>> 表单名分别为:['2018', '2017', '2016']

获取Sheet表单对象

根据表单索引获取表单对象

import xlrd
book = xlrd.open_workbook("income.xlsx")#打开Excel并返回一个Book对象,这个对象代表打开的Excel文件
print(book.sheet_by_index(0))

>>>  <xlrd.sheet.Sheet object at 0x000001F048839F40>

根据表单名获取表单对象

import xlrd
book = xlrd.open_workbook("income.xlsx")#打开Excel并返回一个Book对象,这个对象代表打开的Excel文件
print(book.sheet_by_name('2018'))

>>> <xlrd.sheet.Sheet object at 0x000001F048839F40>

获取所有表单对象,返回一个列表

import xlrd
book = xlrd.open_workbook("income.xlsx")#打开Excel并返回一个Book对象,这个对象代表打开的Excel文件
print(book.sheets())

>>> [<xlrd.sheet.Sheet object at 0x000001F048839F40>, <xlrd.sheet.Sheet object at 0x000001F048839F70>, <xlrd.sheet.Sheet object at 0x000001F048839FA0>]

获取完表单对象后,就可以获取表单行数、列数、表单名、表单索引

import xlrd

book = xlrd.open_workbook("income.xlsx")
sheet = book.sheet_by_index(0)
print(f"表单名:{sheet.name} ")
print(f"表单索引:{sheet.number}")
print(f"表单行数:{sheet.nrows}")
print(f"表单列数:{sheet.ncols}")

获取单元格内容

cell_value()指定单元格

import xlrd

book = xlrd.open_workbook("income.xlsx")

sheet = book.sheet_by_index(0)

# 行号、列号都是从0开始计算
print(f"单元格A1内容是: {sheet.cell_value(rowx=0, colx=0)}")

>>>  单元格A1内容是: 月份

row_values()指定行所有单元格内容,列表返回

import xlrd

book = xlrd.open_workbook("income.xlsx")

sheet = book.sheet_by_index(0)

# 行号、列号都是从0开始计算
print(f"第一行内容是: {sheet.row_values(rowx=0)}")

>>> 第一行内容是: ['月份', '收入']

col_values()指定列所有单元格内容,列表返回

import xlrd

book = xlrd.open_workbook("income.xlsx")

sheet = book.sheet_by_index(0)

# 行号、列号都是从0开始计算
print(f"第一列内容是: {sheet.col_values(colx=0)}")

>>> 第一列内容是: ['月份', 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0]

获取指定范围内的数据

指定开始位置start_rowx(也可以指定结束位置end_rowx)

import xlrd

book = xlrd.open_workbook("income.xlsx")

sheet = book.sheet_by_index(0)

# 行号、列号都是从0开始计算
print(f"第一列内容是: {sheet.col_values(colx=0,start_rowx=1)}")

>>> 第一列内容是: [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0]

———————————————————————————————————————————

示例

enumerate()函数

用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中

enumerate(sequence);这里的参数sequence:一个序列、迭代器或其他支持迭代对象

seasons = ['Spring', 'Summer', 'Autumn', 'Winter'] 
# [(0, 'Spring'), (1, 'Summer'), (2, 'Autumn'), (3, 'Winter')] 
print(list(enumerate(seasons)))
 
# [(1, 'Spring'), (2, 'Summer'), (3, 'Autumn'), (4, 'Winter')] 
print(list(enumerate(seasons, start=1))) # 下标从1开始

参考自:[Python] enumerate()函数_python中for index, task in enumerate(tasks, start=1-CSDN博客

示例1.统计2017年除去*月份收入的总和 

import xlrd
book = xlrd.open_workbook("income.xlsx")
sheet = book.sheet_by_name('2017')
# 收入在第2列
incomes = sheet.col_values(colx=1,start_rowx=1)
print(f"2017年账面收入为: {int(sum(incomes))}")

# 去掉包含星号的月份收入
toSubstract = 0
# 月份在第1列
monthes = sheet.col_values(colx=0)

for row,month in enumerate(monthes):
    if type(month) is str and month.endswith('*'):
        income = sheet.cell_value(row,1)#收入在第2列
        print(month,income)
        toSubstract += income

print(f"2017年真实收入为: {int(sum(incomes)- toSubstract)}")

>>>  2017年账面收入为: 248634
        6* 20774.0
        2017年真实收入为: 227860

示例2.统计3年除去*月份收入的总和 

import xlrd

book = xlrd.open_workbook("income.xlsx")

# 得到所有sheet对象
sheets = book.sheets()

incomeOf3years = 0#3年全部收入
for sheet in sheets:
    # 收入在第2列
    incomes = sheet.col_values(colx=1,start_rowx=1)
    # 去掉包含星号的月份收入
    toSubstract = 0
    # 月份在第1列
    monthes = sheet.col_values(colx=0)

    for row,month in enumerate(monthes):
        if type(month) is str and month.endswith('*'):
            income = sheet.cell_value(row,1)
            print(month,income)
            toSubstract += income

    actualIncome = int(sum(incomes)- toSubstract)
    print(f"{sheet.name}年真实收入为: {actualIncome}")
    incomeOf3years += actualIncome

print(f'全部收入为{incomeOf3years}')

>>>  3* 30105.0
        7* 30109.0
        2018年真实收入为: 301088
        6* 20774.0
        2017年真实收入为: 227860
        9* 19374.0
        2016年真实收入为: 213084
        全部收入为742032

openpyxl库 —— 新建并写入

可读取、写入、修改文件

pip install openpyxl

新建Excel,写入数据

创建一个excel文件
import openpyxl

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

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

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

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

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

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

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

对单元格的操作
# 根据名称获取某个sheet对象
sh = book['工资表']

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

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

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

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

book.save('信息.xlsx')

示例

将字典中的年龄表的内容 写入到excel文件中

数据在字典里 —— items
import openpyxl

name2Age = {
    '张飞' :  38,
    '赵云' :  27,
    '许褚' :  36,
    '典韦' :  38,
    '关羽' :  39,
    '黄忠' :  49,
    '徐晃' :  43,
    '马超' :  23,
}

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

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

sh.title = '年龄表'

# 写标题栏
sh['A1'] =  '姓名'
sh['B1'] =  '年龄'

# 写入内容
row = 2

for name,age in name2Age.items():
    sh.cell(row, 1).value = name
    sh.cell(row, 2).value = age
    row += 1

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

Python字典items()函数作用:以列表返回可遍历的(键,值)元组数组

dict = {'老大':'15岁',
        '老二':'14岁',
        '老三':'2岁',
        '老四':'在墙上'
        }
print(dict.items())

>>> dict_items([('老大', '15岁'), ('老二', '14岁'), ('老三', '2岁'), ('老四', '在墙上')])

参考自:Python 字典 items()方法的简单解析与用法-CSDN博客

 

数据在列表或元组里 —— append
import openpyxl

# name2Age = [
#     ['张飞' ,  38 ] ,
#     ['赵云' ,  27 ] ,
#     ['许褚' ,  36 ] ,
#     ['典韦' ,  38 ] ,
#     ['关羽' ,  39 ] ,
#     ['黄忠' ,  49 ] ,
#     ['徐晃' ,  43 ] ,
#     ['马超' ,  23 ]
# ]

name2Age = (
    ('张飞' ,  38) ,
    ('赵云' ,  27) ,
    ('许褚' ,  36) ,
    ('典韦' ,  38) ,
    ('关羽' ,  39) ,
    ('黄忠' ,  49) ,
    ('徐晃' ,  43) ,
    ('马超' ,  23)
)

# 创建一个Excel workbook 对象
book = openpyxl.Workbook()
sh = book.active
sh.title = '年龄表'

# 写标题栏
sh['A1'] =  '姓名'
sh['B1'] =  '年龄'

for row in name2Age:
    # 添加到下一行的数据
    sh.append(row)

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

修改Excel内容

修改单元格内容
import openpyxl

# 加载 excel 文件
wb = openpyxl.load_workbook('income.xlsx')

# 得到sheet对象
sheet = wb['2017']

sheet['A1'] = '修改一下'

## 指定不同的文件名,可以另存为别的文件
wb.save('income-1.xlsx')

在Excel表中插入行、插入列
import openpyxl

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

# 在第2行的位置插入1行
sheet.insert_rows(2)

# 在第3行的位置插入3行
sheet.insert_rows(3,3)

# 在第2列的位置插入1列
sheet.insert_cols(2)

# 在第2列的位置插入3列
sheet.insert_cols(2,3)

## 指定不同的文件名,可以另存为别的文件
wb.save('income-1.xlsx')
 在Excel表中删除行、删除列
import openpyxl

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

# 在第2行的位置删除1行
sheet.delete_rows(2)

# 在第3行的位置删除3行
sheet.delete_rows(3,3)

# 在第2列的位置删除1列
sheet.delete_cols(2)

# 在第3列的位置删除3列
sheet.delete_cols(3,3)

## 指定不同的文件名,可以另存为别的文件
wb.save('income-1.xlsx')

修改表格里的文字颜色、字体和大小 —— Font

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

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

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

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

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

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

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

wb.save('income-1.xlsx')

背景色 —— PatternFill

import openpyxl
# 导入Font对象 和 colors 颜色常量
from openpyxl.styles import PatternFill

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

# 指定 某个单元格背景色;solid固定该种颜色
sheet['A1'].fill = PatternFill("solid", "E39191")

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

wb.save('income-1.xlsx')

插入图片


原文地址:https://blog.csdn.net/m0_73557953/article/details/143000748

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!