openpyxl——学习笔记总结1

一、使用样式(working with styles)

介绍(introduction):

        一个空白的sheet,你可以按照自己的想象设置字体的大小、颜色、字体、下划线等,对于每个单元格可以设置单元的相关属性(填充颜色、边框),单元格中值的对齐方式,sheet的保护等进行设置,

1.1 设置单元格中字体的大小、颜色和下划线

1.11 函数:
from openpyxl.styles import Font, PatternFill
1.12 font的语法: 
font = Font(name='Calibri',      # 字体名称,注意中文字体前加u
                size=11,         # 字号的大小,默认
                bold=False,      # True(加粗),False(不加粗)
                italic=False,    # True(倾斜),False(不倾斜)
                vertAlign=None,  # 'superscript'(上标)/'subscript'(下标)
                underline='none',# 'single'(单下划线)/'double'(双下划线)/
                                 #  singleAccounting(会计用单下划线)/
                                 #   doubleAccounting(会计用双下划线)
                strike=False,    # (True,显示删除线),(False,不显示删除线)
                color='FF000000' # 字体的颜色
            )

经验:在设置color的时候可以现在excel中选定好颜色,然后复制HEX,注意不要复制#

1.13 实例:
from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
# 或者也有这样的写法
# from openpyxl.styles import * 
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl import load_workbook
wb = load_workbook(filename=文件名称)
ws = wb.active
# 如果有DataFrame,可以将其写入ws中
rows = dataframe_to_rows(df, index=False, header=True)  # df是一个DataFrame,index=None是否包含行索引,默认是True,header=None,是否包含列名,默认是True
for r_idx, row in enumerate(rows, start=4):
    for c_idx, value in enumerate(row, start=1):
        new_worksheet.cell(row=r_idx, column=c_idx, value=value)
for col_idx in range(1, 19): 
    cell = ws.cell(row=4, column=col_idx)
    cell.font = Font(size=10,name='DengXian')
from openpyxl import Workbook
from openpyxl.styles import *

wb = Workbook()
ws = wb.active
# 设置A1单元格中的文本水平和垂直居中对齐,并自动换行
ws['A1'] = '默认'
ws['A1'].alignment = Alignment()

ws['A2'] = '水平居中'
ws['A2'].alignment = Alignment(horizontal='center')
ws.cell(row = 2,column=1).fill=PatternFill(start_color='000000',end_color='000000',fill_type='solid')
ws.cell(row = 2,column=1).font = Font(color='F2F2F2',bold=True,size = 20,underline='single',name = 'DengXian')
ws['A3'] = '水平居中,自动换行'
ws['A3'].alignment = Alignment(horizontal='center',wrap_text=True)
ws.cell(row = 3,column=1).fill=PatternFill(start_color='F27CB4',end_color='F27CB4',fill_type='solid')
ws.cell(row = 3,column=1).font = Font(color='000000',size = 20,strike='True',name = '宋体')
wb.save('example.xlsx')

输出: 

 

 enumerate()语法和介绍

dataframe_to_rows的语法和介绍

1.2 单元格填充颜色

1.21 函数:
from openpyxl.styles import PatternFill
1.22 语法:

PatternFill是用于设置单元格填充样式的类。它允许你设置单元格的填充类型、颜色和图案类型,从而创建丰富多彩的单元格样式。

PatternFill类的构造函数有两种不同的形式,分别是:

PatternFill(fill_type=None,   #表示填充类型,例如:'solid'、'darkDown'等
            fgColor=None,     #表示前景色,即填充的颜色
            bgColor=None,     #表示背景色,一般用于图案填充
            patternType=None  #表示填充的图案类型,例如:'solid'、'darkDown'等
            )

