Python & VBA编程:办公自动化与数据分析

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Python与VBA是两种广泛应用于自动化和数据分析的编程语言。Python以其简洁的语法和强大的功能受到程序员的喜爱,而VBA则主要应用于Microsoft Office应用程序,用于创建宏和自定义功能。本教程将涵盖Python和VBA的基础语法、模块化编程、数据处理、科学计算、可视化、网络编程、自动化脚本、Web开发、机器学习以及VBA的宏录制、对象模型、编程基础、事件驱动编程、错误处理、引用外部库、自动化办公任务和用户界面定制。此外,教程还将介绍如何结合Python和VBA进行更高效的办公自动化和数据分析,例如使用Python处理数据后通过VBA在Excel中进行展示和分析。

1. Python基础语法和高级功能

Python作为一种广泛应用于数据科学、人工智能、网络开发和自动化领域的编程语言,其基础语法和高级功能的掌握对于IT专业人士来说至关重要。本章节将带您从基础知识开始,逐步深入探索Python的核心特性。

1.1 Python基础语法概述

Python的语法简洁且易于理解,这使得它成为了初学者的首选。本节将介绍Python的基本数据类型,控制流语句,以及函数定义等基础知识。我们还将通过实例代码来展示这些概念的实际应用,例如如何使用循环语句和条件语句进行基本的数据处理。

1.2 Python高级特性

随着学习的深入,我们会接触到Python的高级特性,如迭代器、生成器、装饰器和上下文管理器。这些特性在编写高效且可读性强的代码方面起着关键作用。我们将通过实例演示这些高级特性的用法,解释它们如何提高代码的执行效率和模块化程度。

1.3 面向对象编程基础

面向对象编程(OOP)是Python的核心概念之一,我们将探讨如何利用类和对象来构建可重用和模块化的代码。本节还将解释封装、继承和多态的概念,并通过具体的编程案例来展示这些概念的实际应用。

通过本章节的学习,您将获得扎实的Python编程基础,并为进一步学习高级主题和框架打下坚实的基础。

2. VBA在Office自动化中的应用

2.1 VBA基础与界面交互

2.1.1 VBA简介及开发环境

VBA(Visual Basic for Applications)是微软公司推出的一种编程语言,内嵌于Microsoft Office应用程序(如Excel、Word、Access等)中。它允许用户通过编写宏来自动执行重复性的任务,极大地提高了工作效率。VBA是基于Basic语言的一种事件驱动编程语言,它拥有完整的开发环境,包括项目资源管理器、代码编辑窗口、属性窗口和即时窗口等。

开发环境的构成如下: - 项目资源管理器 :用于管理VBA项目中的各种资源,如模块、窗体、类模块等。 - 代码编辑窗口 :用于编写和编辑VBA代码。 - 属性窗口 :用于查看和修改窗体或控件的属性。 - 即时窗口 :用于运行代码片段和测试代码。

要开始使用VBA,首先需要启用开发者选项卡: 1. 在任何Office应用程序中,点击左上角的“文件”选项卡。 2. 选择“选项”,在弹出的窗口中选择“自定义功能区”。 3. 勾选“开发工具”复选框,点击“确定”。

一旦开发者选项卡激活,就可以通过点击“开发者”选项卡,访问VBA编辑器等工具。

2.1.2 VBA与Office应用程序的交互

VBA与Office应用程序的交互是通过内置的“应用程序对象”模型完成的。每个Office应用程序都有一个顶层对象,如Excel对应Excel.Application,Word对应Word.Application等。通过这个顶层对象,可以访问和控制应用程序的几乎所有方面。

例如,在Excel中创建一个新工作簿的VBA代码如下:

Sub CreateNewWorkbook()
    Dim wb As Workbook
    Set wb = Workbooks.Add ' 创建一个新的工作簿
    wb.Sheets(1).Name = "ExampleSheet" ' 给工作簿的第一张工作表命名
End Sub

这段代码定义了一个名为 CreateNewWorkbook 的子程序,它使用 Workbooks.Add 方法创建了一个新的工作簿并将其存储在变量 wb 中。随后,代码更改了新工作簿中第一个工作表的名称为"ExampleSheet"。

