Python酷库之旅-第三方库openpyxl(18)

目录

一、 openpyxl库的由来

1、背景

2、起源

3、发展

4、特点

4-1、支持.xlsx格式

4-2、读写Excel文件

4-3、操作单元格

4-4、创建和修改工作表

4-5、样式设置

4-6、图表和公式

4-7、支持数字和日期格式

二、openpyxl库的优缺点

1、优点

1-1、支持现代Excel格式

1-2、功能丰富

1-3、易于使用

1-4、与Excel兼容性

1-5、性能良好

1-6、社区支持

1-7、跨平台

2、缺点

2-1、不支持旧版格式

2-2、某些特性支持有限

2-3、内存占用

2-4、文档和示例可能不足

2-5、依赖关系

2-6、学习曲线

三、openpyxl库的用途

1、读取Excel文件

2、写入Excel文件

3、修改Excel文件

4、自动化

5、与Excel交互

6、数据迁移和转换

7、创建模板化的报告

四、如何学好openpyxl库?

1、获取openpyxl库的属性和方法

2、获取openpyxl库的帮助信息

3、实战案例

3-201、获取单元格区域内的值,并使其矩阵化

3-202、获取单元格内的前缀字符

3-203、判断单元格内的数字是否为文本字符

3-204、获取单元格的格式

3-205、获取单元格的字体(Font)对象

3-206、获取单元格的内部(Interior)对象

3-207、获取单元格的边框(Borders)对象

3-208、获取单元格边框线的状态

3-209、获取单元格的样式(Style)对象

3-210、获取单元格的条件格式

3-211、获取单元格的输入规则(有效性设置)

3-212、获取单元格的超链接

3-213、获取单元格的批注

3-214、获取单元格的大小(行高和列宽)

3-215、获取单元格的坐标

3-216、向单元格输入数值

3-217、向单元格输入字符串

3-218、向单元格输入数字字符

3-219、向单元格输入日期

3-220、向单元格输入时间

五、推荐阅读

1、Python筑基之旅

2、Python函数之旅

3、Python算法之旅

4、Python魔法之旅

5、博客个人主页

一、 openpyxl库的由来

        openpyxl库的由来可以总结为以下几点:

1、背景

        在openpyxl库诞生之前,Python中缺乏一个专门用于读取和编写Office Open XML格式(如Excel 2010及更高版本的.xlsx文件)的库。

2、起源

        openpyxl库的创建是为了解决上述提到的Python在处理Excel文件时的不足,它的开发受到了PHPExcel团队的启发,因为openpyxl最初是基于PHPExcel的。

3、发展

        随着时间的推移,openpyxl逐渐发展成为一个功能强大的Python库,专门用于处理Excel文件。它支持Excel 2010及更高版本的文件格式,并提供了丰富的API,用于读取、写入、修改Excel文件。

4、特点
4-1、支持.xlsx格式

        openpyxl主要用于处理Excel 2010及更新版本的.xlsx文件。

4-2、读写Excel文件

        使用openpyxl可以读取现有的Excel文件,获取数据,修改数据,并保存到新的文件中。

4-3、操作单元格

        openpyxl允许用户按行、列或具体的单元格进行数据的读取和写入。

4-4、创建和修改工作表

        用户可以创建新的工作表,复制和删除现有的工作表,设置工作表的属性等。

4-5、样式设置

        openpyxl支持设置单元格的字体、颜色、边框等样式。

4-6、图表和公式

        用户可以通过openpyxl创建图表、添加公式等。

4-7、支持数字和日期格式

        openpyxl能够正确处理数字和日期格式,确保在Excel中显示正确的格式。

        综上所述,openpyxl库的出现填补了Python在处理Excel文件时的空白,经过不断的发展和完善,成为了一个功能丰富、易于使用的Python库。

二、openpyxl库的

        openpyxl库是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库,它基于Python,并且对于处理Excel文件提供了很多便利的功能,其主要点有:

1、优点
1-1、支持现代Excel格式

        openpyxl支持.xlsx格式的Excel文件,这是Excel 2010及更高版本使用的格式,也是目前广泛使用的格式。