PatternFill(fill_type=None, 
            start_color=None, # 表示填充的起始颜色
            end_color=None   # 表示填充的结束颜色
            )
 PatternFill的参数fill_type和patternType的选项
  1. solid:使用单一颜色填充单元格。
  2. darkGray:使用深灰色填充单元格。
  3. mediumGray:使用中灰色填充单元格。
  4. lightGray:使用浅灰色填充单元格。
  5. gray125:使用灰色125填充单元格。
  6. gray0625:使用灰色0625填充单元格。
  7. lightVertical:使用浅色垂直线填充单元格。
  8. lightHorizontal:使用浅色水平线填充单元格。
  9. darkVertical:使用深色垂直线填充单元格。
  10. darkHorizontal:使用深色水平线填充单元格。
  11. dashedVertical:使用虚线垂直线填充单元格。
  12. dashedHorizontal:使用虚线水平线填充单元格。
  13. diagonalStripe:使用对角线填充单元格。
  14. reverseDiagonalStripe:使用反向对角线填充单元格。
  15. thinDiagonalCrosshatch:使用细斜线填充单元格。
  16. thickDiagonalCrosshatch:使用粗斜线填充单元格。
  17. thinHorizontalCrosshatch:使用细水平线填充单元格。
  18. thickHorizontalCrosshatch:使用粗水平线填充单元格。
  19. thinVerticalCrosshatch:使用细垂直线填充单元格。
  20. thickVerticalCrosshatch:使用粗垂直线填充单元格。

对于fill_type和patternType不等于solid的情况的颜色http://t.csdnimg.cn/uQk8C

图来自源http://t.csdnimg.cn/uQk8C

1.23 实例:
def find_color(values,lists,work_sheet,n,yn,color,n2):
    #   values:需要查找的值 
    #    lists:在那个list查找
    # work_sheet:在那个sheet中操作
    #        n:第几行
    #   yn :是否需要填充颜色
    #color:填充的颜色
    # n2:填充数量
    from openpyxl.styles.colors import Color
    from openpyxl.styles import PatternFill
    if values in lists:
    # 获取值在列表中的位置
        index = lists.index(values)+1
            # 获取列字母
        column_letter = work_sheet[n][index].column_letter
    else:
        print(values)
    if yn == "Y":
        for i in range(index,index+n2):
            cell = work_sheet.cell(row=n, column=i) # 获得第n 行第i列的单元格
            cell.fill = PatternFill(start_color=color, end_color=color, fill_type='solid') 
work_sheet.cell(row=n, column=i,value= "值")#获得第n 行第i列的单元格并将值写入到                                                                        
                                                         #单元格中
print(work_sheet.cell(row=n, column=i).value)# 读取单元格的值


from openpyxl import Workbook
from openpyxl import load_workbook
wb = load_workbook(r'.\test.xlsx')
ws = wb['sheet3']
list1 = ['column1','column2','column3','column4']
for i in range(1,5):
    print(ws.cell(row=1, column=i).value)
    ws.cell(row=1, column=i,value=list1 [i-1])#获得第n 行第i列的单元格并将值写入到      
    print(ws.cell(row=1, column=i).value)
values = ['column1','column2','column3','column4']
color = ['B7DEE8','F79646', 'E6B8B7','F79646']
number=[1,1,1,1]
for i in range(0,len(values)-1):
    find_color(values = values[i]
               ,lists = values
               ,work_sheet = ws
               ,n = 1
               ,yn = "Y"
               ,color = color[i]
               ,n2 = number[i])