2.2 VBA自动化任务的实现

2.2.1 常用自动化对象和方法

VBA提供了大量对象和方法来实现自动化任务。以下是一些在Excel自动化中常用的对象和方法:

  • 工作簿(Workbook)对象 :代表一个Excel工作簿。常用方法包括 Save Close Sheets.Add 等。
  • 工作表(Worksheet)对象 :代表工作簿中的一个工作表。常用方法包括 Select Calculate PrintOut 等。
  • 范围(Range)对象 :代表工作表中一个或多个单元格。常用方法包括 Copy PasteSpecial ClearContents 等。

例如,以下代码演示了如何使用Range对象来清空特定单元格的内容:

Sub ClearCellContents()
    Range("A1").ClearContents ' 清空单元格A1的内容
End Sub
2.2.2 VBA在Excel中的自动化实例

让我们来看一个实际的VBA自动化实例。假设我们需要编写一个宏,用于在Excel中自动格式化一个数据表:

Sub FormatDataTable()
    Dim ws As Worksheet
    Dim lastRow As Long
    ' 设置工作表
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ' 查找最后一行数据
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    ' 格式化标题行
    With ws.Range("A1:I1")
        .Font.Bold = True
        .Interior.Color = RGB(200, 200, 200)
    End With
    ' 设置列宽
    ws.Columns("A:I").AutoFit
    ' 格式化数据区域
    With ws.Range(ws.Cells(2, 1), ws.Cells(lastRow, 9))
        .Borders.LineStyle = xlContinuous
        .Font.Name = "Arial"
        .Font.Size = 11
    End With
End Sub

这段代码首先确定了要操作的工作表(Sheet1),然后找到了数据的最后一行。接着,它通过使用 With 语句来应用格式到标题行和数据区域。标题行被设置为粗体和浅灰色背景,而数据区域的所有单元格都被加上了边框,并设置了字体和字号。

2.3 VBA的高级编程技巧

2.3.1 VBA错误处理和调试

VBA提供了错误处理功能,包括 On Error 语句来指定在运行时发生错误时代码应如何处理。错误处理可以帮助开发者处理异常情况,避免程序崩溃。

以下是使用 On Error 语句的一个实例:

Sub SafeDivision()
    Dim x As Double, y As Double, result As Double
    ' 避免除以零的错误
    On Error Resume Next
    result = x / y
    If Err.Number <> 0 Then
        MsgBox "Error: " & Err.Description
    Else
        MsgBox "The result is " & result
    End If
    On Error GoTo 0 ' 重置错误处理
End Sub

在这个示例中, On Error Resume Next 告诉VBA忽略发生的任何错误并继续执行下一行代码。如果在执行除法操作时发生错误,程序会跳转到 If 语句检查错误号 Err.Number 。如果存在错误,会弹出一个包含错误描述的消息框。最后, On Error GoTo 0 重置错误处理,使得任何后续错误都会按常规方式处理。

2.3.2 VBA代码优化和安全性

在编写VBA代码时,优化和安全性是两个需要特别注意的方面。代码优化可以提高程序性能,而安全性则确保程序不会被恶意利用。

优化建议: - 使用具体类型声明变量,如 Dim x As Double ,以提高代码的执行速度。 - 避免使用全局变量,尽量使用局部变量。 - 减少对象引用的次数,尤其是在循环中。 - 使用数组处理大量数据,而非逐个单元格操作。

安全性建议: - 对于从外部来源输入的数据,使用 IsNumeric 等函数进行验证。 - 将重要的VBA项目保存在受密码保护的文件中。 - 使用数字签名来验证宏的来源。 - 启用宏安全设置,避免执行不可信的宏。

例如,以下是一个简单的宏密码保护示例:

Sub ProtectVBAProject()
    ThisWorkbook.VBProject.Protection = vbext_lockProject
    ThisWorkbook.VBProject.VBComponents("ThisWorkbook").Protection = vbext_lockProject
    MsgBox "VBA project is now protected."
End Sub