1-2、功能丰富

        openpyxl提供了创建、修改和保存Excel工作簿、工作表、单元格、图表、公式、图像等功能。

1-3、易于使用

        openpyxl的API设计得相对直观,使得Python开发者能够很容易地掌握和使用。

1-4、与Excel兼容性

        openpyxl能够处理Excel文件中的很多复杂特性,如公式、样式、条件格式等,这确保了与Excel的良好兼容性。

1-5、性能良好

        在处理大型Excel文件时,openpyxl通常能够保持较好的性能。

1-6、社区支持

        openpyxl是一个开源项目,拥有活跃的社区支持和维护,这意味着开发者可以获得帮助和修复错误的快速响应。

1-7、跨平台

        openpyxl可以在不同的操作系统上运行,包括Windows、Linux和macOS等。

2、缺点
2-1、不支持旧版格式

        openpyxl不支持较旧的.xls格式(Excel 97-2003)。如果需要处理这种格式的文件,需要使用其他库如xlrd和xlwt(尽管这些库也面临一些兼容性和维护问题)。

2-2、某些特性支持有限

        虽然openpyxl支持许多Excel特性,但可能对于某些高级或特定的Excel功能支持有限或不支持。

2-3、内存占用

        在处理大型Excel文件时,openpyxl可能会占用较多的内存。这是因为openpyxl会将整个工作簿加载到内存中。

2-4、文档和示例可能不足

        尽管openpyxl的文档相对完整,但对于某些高级功能或特定用例,可能缺乏足够的示例或详细解释。

2-5、依赖关系

        openpyxl依赖于lxml和et_xmlfile这两个Python库来处理XML和Excel文件,在某些环境中,可能需要额外安装这些依赖项。

2-6、学习曲线

        虽然openpyxl的API设计得相对直观,但对于初学者来说,可能需要一些时间来熟悉和掌握其用法。

三、openpyxl库的用途

        openpyxl是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它是用Python编写的,不需要Microsoft Excel,并且支持多种Excel数据类型,包括图表、图像、公式等,其主要用途有:

1、读取Excel文件

        你可以使用openpyxl来读取 Excel 文件中的数据,如单元格值、工作表名称、公式等,它支持多种数据类型,如字符串、数字、日期等。

2、写入Excel文件

        使用openpyxl,你可以创建新的Excel文件或向现有文件添加数据,你可以设置单元格的字体、颜色、边框等样式,你还可以添加图表、图像和其他复杂的Excel功能。

3、修改Excel文件

        你可以使用openpyxl来修改现有的Excel文件,如更改单元格值、添加或删除工作表等,这对于自动化数据处理和报告生成非常有用。

4、自动化

        openpyxl可以与其他Python库和框架(如 pandas、numpy、matplotlib 等)结合使用,以自动化数据处理和分析任务。你可以编写脚本来从多个数据源收集数据,将数据整合到 Excel 文件中,并执行各种数据分析任务。

5、与Excel交互

        如果你正在开发需要与Excel交互的应用程序或工具,openpyxl可以提供一个强大的API来处理Excel文件,它允许你读取和写入Excel文件,而无需依赖Microsoft Excel或其他第三方库。

6、数据迁移和转换

        使用openpyxl,你可以轻松地将数据从Excel文件迁移到其他数据库或文件格式,或将其他数据源的数据导入到Excel文件中。

7、创建模板化的报告

        你可以使用openpyxl来创建模板化的Excel报告,并在需要时填充数据,这对于需要定期生成具有一致格式和布局的报告的场景非常有用。

        总之,openpyxl是一个功能强大的库,可用于在Python中处理Excel文件,它提供了灵活的API来读取、写入、修改和自动化Excel文件的各个方面。

四、如何学好openpyxl库?

1、获取openpyxl库的属性和方法

        用print()和dir()两个函数获取openpyxl库所有属性和方法的列表