wb.save(.\test2.xlsx')

output :

for i in range(0,len(values)):
    find_color(values = values[i]
               ,lists = values
               ,work_sheet = ws
               ,n = 1
               ,yn = "Y"
               ,color = color[i]
               ,n2 = number[i])

如果将代码改成这样,会报错,哪个大神知道什么原因,请指教。谢谢!非常感谢!

1.3 单元格对其方式

1.31 函数
from openpyxl.styles import Alignment
1.32 语法
alignment = Alignment(horizontal='general', #水平对齐方式,可选值为center、left、right
                      vertical='bottom',    #垂直对齐方式,可选值                        
                                            #为center、top、bottom
                      text_rotation=0,      #文本旋转角度,取值范围为-90到90,默认为0
                      wrap_text=False,      #是否自动换行,取值为True或False,默认为False
                      shrink_to_fit=False,  #是否缩小字体以适应单元格宽度,取值为True或False
                      indent=0              #缩进级别,取值为0到15,默认为0
                        )
实例:简单的介绍一下几个常用的案例 
from openpyxl import Workbook
from openpyxl.styles import *

wb = Workbook()
ws = wb.active
# 设置A1单元格中的文本水平和垂直居中对齐,并自动换行
ws['A1'] = '默认'
ws['A1'].alignment = Alignment()

ws['A2'] = '水平居中'
ws['A2'].alignment = Alignment(horizontal='center')
ws.cell(row = 2,column=1).fill=PatternFill(start_color='000000',end_color='000000',fill_type='solid')
ws.cell(row = 2,column=1).font = Font(color='F2F2F2',bold=True,size = 20,underline='single',name = 'DengXian')
ws['A3'] = '水平居中,自动换行'
ws['A3'].alignment = Alignment(horizontal='center',wrap_text=True)
ws.cell(row = 3,column=1).fill=PatternFill(start_color='F27CB4',end_color='F27CB4',fill_type='solid')
ws.cell(row = 3,column=1).font = Font(color='000000',size = 20,strike='True',name = '宋体')
wb.save('example.xlsx')

输出: 

从结果中可以看出在设置单元格的对齐方式的时候,需要考虑字体,颜色,行高和列宽,结合以上的设置,才能设计更好的表格。

1.4 设置数字格式

1.41 常见的数字格式

”General“

通用格式
‘0.00%’百分比格式(小数点后有几个0就是保留几位小数)
‘€#,##0.00’货币格式
‘0.00E+00’科学计数法格式
‘yyyy-mm-dd’日期格式
‘hh:mm:ss时间格式
自定义格式可以使用Excel中的自定义格式代码,例如’0.00" kg"’
0.00

保留两位小数,

同理小数点之后有几个0就是保留几个小数

#,##0千分位表示
#,##0.00千分位表示并保留两位小数

'0.00;[Red]-0.00'

负数显示为红色,并保留两位小数

其他数字格式

实例1:
from openpyxl import Workbook
from openpyxl.styles import *

wb = Workbook()
ws = wb.active
# 设置单个单元格的数字格式
numbers_list = [10,0.34345,.0312456,12345679,123456789,'2023/04/05',12.34566,10235,10234.123,100000]

format_list = ['General','0.00%','0%','€#,##0.00','0.00E+00','yyyy-mm-dd','0.00','#,##0','#,##0.00','#,##0_);(#,##0)']

for i in range(1,len(numbers_list)):
    ws[f'A{i}']  = numbers_list[i-1]
    ws[f'A{i}'] .number_format = format_list[i-1]

# 对一整行设置格式
for row in ws.iter_rows(min_row=2, max_row=10, min_col=1, max_col=1):
    for cell in row:
        cell.number_format = '0.00;[Red]-0.00'

wb.save('example.xlsx')

输出:

总结:再最后的iter_rows,可以通过控制参数来确定你需要设定格式的行数、列数和位置。如果你想手动输入的时候(即空行)也能设置为该格式,可以将最大行的值设置的稍微大一些。

使用openpyxl.styles.numbers模块中的numbers设置数字格式
from openpyxl.styles import numbers

以下是一些常用的numbers常量:

实例2: 

 FORMAT_GENERAL  :    通用格式,不应用任何特定的数字格式
 FORMAT_TEXT  :    文本格式,
 FORMAT_NUMBER  :    数字格式,包括整数、小数、百分比等
 FORMAT_PERCENTAGE  :    百分比格式,将数字乘以100并显示为百分比形式
 FORMAT_DATE  :    日期格式
 FORMAT_TIME  :    时间格式
 FORMAT_DATETIME  :    日期时间格式
FORMAT_SCIENTIFIC  :    科学计数法格式,将数字显示为科学计数法形式
FORMAT_ACCOUNTING  :    会计格式,将数字显示为会计格式,包括货币符号、千位分隔符等

from openpyxl import Workbook
from openpyxl.styles import *

wb = Workbook()
ws = wb.active
# 设置单个单元格的数字格式
numbers_list = [10,0.34345,.0312456,12345679,123456789,'2023/04/05',12.34566,10235,10234.123,100000]

format_list = ['General','0.00%','0%','€#,##0.00','0.00E+00','yyyy-mm-dd','0.00','#,##0','#,##0.00','#,##0_);(#,##0)']
for i in range(1,len(numbers_list)):
    ws[f'A{i}']  = numbers_list[i-1]
    ws[f'A{i}'] .number_format = format_list[i-1]
format_list2 = ['numbers.FORMAT_GENERAL','numbers.FORMAT_PERCENTAGE_00','numbers.FORMAT_PERCENTAGE',
                'numbers.FORMAT_ACCOUNTING','numbers.FORMAT_SCIENTIFIC','numbers.FORMAT_DATE','numbers.FORMAT_NUMBER_00',
                'numbers.FORMAT_ACCOUNTING_#,##0','numbers.FORMAT_TEXT','numbers.FORMAT_NUMBER_00']
for i in range(1,len(numbers_list)):
    ws[f'B{i}']  = numbers_list[i-1]
    ws[f'B{i}'] .number_format = format_list2[i-1]
# 对一整列数字格式进行设置
for cell in ws.iter_cols(min_col=1, max_col=1):
    for c in cell:
        c.number_format = "0%"   
for cell in ws.iter_cols(min_col=2, max_col=2):
    for c in cell:
        c.number_format = numbers.FORMAT_PERCENTAGE_00
wb.save('example.xlsx')

注意:此处在使用 numbers.FORMAT_PERCENTAGE_00的时候会出现程序运行成功,但是在保存的表格中并未按照设定的格式展示数据的情况,所以建议使用1.41使用的方法设定格式。

1.5  对一整行/列填充和去除颜色

去除颜色的原理就是将填充的颜色设置为白色。

import openpyxl
from openpyxl.styles import PatternFill

# 打开一个工作簿
workbook = openpyxl.load_workbook('your_workbook.xlsx')

# 选择一个工作表
sheet = workbook.active

# 对一整行进行填充颜色
for cell in sheet[1]:  # 假设我们选择第一行
    cell.fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type = "solid")