这段代码将当前工作簿的VBA项目和工作簿组件的保护设置为锁定,防止未经授权的用户查看或修改代码。通过这种方式,增加了VBA项目的安全性。

以上为第二章:VBA在Office自动化中的应用的详细内容,下回将介绍第三章的内容。

3. 结合Python和VBA进行数据处理和办公自动化

3.1 Python与VBA的互补性分析

3.1.1 Python和VBA的优势对比

Python与VBA作为编程语言,各自在IT行业中扮演着重要的角色。Python以其简洁易读的语法、丰富的数据处理库和强大的社区支持而闻名,特别是在数据分析、机器学习和网络开发等领域。而VBA(Visual Basic for Applications)长期以来在Microsoft Office自动化领域占据着无可替代的位置,特别是在Excel的宏编程中。VBA直接嵌入在Office软件中,可以方便地操作Excel表格、Word文档和PowerPoint演示文稿。

Python的优势主要体现在其强大的社区生态系统和数据处理能力上。Python拥有像NumPy、Pandas和Matplotlib等大量用于数据科学的库,以及对机器学习、深度学习支持的TensorFlow和PyTorch。此外,Python支持多种编程范式,可以用于开发复杂的应用程序,以及可以部署在服务器端和云平台。

与Python相比,VBA更易于与Microsoft Office应用程序集成,特别适合于快速开发和自动化日常工作流程。VBA在处理Office文档和进行小规模自动化任务时,无需额外安装,可以直接在Office软件内编写和运行。

3.1.2 数据处理场景下Python与VBA的结合方式

在实际工作中,Python和VBA经常可以互补,尤其是在数据处理和办公自动化方面。Python强大的数据处理能力可以用于分析大量数据,而VBA则可以处理日常的Office任务自动化。例如,我们可以使用Python进行数据分析和生成报告,然后通过VBA将报告整合到Excel中并进行格式化。

Python可以作为主程序,调用VBA脚本实现自动化操作,比如调用VBA宏来自动化邮件发送、文档更新等。反过来,VBA也可以调用Python脚本来扩展其功能,尤其是对于VBA中处理复杂算法和数据分析时。通过这种方式,可以将Python的数据处理和机器学习能力与VBA的Office集成能力结合起来,构建出更加智能和自动化的办公解决方案。

3.2 实现Python和VBA的交互

3.2.1 从Python调用VBA

要从Python中调用VBA代码,可以通过COM自动化(Component Object Model,组件对象模型)实现。Python通过pywin32这个库可以与Windows的COM对象交互。这需要在Python中安装pywin32库,并在Windows操作系统上运行。

下面是一个简单的代码示例,展示了如何在Python中运行VBA代码:

import win32com.client as win32

# 创建Excel应用实例
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True  # 设置Excel可见

# 启动VBA宏
excel.Run("YourMacroName")  # YourMacroName是事先在VBA编辑器中定义好的宏

# 释放资源
del excel

这段代码首先导入了win32com.client库,然后创建了一个Excel应用程序的实例,并将其设置为可见。之后,使用Run方法执行了一个名为YourMacroName的宏。

3.2.2 从VBA调用Python

从VBA调用Python脚本相对直接。首先需要确保Python的安装路径已经添加到系统的PATH环境变量中,这样VBA才能在任何位置调用Python解释器。接着,可以使用VBA的 Shell 函数来执行Python脚本。

下面是一个VBA调用Python脚本的示例:

Sub CallPythonScript()
    Dim pythonExe As String
    pythonExe = "python" ' 或 "python3" 根据系统中Python的命名

    ' 使用Shell函数运行Python脚本
    Shell(pythonExe & " " & Environ("USERPROFILE") & "\path\to\your_script.py", vbNormalFocus)
End Sub

这段VBA代码定义了一个子程序 CallPythonScript ,使用 Shell 函数执行位于指定路径的Python脚本。 vbNormalFocus 是让Python窗口获得焦点的参数,如果不希望Python脚本运行时显示窗口,可以使用 vbHide 参数隐藏窗口。

3.3 实际案例:混合编程的数据处理和办公自动化

