python对于excel的操作

python可以通过开源框架openpyxl来对excel进行读写操作。

基本概念:

对于excel,其中的主要用到的元素如下:

WorkBook:工作簿

WorkSheet:sheet表

Cell:单元格

style:样式

Border:框线
Font:字体
Alignment:对齐
...
hello world的demo:
from openpyxl import Workbook

#一开始新建 是存储在内存中
wb = Workbook()
# 获取表
sheet = wb.active
# 写入相关的单元格数据
sheet['A1'] = 'hello'
sheet['B1'] = 'world'

# 文件落盘
wb.save("hello.xlsx")

设置相关样式的方法:

from openpyxl import Workbook

#  一开始整个excel都是只存在于内存之中
from openpyxl.cell import Cell

from openpyxl.styles import Font, Alignment, Side, Border

# 创建文字的样式
font_ = Font(
    size=14,
    italic=True,
    color='ff0000',
    bold=False,
    strike=None
)

centerAlign = Alignment(horizontal='center', vertical='center')
# 设置线条
side = Side(style='thin', color='ff0000')
# 框线模型信息
allBorder = Border(left=side, top=side, right=side, bottom=side)  # 设置四边线条形状与颜色

workbook = Workbook()
sheet = workbook.active

# 设置字体
sheet['A1'] = "九九乘法表"
sheet['A1'].font = font_
sheet['A1'].alignment = centerAlign
sheet['A1'].border = allBorder

# 合并单元格
sheet.merge_cells("A1:I1")

# 打印乘法表
column_value = 65
for i in range(1, 10):
    column_name = chr(column_value)
    column_value += 1

    for j in range(i, 10):
        sheet["%s%d" % (column_name, j + 1)] = "%d * %d = %d" % (i, j, i * j)

#  最后需要进行数据的落盘操作   写出到磁盘中
workbook.save(filename="hello_world.xlsx")

 一些样式的设置代码

from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font

# 字体
font = Font(name='Calibri',
            size=11,
            bold=False,
            italic=False,
            vertAlign=None,
            underline='none',
            strike=False,
            color='FF000000')
# 背景填充色
fill = PatternFill(fill_type=None,
                   start_color='FFFFFFFF',
                   end_color='FF000000')

# 框线的线的定义
side = Side(border_style=None,
     color='FF000000')

# 框线
border = Border(left=Side(border_style=None,
                          color='FF000000'),
                right=Side(border_style=None,
                           color='FF000000'),
                top=Side(border_style=None,
                         color='FF000000'),
                bottom=Side(border_style=None,
                            color='FF000000'),
                diagonal=Side(border_style=None,
                              color='FF000000'),
                diagonal_direction=0,
                outline=Side(border_style=None,
                             color='FF000000'),
                vertical=Side(border_style=None,
                              color='FF000000'),
                horizontal=Side(border_style=None,
                                color='FF000000')
                )
# 对齐方式
alignment = Alignment(horizontal='general',
                      vertical='bottom',
                      text_rotation=0,
                      wrap_text=False,
                      shrink_to_fit=False,
                      indent=0)
number_format = 'General'

# 是否允许编辑
protection = Protection(locked=True,
                        hidden=False)

 

excel中绘制一个图

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference

wb = Workbook()
ws = wb.active
treeData = [["Type", "Leaf Color", "Height"], ["Maple", "Red", 549], ["Oak", "Green", 783], ["Pine", "Green", 1204]]

for row in treeData:
    ws.append(row)

# 条形图
chart = BarChart()
# 条形展示的方向  bar 是左右方向的堆砌的  col 是下上堆砌的
chart.type = "col"
# 图的名字
chart.title = "Tree Height"
# y轴显示
chart.y_axis.title = 'Height (cm)'
# x轴的显示
chart.x_axis.title = 'Tree Type'
chart.legend = None
# 数据取值 (关联excel的相关的列)
data = Reference(ws, min_col=3, min_row=2, max_row=4, max_col=3)
# 种类的取值 (关联excel的相关的列)
categories = Reference(ws, min_col=1, min_row=2, max_row=4, max_col=1)
chart.add_data(data)
chart.set_categories(categories)
# 最后需要将图绘制到具体的sheet的具体的那个单元格中
ws.add_chart(chart, "E1")

wb.save("h.xlsx")

一个读取excel的栗子

from openpyxl import open
# 打开读取excel
ws = open("h.xlsx")
sheet = ws.active
# 缓存所有的excel的行列信息
rows = []
# 赋值
for row in sheet.iter_rows():
    rows.append(row)
# 读取并打印
for i in range(len(rows)):
    for j in range(len(rows[i])):
        print(rows[i][j].value, end="\t")
    print()
# 关闭文件
ws.close()

其他的高级用法 包括抽象一个更加简单的框架 可以进行相关的定制开发!

posted @ 2024-04-09 12:09  琼尼-沃克  阅读(9)  评论(0编辑  收藏  举报