python操作Excel(xls,xlsx)

一、–xls–

1.xlwt

新建 Excel 写入数据

写入excel无所谓用哪个,后缀改一下就可以了。

主要用xlwt处理xls

import xlwt
def datas\_2\_excel\_xls(datas,file_path):
	# 创建一个Workbook对象,这就相当于创建了一个Excel文件
	workbook = xlwt.Workbook(encoding="utf-8", style_compression=0)
	# 添加一个工作表
	worksheet = workbook.add_sheet('Sheet1', cell_overwrite_ok=True)
	for row in range(len(datas)):
		for col in range(len(datas[0])):
			worksheet.write(row, col, datas[row][col])
	# 保存为Excel文件
	workbook.save(file_path)

if __name__ == '\_\_main\_\_':
	demo_datas = [
		['Number', 'Batch', 'ID'],
		[2, 'A', '001'],
		[4, 'B', '002'],
		[6, 'A', '003'],
		[8, 'C', '004']
					]
	file_path = 'example.xls'
	datas_2_excel_xls(demo_datas,file_path)


2.xlrd

读取Excel 数据
import xlrd
def read\_xls\_xlrd(file_path):
    # 打开 Excel 文件
    workbook = xlrd.open_workbook(file_path)

    # 选择工作簿中的一个工作表
    worksheet = workbook.sheet_by_index(0)  # 通过索引选择,0 表示第一个工作表
    # 或者
    # worksheet = workbook.sheet\_by\_name('Sheet1') # 通过名称选择工作表

    # 获取工作表的行数和列数
    rows = worksheet.nrows
    cols = worksheet.ncols
    datas = []
    # 1.遍历工作表,获取每行的内容,按行
    for i in range(rows):
        data = worksheet.row_values(i)  # 打印整行内容
        datas.append(data)

    # #2.遍历工作表每个数据,按单元格
    # for i in range(rows):
    # data = []
    # for j in range(cols):
    # data.append(worksheet.cell\_value(i,j))
    # datas.append(data)


    # print(datas)
    # # 也可以获取特定单元格的内容
    # cell\_value = worksheet.cell\_value(0, 0) # 获取第一行第一列的单元格内容
    # print(cell\_value)
    return datas
if __name__ == '\_\_main\_\_':
    file_path = 'example.xls'
    req_datas = read_xls_xlrd(file_path)
    print(req_datas)


二、–xlsx–

处理xlsx有两个都可以用
1.xlsxwriter
2.openpyxl

1.xlsxwriter

xlsxwriter 是一个用于创建和写入 Excel 2010 xlsx 文件的 Python 模块。它提供了一个用于写入 Excel
文件的简单接口,支持创建工作簿、工作表、设置单元格样式、合并单元格等功能。与 openpyxl 不同,xlsxwriter
主要用于写入数据到 Excel 文件,而不是读取或修改现有文件。

1️⃣读取 Excel 数据(没办法)
2️⃣新建 Excel 写入数据
import xlsxwriter
def datas\_2\_excel\_xlsx\_xlsxwriter(datas,file_path):
    wb = xlsxwriter.Workbook(file_path)
    sheet = wb.add_worksheet('Sheet1')
    # 样式设置
    format1 = {
        'font\_name': '宋',  # 字体
        'font\_size': 10,  # 字体大小
        'font\_color': 'black',  # 字体颜色
        'bold': True,  # 是否粗体
        'align': 'center',  # 水平居中对齐
        'valign': 'vcenter',  # 垂直居中对齐
        'right': 1,
        'bottom': 2,  # 底边框
        'bg\_color': '#ffc7ce',  # 设置背景颜色粉色
    }
    # 默认背景白色
    format2 = {
        'font\_name': '宋',  # 字体
        'font\_size': 10,  # 字体大小
        'font\_color': 'black',  # 字体颜色
        'bold': True,  # 是否粗体
        'align': 'center',  # 水平居中对齐
        'valign': 'vcenter',  # 垂直居中对齐
        'right': 1,
        'bottom': 2,  # 底边框
    }
    red_style = wb.add_format(format1)
    white_style = wb.add_format(format2)
    # 设置列宽
    sheet.set_column(0, 0, 15)
    sheet.set_column(1, 1, 15)
    # 设置列宽
    sheet.set_column(0, 0, 15)
    sheet.set_column(1, 1, 15)
    for row in range(len(datas)):
        for col in range(len(datas[0])):
            sheet.write(row, col, datas[row][col], white_style)
    wb.close()