# ['DEBUG', 'DEFUSEDXML', 'LXML', 'NUMPY', 'Workbook', '__author__', '__author_email__', '__builtins__', '__cached__', 
# '__doc__', '__file__', '__license__', '__loader__', '__maintainer_email__', '__name__', '__package__', '__path__',
# '__spec__', '__url__', '__version__', '_constants', 'cell', 'chart', 'chartsheet', 'comments', 'compat', 'constants',
# 'descriptors', 'drawing', 'formatting', 'formula', 'load_workbook', 'open', 'packaging', 'pivot', 'reader', 'styles',
# 'utils', 'workbook', 'worksheet', 'writer', 'xml']
2、获取openpyxl库的帮助信息

        用help()函数获取openpyxl库的帮助信息

Help on package openpyxl:

NAME
    openpyxl - # Copyright (c) 2010-2024 openpyxl

PACKAGE CONTENTS
    _constants
    cell (package)
    chart (package)
    chartsheet (package)
    comments (package)
    compat (package)
    descriptors (package)
    drawing (package)
    formatting (package)
    formula (package)
    packaging (package)
    pivot (package)
    reader (package)
    styles (package)
    utils (package)
    workbook (package)
    worksheet (package)
    writer (package)
    xml (package)

SUBMODULES
    constants

DATA
    DEBUG = False
    DEFUSEDXML = False
    LXML = True
    NUMPY = True
    __author_email__ = 'charlie.clark@clark-consulting.eu'
    __license__ = 'MIT'
    __maintainer_email__ = 'openpyxl-users@googlegroups.com'
    __url__ = 'https://openpyxl.readthedocs.io'

VERSION
    3.1.3

AUTHOR
    See AUTHORS

FILE
    e:\python_workspace\pythonproject\lib\site-packages\openpyxl\__init__.py
3、实战案例
3-201、获取单元格区域内的值,并使其矩阵化
# 3-201、获取单元格区域内的值,并使其矩阵化
from openpyxl import load_workbook
# 加载工作簿
workbook = load_workbook('example.xlsx')
# 选择工作表(例如,第一个工作表)
worksheet = workbook.active  # 或者使用 worksheet = workbook['Sheet1'] 来指定工作表名
# 定义单元格区域(例如,从 A1 到 C3)
start_row, start_col = 1, 1  # A1
end_row, end_col = 3, 3  # C3
# 初始化一个空列表来存储值
values_matrix = []
# 遍历单元格区域
for row in range(start_row, end_row + 1):
    row_values = []
    for col in range(start_col, end_col + 1):
        cell_value = worksheet.cell(row=row, column=col).value
        row_values.append(cell_value)
    values_matrix.append(row_values)
# 现在 values_matrix 是一个二维列表,包含了单元格区域内的所有值
print(values_matrix)
3-202、获取单元格内的前缀字符
# 3-202、获取单元格内的前缀字符
# 导入 openpyxl 库
import openpyxl
# 打开 Excel 文件
wb = openpyxl.load_workbook('example.xlsx')
# 选择目标工作表
ws = wb['Sheet']
# 获取目标单元格的值,例如 A1 单元格
cell_value = ws['A1'].value
# 获取前缀字符(假设你想获取前3个字符)
prefix_length = 3
prefix_chars = cell_value[:prefix_length]
# 打印前缀字符
print(prefix_chars)
3-203、判断单元格内的数字是否为文本字符
# 3-203、判断单元格内的数字是否为文本字符
# 导入 openpyxl 库
import openpyxl
# 打开 Excel 文件
wb = openpyxl.load_workbook('example.xlsx')
# 选择目标工作表
ws = wb['Sheet']
# 遍历工作表所有单元格
for row in ws.iter_rows():
    for cell in row:
        if cell.data_type == 's':
            print(f"单元格 {cell.coordinate} 内容 '{cell.value}' 是文本字符")
        else:
            print(f"单元格 {cell.coordinate} 内容 '{cell.value}' 不是文本字符")
3-204、获取单元格的格式
# 3-204、获取单元格的格式
# 导入openpyxl库
import openpyxl
# 打开Excel文件
wb = openpyxl.load_workbook('example.xlsx')
# 选择目标工作表
ws = wb['Sheet']
# 遍历工作表所有单元格
for row in ws.iter_rows():
    for cell in row:
        cell_format = cell.number_format
        print(f"单元格 {cell.coordinate} 的数字格式为: {cell_format}")