# 去除一整行的颜色
for cell in sheet[1]:  # 假设我们选择第一行
    cell.fill = PatternFill(start_color="FFFFFFFF", end_color="FFFFFFFF", fill_type = "solid")

# 对一整列进行填充颜色
for row in sheet.iter_rows(min_row=1, max_row=sheet.max_row, min_col=1, max_col=1):  # 假设我们选择第一列
    for cell in row:
        cell.fill = PatternFill(start_color="00FF00", end_color="00FF00", fill_type = "solid")

# 去除一整列的颜色
for row in sheet.iter_rows(min_row=1, max_row=sheet.max_row, min_col=1, max_col=1):  # 假设我们选择第一列
    for cell in row:
        cell.fill = PatternFill(start_color="FFFFFFFF", end_color="FFFFFFFF", fill_type = "solid")

# 保存工作簿
workbook.save('your_workbook.xlsx')

1.6 根据键值填写特定单元格、行、列的值

1.61 填写特定单元格的值

背景:很多excel表格是有格式的,如果存在一些数据是不能被修改的,我们如何在不改变其他单元格或者主键的顺序的情况下将数据填写正确呢!

分析:首先我们需要知道单元格的位置信息和需要填充的内容。然后根据主键将值填写在特定的单元格内。

实例:

import pandas as pd 
sales = ['张三','李四','王五']

ages = [12,14,13]
df = pd.DataFrame(zip(sales,ages),columns=['sales','ages'])
print(df)
from openpyxl import Workbook
wb = Workbook() # 新建一个工作簿
ws = wb.active 
for i in range(0,len(sales)):
    ws[f'A{i+2}'].value = sales[-i-1]
ws[f'A{1}'].value  = 'sales'
ws['B1'].value  = 'ages'

# 此时ws中的第一列的值为'sales'
values = ws.values
df2 = pd.DataFrame(values)
print(df2)

# 我们需要sales的年龄填写到相对应的B列中
for rows in range(2,5):
    if ws[f'A{rows}'].value  in sales :
        ws[f'B{rows}'].value = df['ages'][df.loc[df['sales'] ==ws[f'A{rows}'].value ].index[0]]
# 此时ws中的第一列的值为'sales'
values = ws.values
df2 = pd.DataFrame(values)
print(df2)

总结:在对特定的单元格填写值的程序中,

第一步:建立了一个DataFrame,实际工作中可能需要你读取一个excel的sheet,或者先对数据进行处理,然后得到相应DataFrame。