3.3.1 数据整合与报告生成

数据整合和报告生成是企业日常运营中非常常见的一项工作。借助Python和VBA的结合,可以实现数据从清洗到报告生成的自动化流程。

以一个例子说明,假设需要将多个Excel工作表的数据整合到一个总表中,并生成一份简单的报告。可以通过Python的Pandas库读取多个Excel文件,进行数据清洗和处理,然后再用VBA将处理后的数据整理到最终的Excel报告模板中。

以下是一个简单的Python代码,用于合并多个Excel工作表:

import pandas as pd

# 读取多个Excel文件
data_frames = []
for i in range(1, 4):  # 假设有三个Excel文件需要合并
    path = f"C:/path/to/sheet{i}.xlsx"
    df = pd.read_excel(path)
    data_frames.append(df)

# 合并数据
combined_df = pd.concat(data_frames)

# 将合并后的数据保存为新的Excel文件
combined_df.to_excel("C:/path/to/combined_report.xlsx")

然后,可以使用VBA脚本来将合并后的数据填充到报告模板:

Sub FillReportTemplate()
    Dim wb As Workbook
    Dim wsTemplate As Worksheet, wsData As Worksheet

    ' 打开数据工作簿和报告模板
    Set wsData = Workbooks("combined_report.xlsx").Worksheets(1)
    Set wb = Workbooks.Open("C:/path/to/report_template.xlsx")
    Set wsTemplate = wb.Sheets(1)

    ' 复制数据到报告模板
    wsData.Range("A1:D10").Copy wsTemplate.Range("A1")

    ' 保存并关闭报告模板
    wb.Save
    wb.Close
End Sub

3.3.2 自动化邮件处理和日程安排

在日常工作中,邮件处理和日程安排占据了大量时间。通过Python和VBA的结合,可以实现对这些重复性任务的自动化。

Python可以用来自动处理收发邮件,比如使用 imaplib 库从邮箱接收邮件,使用 smtplib 库发送邮件。VBA则可以用来处理Office日历和自动化邮件的发送。

以下是一个Python脚本的示例,用于登录邮箱并读取新邮件的主题:

import imaplib

# 连接到IMAP服务器
mail = imaplib.IMAP4_SSL('***')
mail.login('your_***', 'your_password')

# 选择收件箱
mail.select('inbox')

# 搜索新邮件
status, messages = mail.search(None, 'UNSEEN')
new邮件列表 = messages[0].split()

for uid in new邮件列表:
    status, data = mail.fetch(uid, '(RFC822)')
    # 处理邮件内容
    for response_part in data:
        if isinstance(response_part, tuple):
            # 解析邮件内容
            print("Message %s\n" % response_part[1])

接着,可以使用VBA创建一个日程安排或者发送一封自动回复的邮件:

Sub AutoReplyEmail()
    Dim olApp As Object
    Dim olInsp As Object
    Dim msg As Object

    ' 创建Outlook应用程序实例
    Set olApp = CreateObject("Outlook.Application")
    Set olInsp = olApp.CreateItem(0)
    Set msg = olInsp

    With msg
        .To = "***"  ' 收件人地址
        .Subject = "自动回复"  ' 主题
        .Body = "感谢您的邮件,我会尽快回复。"  ' 邮件内容
        .Send  ' 发送邮件
    End With

    Set olInsp = Nothing
    Set olApp = Nothing
End Sub

这个VBA宏会使用Outlook发送一封自动回复的邮件给发件人。结合Python处理邮件的脚本和VBA发送邮件的宏,我们可以自动化整个邮件处理的流程。

通过混合使用Python和VBA,我们能够有效地解决跨平台、跨语言的自动化任务,大大提升工作效率。

4. Python数据分析和可视化技术

随着数据科学的快速发展,Python已成为处理和分析数据的主要工具之一。其简洁的语法、强大的库生态和数据处理能力,使得Python在数据分析和可视化领域中占据了一席之地。本章节将详细探讨Python在数据分析的基础知识、常用的可视化工具,以及如何将这些技术应用于实际场景。

4.1 Python数据分析基础