3-205、获取单元格的字体(Font)对象
# 3-205、获取单元格的字体(Font)对象
# 导入openpyxl库
import openpyxl
from openpyxl.styles import Font
# 打开Excel文件
wb = openpyxl.load_workbook('example.xlsx')
# 选择目标工作表
ws = wb['Sheet']
# 获取目标单元格,例如 A1 单元格
cell = ws['A1']
# 获取单元格的字体对象
cell_font = cell.font
# 打印单元格字体相关信息
print(f"单元格 A1 的字体名称为: {cell_font.name}")
print(f"单元格 A1 的字体大小为: {cell_font.size}")
print(f"单元格 A1 的字体颜色为: {cell_font.color}")
print(f"单元格 A1 是否加粗: {cell_font.bold}")
print(f"单元格 A1 是否斜体: {cell_font.italic}")
3-206、获取单元格的内部(Interior)对象
# 3-206、获取单元格的内部(Interior)对象
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
# 加载工作簿
workbook = load_workbook('example.xlsx')
# 选择工作表
worksheet = workbook.active
# 选择一个单元格
cell = worksheet['A1']
# 获取单元格的填充样式
if cell.fill is not None:
    # cell.fill 是一个 PatternFill 对象,它继承了 Interior
    fill = cell.fill
    # 打印填充类型(solid, gradient, etc.)
    print(fill.fill_type)
    # 如果填充类型是 solid,你可以获取前景色
    if fill.fill_type == "solid":
        fgColor = fill.start_color.index  # 这通常是一个 RGB 颜色的索引
        print(fgColor)  # 这可能是一个如 'FF0000' 的十六进制颜色字符串
        # 注意:直接打印 fgColor.rgb 会得到类似 <openpyxl.styles.colors.RGB object> 的结果
        # 要获取 RGB 值,你可能需要访问 fgColor.rgb 的属性(但 openpyxl 可能不直接提供 RGB 值作为字符串)
else:
    print("The cell has no fill style.")
# 注意:openpyxl 的 API 可能会随版本更新而变化
# 总是查阅官方文档以获取最新信息
3-207、获取单元格的边框(Borders)对象
# 3-207、获取单元格的边框(Borders)对象
import openpyxl
from openpyxl.styles import Border, Side
# 打开Excel文件
wb = openpyxl.load_workbook('example.xlsx')
# 选择目标工作表
ws = wb['Sheet']
# 获取目标单元格,例如 A1 单元格
cell = ws['A1']
# 获取单元格的边框对象
cell_border = cell.border
# 打印单元格边框的相关信息示例
print(f"单元格 A1 的左边框样式为: {cell_border.left.border_style}")
print(f"单元格 A1 的左边框颜色为: {cell_border.left.color.rgb if cell_border.left.color else '未设置'}")
print(f"单元格 A1 的上边框样式为: {cell_border.top.border_style} (如果为None则表示未设置)")
# 修改单元格的边框样式示例
thin_border = Side(border_style="thin", color="FF0000")  # 例如,这里将颜色设置为红色
cell.border = Border(left=thin_border, right=thin_border, top=thin_border, bottom=thin_border)
# 保存修改后的Excel文件
wb.save('example_modified.xlsx')  # 最好保存为新的文件名,以防原始文件损坏
3-208、获取单元格边框线的状态
# 3-208、获取单元格边框线的状态
import openpyxl
from openpyxl.styles import Border, Side
# 打开Excel文件
wb = openpyxl.load_workbook('example.xlsx')
# 选择目标工作表
ws = wb['Sheet']
# 获取目标单元格,例如 A1 单元格
cell = ws['A1']
# 获取单元格的边框对象
cell_border = cell.border
# 检查并打印各个边框的状态
print(f"左边框样式: {cell_border.left.border_style if cell_border.left.border_style else '未设置'}")
print(f"右边框样式: {cell_border.right.border_style if cell_border.right.border_style else '未设置'}")
print(f"上边框样式: {cell_border.top.border_style if cell_border.top.border_style else '未设置'}")
print(f"下边框样式: {cell_border.bottom.border_style if cell_border.bottom.border_style else '未设置'}")
# 如果需要,也可以检查边框的颜色
print(f"左边框颜色: {cell_border.left.color.rgb if cell_border.left.color else '未设置'}")
# 注意:如果边框样式为None,颜色属性可能也会是None,即使单元格曾经设置过颜色
# ... 接下来可以执行其他操作 ...
# 关闭工作簿(虽然这通常不是必需的,因为Python的垃圾回收会处理)
# wb.close()
3-209、获取单元格的样式(Style)对象
# 3-209、获取单元格的样式(Style)对象
import openpyxl
from openpyxl.styles import Font, Fill, PatternFill, Border, Side, Alignment
# 打开Excel文件
wb = openpyxl.load_workbook('example.xlsx')
# 选择目标工作表
ws = wb['Sheet']
# 获取目标单元格,例如A1单元格
cell = ws['A1']
# 获取字体样式
font = cell.font
if font:
    print(f"字体名称: {font.name}")
    print(f"字体大小: {font.size}")
    # ... 可以继续检查其他字体属性 ...