第二步:新建了一个sheet,实际工作中如果有文件可以直接读取文件,也可以先创建一个sheet(需要注意的是,我们新建的sheet在保存的时候是没有任何格式的。此时需要我们设置格式,如果你想偷懒,可以建立一个模板,模板中可以先设定格式,当我们使用openpyxl打开、写入和保存之后格式还存在。)

第三步,将openpyxl打开的sheet中的值,转换成DataFrame格式。这样的好处就是如果你想对sheet中某一列数据进行替换,则可以根据主键匹配其他已经处理好的的数据。这样做的好处是,如果表格中数据被不需要更新部分的数据是其他人手工更新的,可以保留,同时可以保留原有的顺序。不足之处,如果是匹配其他的数据(已经处理的)为何不直接使用pandas处理之后,再写到sheet中呢!

1.62 整行填充值、颜色和设置居中、加粗

首先,我们需要知道如何获得整行

我总结了三种方案用于获得整行

import pandas as pd 
sales = ['张三','李四','王五']

ages = [12,14,13]
df = pd.DataFrame(zip(sales,ages),columns=['sales','ages'])
print(df)
from openpyxl import Workbook
wb = Workbook() # 新建一个工作簿
ws = wb.active 
for i in range(0,len(sales)):
    ws[f'A{i+2}'].value = sales[-i-1]
ws[f'A{1}'].value  = 'sales'
ws['B1'].value  = 'ages'

# 此时ws中的第一列的值为'sales'
values = ws.values
df2 = pd.DataFrame(values)
print(df2)
# 我们需要sales的年龄填写到相对应的B列中
for rows in range(2,5):
    if ws[f'A{rows}'].value  in sales :
        ws[f'B{rows}'].value = df['ages'][df.loc[df['sales'] ==ws[f'A{rows}'].value ].index[0]]
# 此时ws中的第一列的值为'sales'
values = ws.values
df2 = pd.DataFrame(values)
print(df2)
out:
       0     1
0  sales  ages
1     王五    13
2     李四    14
3     张三    12



# 方案一:
row_4 = ws[4]
for cell in row_4:
    print(cell.value)
方案二:
for row in ws.iter_rows(min_row=row_number, max_row=row_number, min_col=1, max_col=ws.max_column):
    for cell in row:
        print(cell .value)
方案三:
for i in range(1,ws.max_column+1):
    ws.cell(row=4, column=i)
    print(ws.cell(row=4, column=i).value)

此时就可以根据这种方案修改每行的值、单元格的设置。

方案一:

fill2 = PatternFill(start_color='E98300', end_color='E98300', fill_type='solid')
font = Font(name='DengXian', size=8,bold=True)
row_4 = ws[4]
for cell in row_4:
    cell.fill=fill2
    cell.font = font
wb.save(r'.\test.xlsx')

方案二:

fill2 = PatternFill(start_color='00B0F0', end_color='00B0F0', fill_type='solid')
font = Font(name='DengXian', size=13,bold=True)
alignment = Alignment(horizontal='center', vertical='center',wrap_text=True)
for row in ws.iter_rows(min_row=4, max_row=4, min_col=1, max_col=ws.max_column):
    for cell in row:
        cell.fill=fill2
        cell.font=font
        cell.alignment=alignment

wb.save(r'.\test.xlsx')

方案三:

fill2 = PatternFill(start_color='FABF8F', end_color='FABF8F', fill_type='solid')
font = Font(name='DengXian', size=13,bold=True,color='FF0000')
alignment = Alignment(horizontal='right', vertical='center',wrap_text=False)
for i in range(1,ws.max_column+1):
    ws.cell(row=4, column=i)
    print(ws.cell(row=4, column=i).value)
    ws.cell(row=4, column=i).fill=fill2
    ws.cell(row=4, column=i).font=font
    ws.cell(row=4, column=i).alignment=alignment

wb.save(r'.\test.xlsx')

1.7 设置列宽和行高

1.71 设置固定的行高和列宽

在openpyxl中,可以使用column_dimensionsrow_dimensions属性来设置列宽和行高。以下是如何设置列宽和行高的示例代码:

from openpyxl import Workbook

# 创建一个新的Workbook对象
wb = Workbook()

# 选择第一个工作表
ws = wb.active

# 设置第一列的宽度为20
ws.column_dimensions['A'].width = 20

# 设置第一行的高度为30
ws.row_dimensions[1].height = 30