if __name__ == '\_\_main\_\_':
    demo_datas = [
        ['Number', 'Batch', 'ID'],
        [2, 'A', '001'],
        [4, 'B', '002'],
        [6, 'A', '003'],
        [8, 'C', '004']
    ]
    file_path = 'example.xls'
    datas_2_excel_xlsx_xlsxwriter(demo_datas, file_path)


2.openpyxl

2.1 靠自己
1️⃣读取 Excel 数据
import openpyxl
def get\_rules(worksheet):
    # 获取条件格式规则及其索引
    datas = {}
    for index, rules in worksheet.conditional_formatting._cf_rules.items():
        # 打印规则的详细信息
        for rule in rules:

            try:
                print(f"Rule Index: {index.sqref}")
                print(f"Rule Type: {rule.type}")
                print(f"Formula: {rule.formula}")
                print(f"Stop If True: {rule.stopIfTrue}")
                # print(f"Show Formula Bar: {rules.showFormulaBar}")
                # print(f"Priority: {rule.priority}")
                # ... 你可以根据需要添加更多属性的访问
                print()
            except:
                pass
            datas[index.sqref]  = {
                'Rule Index':index.sqref,
                'Rule Type':rule.type,
                'Formula':rule.formula,
                'Stop If True':rule.stopIfTrue

            }
    return datas


def read\_xlsx\_openpyxl(file_path):
    wb = openpyxl.load_workbook(file_path)
    sheet = wb.get_sheet_by_name(wb.sheetnames[0])
    datas = []
    #获取条件格式
    #datas = get\_rules(sheet)
    #print(datas)

    #获取数据
    for i in range(1, sheet.max_row + 1):
        data =  []
        for j in range(1, sheet.max_column + 1):
            data.append(sheet.cell(i, j).value)
        datas.append(data)
    return datas


if __name__ == '\_\_main\_\_':
    file_path = 'example.xlsx'
    req_datas = read_xlsx_openpyxl(file_path)
    print(req_datas)

2️⃣新建 Excel 写入数据

openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。它允许用户创建新的 Excel 文件,修改现有的文件,以及从文件中读取数据。此外,openpyxl 还支持添加图表、图像、表格等元素到 Excel 文件中。
注意和其他方法不一样的是,openpyxl是用numpy为基础,打包很大,行列从1开始。

import openpyxl
from openpyxl.styles import NamedStyle, Font, Alignment, Border, Side, PatternFill, Color
from openpyxl.utils import get_column_letter
from openpyxl.styles.fills import PatternFill


def set\_style():
    # ☝定义样式
    style = NamedStyle(name='format1')
    # 字体
    # openpyxl.styles.fonts.Font(name=None, sz=None, b=None, i=None, charset=None, u=None, strike=None, color=None,
    # scheme=None, family=None, size=None, bold=None, italic=None, strikethrough=None,
    # underline=None, vertAlign=None, outline=None, shadow=None, condense=None, extend=None)
    # 常用设置:
    # name==字体名称
    # color==字体颜色=Color
    # sz==size==字体大小=float
    # b==bold==是否粗体=bool
    # i==italic==是否斜体=bool
    # u==underline==下划线
    # 取值范围: 'single', 'doubleAccounting', 'singleAccounting', 'double'
    # strike==strikethrough== 删除线=bool
    # vertAlign 取值范围 'superscript', 'baseline', 'subscript'
    # superscript==上标
    # subscript==下标

    font = Font(name="黑体", sz=10, b=True, i=True, color=Color('00000000'))
    style.font = font

    # 边框
    # openpyxl.styles.borders.Side(style=None, color=None, border\_style=None)
    # style 取值范围:
    # style == 'dashDot', 'dashDotDot', 'dashed', 'mediumDashDot', 'double', 'slantDashDot', 'thin', 'hair', 'dotted',
    # 'thick', 'mediumDashed', 'mediumDashDotDot', 'medium'
    l_side = Side(style='hair', color=Color('00000000'))
    r_side = Side(style='hair', color=Color('00000000'))
    t_side = Side(style='hair', color=Color('00000000'))
    b_side = Side(style='thick', color=Color('00000000'))
    border = Border(left=l_side, right=r_side, top=t_side, bottom=b_side, vertical=l_side)
    style.border = border

    # 设置水平方向对齐方式
    alignment = Alignment()
    # horizontal 取值范围:
    # horizontal = {'right', 'justify', 'fill', 'center', 'general', 'left', 'distributed', 'centerContinuous'}
    alignment.horizontal = 'center'
    # vertical 取值范围:
    # vertical = {'bottom', 'justify', 'center', 'top', 'distributed'}
    alignment.vertical = 'center'
    # 单元格设置
    style.alignment = alignment

    # 填充
    # openpyxl.styles.fills模块:
    # openpyxl.styles.fills.GradientFill 用渐变填充区域
    # openpyxl.styles.fills.PatternFill 用图案填充区域
    ## openpyxl.styles.fills.GradientFill(type='linear', degree=0, left=0, right=0, top=0, bottom=0, stop=())
    # 支持两种渐变填充
    # 1.type='linear'渐变在一个区域的长度上,在一组指定的停止点之间插入颜色
    # 2.type='path'渐变从区域的每个边缘应用线性渐变
    # from openpyxl.styles.fills import GradientFill
    # cell.fill = GradientFill(type='linear', stop=(Color(indexed=10), Color(indexed=20), Color(indexed=30)))
    # cell.fill = GradientFill(type='path', stop=(Color(indexed=10), Color(indexed=20), Color(indexed=30)))

    # openpyxl.styles.fills.PatternFill 用图案填充区域
    # openpyxl.styles.fills.PatternFill(patternType=None, fgColor= < openpyxl.styles.colors.Color object >
    # bgColor = < openpyxl.styles.colors.Color object >
    # fill\_type = None, start\_color = None, end\_color = None)
    # patternType 取值范围:
    # 'gray0625', 'gray125', 'solid', 'darkHorizontal', 'lightGrid', 'lightTrellis', 'lightVertical',
    # 'mediumGray', 'darkTrellis', 'lightGray', 'darkUp', 'darkGrid', 'lightHorizontal', 'lightUp', 'darkDown',
    # 'darkGray', 'darkVertical', 'lightDown'
    # from openpyxl.styles.fills import PatternFill
    #
    # cell.fill = PatternFill(patternType='solid', fgColor=Color(indexed=10))
    #

    black_fill = PatternFill(start_color="00000000", end_color="00000000", fill_type="solid")
    # red\_fill = PatternFill(start\_color="00FF0000", end\_color="00FF0000", fill\_type="solid")
    style.fill = black_fill
    return style