# 获取填充样式
fill = cell.fill
if fill and fill.start_color:
    print(f"填充颜色: {fill.start_color.index}")  # 或者使用 fill.fgColor.rgb 来获取RGB值(如果设置了的话)
# 获取边框样式
border = cell.border
if border:
    print(f"左边框样式: {border.left.border_style if border.left.border_style else '未设置'}")
    # ... 可以继续检查其他边框属性 ...
# 获取数字格式
number_format = cell.number_format
print(f"数字格式: {number_format}")
# 获取对齐方式(这也是样式的一部分)
alignment = cell.alignment
if alignment:
    print(f"水平对齐: {alignment.horizontal}")
    print(f"垂直对齐: {alignment.vertical}")
    # ... 可以继续检查其他对齐属性 ...
# ... 接下来可以执行其他操作 ...
# 关闭工作簿(虽然这通常不是必需的,因为Python的垃圾回收会处理)
# wb.close()
3-210、获取单元格的条件格式
略,openpyxl库暂不支持此功能,需要借助其他库实现
3-211、获取单元格的输入规则(有效性设置)
# 3-211、获取单元格的输入规则(有效性设置)
import openpyxl
from openpyxl.worksheet.datavalidation import DataValidation
# 打开Excel文件
wb = openpyxl.load_workbook('example.xlsx')
# 选择目标工作表
ws = wb['Sheet']
# 假设我们要检查的单元格是 A1
target_cell = 'A1'
# 遍历工作表上的所有数据验证规则
for data_val in ws.data_validations.dataValidation:
    # 检查规则是否应用于特定的单元格或单元格范围
    if target_cell in str(data_val.sqref):
        print(f"数据验证规则应用于: {data_val.sqref}")
        print(f"允许的类型: {data_val.type}")
        print(f"允许的公式: {data_val.formula1}(如果适用)")
        print(f"其他公式(例如错误消息): {data_val.formula2}(如果适用)")
        print(f"显示错误消息: {data_val.showErrorMessage}")
        print(f"显示输入消息: {data_val.showInputMessage}")
        print(f"错误消息标题: {data_val.errorTitle}")
        print(f"错误消息: {data_val.error}")
        print(f"输入消息标题: {data_val.promptTitle}")
        print(f"输入消息: {data_val.prompt}")
        # 其他可能的属性还包括:showDropDownArrow, showErrorBox, allowBlank 等
        # ...
        print()  # 分隔不同规则的输出
# ... 接下来可以执行其他操作 ...
# 关闭工作簿(虽然这通常不是必需的,因为Python的垃圾回收会处理)
# wb.close()
3-212、获取单元格的超链接
# 3-212、获取单元格的超链接
import openpyxl
# 打开 Excel 文件
wb = openpyxl.load_workbook('example.xlsx')
# 选择目标工作表
ws = wb['Sheet']
# 获取单元格D2的超链接
hyperlink = ws.cell(row=2, column=4).hyperlink
# 打印单元格D2的超链接信息
if hyperlink is not None:
    print(f"链接地址: {hyperlink.target}")
    print(f"显示文本: {hyperlink.display}")