数据分析是理解和解释数据的过程,Python在这一领域的主要工具是NumPy和Pandas。这两者提供了强大的数据处理功能,是Python数据科学家工具箱中的基础工具。

4.1.1 NumPy和Pandas库的使用

NumPy是Python中用于科学计算的基础包,它提供了高性能的多维数组对象和这些数组的操作工具。Pandas则是建立在NumPy之上,提供了DataFrame和Series两种数据结构,用于处理表格数据和时间序列数据。以下是一些基础用法:

import numpy as np
import pandas as pd

# 创建一个NumPy数组
array = np.array([1, 2, 3, 4, 5])

# 用Pandas创建一个Series
series = pd.Series([1, 2, 3, 4, 5])

# 用Pandas创建一个DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [24, 27, 22]
}
df = pd.DataFrame(data)

4.1.2 数据清洗和预处理

数据分析前必须先进行数据清洗和预处理。这一过程包括处理缺失值、异常值、数据类型转换、数据标准化等。Pandas库提供了诸多内置函数来帮助我们完成这些工作。下面以处理缺失值为例:

# 查看数据中的缺失值
df.isnull().sum()

# 删除包含缺失值的行
df_clean = df.dropna()

# 用均值填充缺失值
df_filled = df.fillna(df.mean())

数据预处理之后,我们就能进行更深入的数据分析了。

4.2 Python数据可视化工具

数据可视化是数据分析过程中不可或缺的一部分,它能够帮助我们更快地发现数据中的模式和趋势。Python中有多个可视化库,本节我们将重点介绍Matplotlib和Seaborn这两个最常用的库,以及交互式可视化的两个工具Plotly和Dash。

4.2.1 Matplotlib和Seaborn库的高级应用

Matplotlib是一个2D绘图库,可以创建各种静态、动态和交互式图表。Seaborn是基于Matplotlib的高级可视化库,它简化了许多常见的统计图形的绘图过程。以下是使用这些库绘制一个散点图的例子:

import matplotlib.pyplot as plt
import seaborn as sns

# 使用Matplotlib绘制散点图
plt.scatter(df['Age'], df['Salary'])

# 使用Seaborn绘制散点图,色点表示不同的类别
sns.scatterplot(x='Age', y='Salary', hue='Category', data=df)

4.2.2 交互式可视化:Plotly和Dash

虽然Matplotlib和Seaborn在数据可视化方面非常强大,但它们不支持交互式图表。Plotly是一个能够创建交云动式图表的库,而Dash是一个用于构建交互式Web应用的框架。以下是一个使用Plotly绘制交互式图表的例子:

import plotly.express as px

fig = px.scatter(df, x="Age", y="Salary",
                 size="Population", color="Continent", hover_name="Country",
                 log_x=True, size_max=60)
fig.show()

4.3 实际案例:数据分析与可视化的综合应用

将数据分析与可视化技术相结合,在商业和金融领域有着广泛的应用。以下将通过两个案例,展示如何使用Python实现数据分析和可视化的综合应用。

4.3.1 商业数据分析实例

在商业领域,分析销售数据有助于发现销售趋势和客户行为。以下代码展示了如何利用Pandas处理销售数据,并用Matplotlib绘制销售趋势图:

# 假设有一个销售数据集
sales_data = pd.read_csv('sales_data.csv')

# 数据分析:年度销售总额
annual_sales = sales_data.groupby(sales_data['Date'].dt.year).sum()

# 数据可视化:年度销售趋势图
annual_sales.plot(kind='bar', figsize=(10, 6))
plt.title('Annual Sales Trend')
plt.xlabel('Year')
plt.ylabel('Sales Amount')
plt.show()

4.3.2 金融数据可视化展示

在金融领域,可视化可以帮助投资者快速把握市场动态。以下例子使用Plotly来创建一个交互式的股票价格图表:

import plotly.graph_objects as go

# 假设有一个股票价格数据集
stock_data = pd.read_csv('stock_prices.csv')

# 创建图表
fig = go.Figure(data=[go.Scatter(x=stock_data['Date'], y=stock_data['Close'])])