def datas\_2\_excel\_xlsx\_openpyxl(datas, file_path):
    wb = openpyxl.Workbook()
    sheet = wb.get_sheet_by_name(wb.sheetnames[0])
    # 设置第1列的宽度为30


    column_index = 1
    column_letter = get_column_letter(column_index)
    sheet.column_dimensions[column_letter].width = 20
    wb.add_named_style(set_style())
    for row in range(1, len(datas) + 1):
        for col in range(1, len(datas[0]) + 1):
            # 获取单元格
            cell = sheet.cell(row, col  )
            cell.style = 'format1'
            value = datas[row-1][col-1]
            cell.value = value

    wb.save(file_path)

if __name__ == '\_\_main\_\_':
    demo_datas = [
        ['Number', 'Batch', 'ID'],
        [2, 'A', '001'],
        [4, 'B', '002'],
        [6, 'A', '003'],
        [8, 'C', '004']
    ]
    file_path = 'example1.xlsx'
    datas_2_excel_xlsx_openpyxl(demo_datas, file_path)

3️⃣新增Excel数据
import openpyxl
from openpyxl.styles import NamedStyle, Font, Alignment, Border, Side, PatternFill, Color
from openpyxl.utils import get_column_letter
from openpyxl.styles.fills import PatternFill


def set\_style():
    # ☝定义样式
    style = NamedStyle(name='format1')
    # 字体
    # openpyxl.styles.fonts.Font(name=None, sz=None, b=None, i=None, charset=None, u=None, strike=None, color=None,
    # scheme=None, family=None, size=None, bold=None, italic=None, strikethrough=None,
    # underline=None, vertAlign=None, outline=None, shadow=None, condense=None, extend=None)
    # 常用设置:
    # name==字体名称
    # color==字体颜色=Color
    # sz==size==字体大小=float
    # b==bold==是否粗体=bool
    # i==italic==是否斜体=bool
    # u==underline==下划线
    # 取值范围: 'single', 'doubleAccounting', 'singleAccounting', 'double'
 **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/8b723640fb4e4049e192fc26d2af9c3b.png)

![img](https://img-blog.csdnimg.cn/img_convert/6f5243c997b8d2c6d37e1b224bb3fd3a.png)

![img](https://img-blog.csdnimg.cn/img_convert/91694d3c19ea124d74d2c2ae7b595ad3.png)

![img](https://img-blog.csdnimg.cn/img_convert/7d203140c78336c33042ff1aeba1aa5e.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

KE-1713665894158)]

[外链图片转存中...(img-QkUnBLMx-1713665894159)]

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

![](https://img-blog.csdnimg.cn/img_convert/d2a6a7a15fe7f633b0b3e68bf3e59dd1.jpeg)
  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值