# 关闭Excel文件前保存修改
wb.save('example.xlsx')
3-213、获取单元格的批注
# 3-213、获取单元格的批注
import openpyxl
# 打开Excel文件
wb = openpyxl.load_workbook('example.xlsx')
# 选择目标工作表
ws = wb['Sheet1']
# 获取单元格A1的批注
comment = ws.cell(row=1, column=1).comment
# 打印单元格A1的批注信息
if comment:
    print(f"作者: {comment.author}")
    print(f"内容: {comment.text}")
# 关闭Excel文件前保存修改
wb.save('example.xlsx')
3-214、获取单元格的大小(行高和列宽)
# 3-214、获取单元格的大小(行高和列宽)
import openpyxl
# 打开Excel文件
wb = openpyxl.load_workbook('example.xlsx')
# 选择目标工作表
ws = wb.active  # 或者 ws = wb['Sheet1'] 如果你知道具体的sheet名
# 获取列宽
for column, dim in ws.column_dimensions.items():
    print(f"Column {column} has a width of {dim.width} characters (1/256th of the width of the zero character)")
# 获取行高(仅当行高已被设置时)
for row in ws.iter_rows(min_row=1, max_row=ws.max_row):
    for cell in row:
        # 检查row_dimensions中是否有该行的条目
        if ws.row_dimensions.get(cell.row):
            print(f"Row {cell.row} has a height of {ws.row_dimensions[cell.row].height} points")
        else:
            print(f"Row {cell.row} height is not set explicitly")
3-215、获取单元格的坐标
# 3-215、获取单元格的坐标
import openpyxl
# 打开Excel文件
wb = openpyxl.load_workbook('example.xlsx')
# 选择目标工作表
ws = wb.active  # 或者 ws = wb['Sheet1'] 如果你知道具体的sheet名
# 遍历工作表中的所有单元格
for row in ws.iter_rows(min_row=1, max_col=ws.max_column, max_row=ws.max_row, values_only=False):
    for cell in row:
        print(f"单元格的坐标是: ({cell.row}, {cell.column})")
3-216、向单元格输入数值
# 3-216、向单元格输入数值
from openpyxl import Workbook
# 创建一个新的工作簿
wb = Workbook()
# 激活默认的工作表
ws = wb.active
# 选择要写入的单元格,例如 A1
cell = ws['A1']
# 向单元格输入数值
cell.value = 123
# 保存工作簿到文件中
wb.save('example.xlsx')
3-217、向单元格输入字符串
# 3-217、向单元格输入字符串
from openpyxl import Workbook
# 创建一个新的工作簿
wb = Workbook()
# 激活默认的工作表
ws = wb.active
# 选择要写入的单元格,例如 A1
cell = ws['A1']
# 向单元格输入字符串
cell.value = 'Myelsa'
# 保存工作簿到文件中
wb.save('example.xlsx')
3-218、向单元格输入数字字符
# 3-218、向单元格输入数字字符
from openpyxl import Workbook
# 创建一个新的工作簿
wb = Workbook()
# 激活默认的工作表
ws = wb.active
# 选择要写入的单元格,例如 A1
cell = ws['A1']
# 向单元格输入数字字符
cell.value = '168'
# 保存工作簿到文件中
wb.save('example.xlsx')
3-219、向单元格输入日期
# 3-219、向单元格输入日期
from openpyxl import Workbook
from datetime import datetime
# 创建一个新的工作簿
wb = Workbook()
# 激活默认的工作表
ws = wb.active
# 选择要写入的日期单元格,例如 B2
cell = ws['B2']
# 创建一个日期对象
today = datetime.today()
# 向单元格输入日期
cell.value = today
# 保存工作簿到文件中
wb.save('example.xlsx')
3-220、向单元格输入时间
# 3-220、向单元格输入时间
from openpyxl import Workbook
from datetime import datetime
# 创建一个新的工作簿
wb = Workbook()
# 激活默认的工作表
ws = wb.active
# 选择要写入时间的单元格,例如 C3
cell = ws['C3']
# 创建一个时间对象
now = datetime.now()
# 向单元格输入时间
cell.value = now
# 保存工作簿到文件中
wb.save('example.xlsx')

五、推荐阅读

1、Python筑基之旅
2、Python函数之旅
3、Python算法之旅
4、Python魔法之旅
5、博客个人主页
  • 37
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神奇夜光杯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值