# 更新图表布局
fig.update_layout(title='Stock Price Trend', xaxis_title='Date', yaxis_title='Price')
fig.show()

通过本章的介绍,我们对Python数据分析和可视化技术有了一个全面的了解。从基础的数据处理到高级的可视化技巧,再到实际的案例应用,我们见证了Python在这一领域的强大功能和灵活性。通过这些技术,无论是商业分析师还是金融专家,都能够利用Python来更好地理解数据,作出更加明智的决策。

5. VBA事件驱动编程与错误处理

5.1 VBA事件驱动模型

5.1.1 事件与事件处理程序的概念

在VBA中,事件驱动编程是一种非常重要的概念。事件是用户或系统在特定条件下触发的动作,例如鼠标点击、按键、定时器时间到达等。事件处理程序则是一段预先定义好的代码,它会在特定事件发生时自动执行。

5.1.2 常见事件及其应用场景

几乎所有的Office组件都具有丰富的事件模型,比如Excel中的Workbook_Open()事件会在工作簿打开时触发,Worksheet_Change()事件则会在工作表内容发生更改时触发。在实际开发中,我们可以通过编写相应的事件处理程序,实现对这些事件的响应。

5.2 VBA的错误处理机制

5.2.1 错误类型及处理方法

VBA的错误处理主要包括运行时错误和逻辑错误。运行时错误通常是由于程序执行时发生的意外情况导致的,比如除以零。逻辑错误则是在程序运行没有问题,但是结果并非预期的情况。VBA中提供了On Error语句来处理运行时错误,允许程序员控制程序在遇到错误时的行为。

5.2.2 高级错误处理技巧

为了提高代码的健壮性,可以使用On Error GoTo 和 On Error Resume Next这样的高级错误处理语句。On Error GoTo 可以将程序跳转到一个标签处,执行错误处理代码块;而On Error Resume Next则是忽略当前发生的错误,继续执行下一条语句。这些高级技巧能帮助我们在遇到错误时,更好地管理程序流程,避免程序意外终止。

5.3 实际案例:VBA事件驱动与错误处理的应用

5.3.1 错误处理在自动化脚本中的实践

在自动化脚本中,合理地使用错误处理可以避免程序因一个小小的错误而中断。下面是一个实际的错误处理代码示例:

Sub SafeDivide()
    Dim x As Double, y As Double
    On Error GoTo ErrorHandler ' 开启错误处理
    x = 10
    y = 0
    MsgBox x / y ' 尝试除以零
    Exit Sub ' 正常退出子程序

ErrorHandler:
    MsgBox "Error " & Err.Number & ": " & Err.Description
    Resume Next ' 跳过错误继续执行
End Sub

5.3.2 事件驱动编程的高级应用实例

事件驱动模型在Excel中的实际应用可能包括创建自定义的自动化功能,例如,当用户在某个工作表上输入数据时,自动记录其更改并保存到另一个位置。下面是一个使用Worksheet_Change事件的示例:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Columns("A")) Is Nothing Then
        ' 当用户更改列A时执行的操作
        Application.EnableEvents = False ' 关闭事件触发,避免无限循环
        ' 执行数据处理或记录更改
        Application.EnableEvents = True ' 重新启用事件触发
    End If
End Sub

在这个例子中,我们关闭了事件触发以防止更改列A时再次触发Worksheet_Change事件,导致无限循环。事件驱动编程常常用于提高应用程序的响应性和交互性。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Python与VBA是两种广泛应用于自动化和数据分析的编程语言。Python以其简洁的语法和强大的功能受到程序员的喜爱,而VBA则主要应用于Microsoft Office应用程序,用于创建宏和自定义功能。本教程将涵盖Python和VBA的基础语法、模块化编程、数据处理、科学计算、可视化、网络编程、自动化脚本、Web开发、机器学习以及VBA的宏录制、对象模型、编程基础、事件驱动编程、错误处理、引用外部库、自动化办公任务和用户界面定制。此外,教程还将介绍如何结合Python和VBA进行更高效的办公自动化和数据分析,例如使用Python处理数据后通过VBA在Excel中进行展示和分析。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值