# 保存工作表
wb.save('example.xlsx')

在这个例子中,我们创建了一个新的工作簿(Workbook)对象,并选择了第一个工作表(Worksheet)。然后,我们使用column_dimensionsrow_dimensions属性来设置列宽和行高。我们通过指定列的字母来选择列,通过指定行的索引来选择行。最后,我们保存了工作簿为一个名为example.xlsx的文件。

请注意,设置的列宽和行高只会影响到有实际数据的列和行。不会影响到没有数据的列和行。如果要设置整个工作表的列宽和行高,可以使用iter_colsiter_rows方法来遍历所有的列和行,并设置它们的宽度和高度。

1.72 根据一列中值的长度设置行高和列宽

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spark是一个开源的大数据处理框架,它提供了高效的数据处理能力和易用的API,支持多种数据处理模式,包括批处理、流处理和机器学习等。Spark的核心是分布式计算引擎,它可以在集群中运行,利用多台计算机的计算能力来处理大规模数据。Spark的优势在于其高效的内存计算和强大的数据处理能力,可以在处理大规模数据时提供更快的计算速度和更高的性能。Spark的生态系统也非常丰富,包括Spark SQL、Spark Streaming、MLlib和GraphX等组件,可以满足不同的数据处理需求。 ### 回答2: Spark是一种大规模数据处理引擎,可以较快地处理大数据。Spark并不是单独的一种工具,而是一系列的工具和库的整合。它具备高效的内存计算功能,能够在数秒或数分钟内完成数据处理任务。 Spark的核心是分布式计算引擎,通过将数据分成多个部分进行处理,缩短了计算时间。Spark基于RDD(弹性分布式数据集)进行数据处理,RDD是一种可缓存、可重用和容错的数据结构。RDD抽象了数据分布和分区,提供了简单的API。 Spark的架构包括四个组件:Driver、Cluster manager、Worker、和 Executor。其中Driver是Spark应用程序的主程序,Cluster manager通过Master节点来管理各个Worker节点,Worker节点包含了整个Spark集群的计算资源,Executor执行计算任务。 Spark支持多种编程语言,包括Scala、Java、Python和R。其中Scala是Spark的主要语言,因为它能够将Spark的API最大程度地利用。 除了分布式计算引擎外,Spark还提供了多种库和工具,包括Spark SQL、Spark Streaming、MLlib和GraphX。Spark SQL是一种用于结构化数据处理的库,能够使用SQL语句进行数据查询;Spark Streaming可以实时处理数据流,包括文本和图像等;MLlib是实现了多种机器学习算法的库,包括分类、回归、聚类和协同过滤;GraphX可以用于图计算和图分析领域。 总之,Spark是一种强大的大数据处理引擎,能够通过分布式计算架构实现快速的数据处理。它提供了多种语言支持和众多的库和工具,方便用户处理各类数据。 ### 回答3: Spark是一款开源的、分布式的大数据处理框架,它的出现将大数据处理的速度提升到了一个全新的水平。Spark的特点在于它的内存计算引擎,这使得Spark的运行速度比传统的MapReduce处理速度要快很多,同时也比传统的Hadoop更加灵活。 Spark可以用于处理各种大数据应用场景,包括批处理、交互式查询、实时流处理等等。同时,Spark的生态系统非常丰富,有众多的开源库和工具可以使用,例如:Spark SQL、Spark Streaming、GraphX、MLlib等等。 Spark的运行环境需要一个集群,因为Spark是分布式的,它可以通过在集群中多个节点上并行执行任务来提升处理速度,而且Spark支持多种集群管理和资源调度工具,例如:Apache Mesos、Hadoop YARN、Spark自带的资源调度程序等等。 Spark的编程接口非常灵活,可以使用Scala、Java、Python等多种编程语言来编写Spark程序。无论是使用哪种编程语言,Spark都提供了相应的API和工具,例如:Spark SQL、Spark Streaming等。 总之,Spark是一个非常强大的大数据处理框架,它的出现是对传统的Hadoop框架的一种补充和升级,不仅可以处理海量的数据,而且可以提供更快速的数据处理速度和更强大的数据处理能力。因此,Spark已经成为现代大数据处理和机器学习领域中非常重要的工具之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值