Python openpyxl 库使用详解

        大家好,当谈论处理 Excel 文件时,Python 的 openpyxl 库无疑是一个强大而灵活的工具。无论是在数据分析、报告生成还是自动化任务中,openpyxl 都展现出了其独特的价值。本文将详细介绍 openpyxl 库的各种功能和用法,帮助读者掌握如何利用 Python 轻松处理 Excel 文件。

        Excel 文件作为广泛使用的数据存储和交换格式,其重要性不言而喻。然而,手动处理大量的 Excel 数据往往费时费力,容易出错。而 openpyxl 则为我们提供了一个高效、灵活的解决方案,使得 Python 成为处理 Excel 文件的强大工具。

        在本文中,我们将深入探讨 openpyxl 的各种功能,包括如何读取、写入和修改 Excel 文件,如何添加样式和格式,以及如何进行数据分析和报告生成。通过本文的学习,读者将能够充分利用 openpyxl 库,提高工作效率,简化数据处理流程。

一、介绍

        在当今的数据驱动世界中,Excel 文件是许多人日常工作中不可或缺的一部分。而 Python 的 openpyxl 库则为处理 Excel 文件提供了一种灵活、高效的解决方案。openpyxl 是一个专门用于读取、写入和修改 Excel 文件的库,它使得在 Python 环境下对 Excel 进行各种操作变得轻而易举。

用途:

openpyxl 库的主要用途包括但不限于:

  1. 数据分析和处理: 在数据分析领域,将 Excel 文件作为数据源是非常常见的。openpyxl 允许用户轻松地读取 Excel 中的数据,并进行各种统计分析、图表绘制等操作。

  2. 报告生成: 许多工作需要将数据整理成报告的形式呈现,而 openpyxl 可以帮助我们自动化地生成包含各种数据和图表的报告。

  3. 数据导出和导入: 有时候需要将 Python 程序处理的数据导出到 Excel 文件中,或者反过来,从 Excel 文件中读取数据进行处理。openpyxl 提供了方便的接口来实现这些操作。

  4. 自动化任务: 在业务流程中,有许多重复性的任务可以通过自动化来提高效率,而 openpyxl 能够帮助我们轻松地对 Excel 文件进行批量处理,从而实现自动化。

优势:

相比于其他处理 Excel 文件的工具,openpyxl 具有以下优势:

  1. 纯 Python 实现: openpyxl 是一个纯 Python 实现的库,因此可以在几乎所有支持 Python 的平台上运行,无需额外的依赖。

  2. 功能丰富: openpyxl 提供了丰富的功能来处理 Excel 文件,包括读取、写入、修改数据,设置样式和格式,添加图表和图像等。

  3. 易于学习和使用: openpyxl 的 API 设计简洁明了,易于理解和上手。即使是对 Python 不是很熟悉的用户,也能够快速掌握 openpyxl 的基本用法。

  4. 活跃的社区支持: openpyxl 是一个活跃的开源项目,拥有庞大的用户群体和贡献者,用户可以通过社区论坛和文档等渠道获取帮助和支持。

二、安装

安装 openpyxl 库非常简单,你可以通过 pip 包管理工具来完成。下面是安装 openpyxl 库的步骤:

1. 确保 Python 已安装

        首先确保你的计算机上已经安装了 Python。你可以在命令行中输入 python --versionpython3 --version 来检查是否已安装 Python,并查看其版本号。

2. 安装 pip (如果未安装)

        大多数情况下,Python 的安装包中已经包含了 pip,但如果你的系统中没有安装 pip,你需要先安装它。你可以通过命令行执行以下命令来安装 pip:

python -m ensurepip --default-pip

3. 安装 openpyxl:

一旦确保了 pip 的安装,你可以通过以下命令来安装 openpyxl:

pip install openpyxl

如果你使用的是 Python 3,可能需要使用 pip3 来代替 pip,具体取决于你的系统配置。

4. 验证安装是否成功:

安装完成后,你可以在命令行中运行 Python 解释器,并尝试导入 openpyxl 来验证是否安装成功。在命令行中输入以下命令:

python

进入 Python 解释器后,尝试导入 openpyxl:

import openpyxl

如果没有报错,说明 openpyxl 库已成功安装。

        通过以上步骤,你就可以轻松地在你的 Python 环境中安装 openpyxl 库了。安装完成后,你就可以开始使用这个强大的库来处理 Excel 文件了。

三、基本使用

        基本用法包括打开 Excel 文件、读取数据以及关闭文件。下面是一个基本示例,演示了如何使用 openpyxl 库来完成这些操作:

from openpyxl import load_workbook

# 打开 Excel 文件
wb = load_workbook('example.xlsx')

# 选择要操作的工作表
sheet = wb.active

# 读取单元格数据
cell_value = sheet['A1'].value
print("A1 单元格的值为:", cell_value)

# 读取多个单元格数据
for row in sheet.iter_rows(min_row=1, max_row=2, min_col=1, max_col=2):
    for cell in row:
        print(cell.value, end=" ")
    print()

# 关闭 Excel 文件
wb.close()

这个示例演示了以下操作:

  1. 使用 load_workbook 函数打开一个名为 example.xlsx 的 Excel 文件。

  2. 使用 active 属性选择默认的活动工作表,也可以通过工作表名称或索引来选择其他工作表。

  3. 使用类似于字典的方式访问单元格,例如 sheet['A1'] 可以获取 A 列第 1 行的单元格。

  4. 使用 value 属性获取单元格的值。

  5. 使用 iter_rows 方法迭代指定范围内的多个单元格,这里是迭代第 1 行到第 2 行,第 1 列到第 2 列的单元格,并输出它们的值。

  6. 最后,使用 close 方法关闭 Excel 文件。

四、写入和修改 Excel 文件

        写入和修改 Excel 文件是 openpyxl 库的重要功能之一。下面是一个示例,演示了如何创建一个新的 Excel 文件,并向其中写入数据,以及如何打开已有的文件并修改其中的数据:

from openpyxl import Workbook, load_workbook

# 创建一个新的 Excel 文件
wb = Workbook()

# 创建一个工作表
sheet = wb.active

# 向单元格写入数据
sheet['A1'] = 'Hello'
sheet['B1'] = 'World'

# 保存 Excel 文件
wb.save('new_example.xlsx')

# 打开已有的 Excel 文件并修改数据
wb_existing = load_workbook('existing_example.xlsx')
sheet_existing = wb_existing.active

# 修改单元格数据
sheet_existing['A1'] = 'Updated'
sheet_existing['B1'] = 'Data'

# 保存修改后的 Excel 文件
wb_existing.save('existing_example.xlsx')

# 关闭 Excel 文件
wb.close()
wb_existing.close()

这个示例演示了以下操作:

  1. 使用 Workbook 类创建一个新的 Excel 文件。

  2. 使用 active 属性获取默认的工作表,并向其中的单元格写入数据。

  3. 使用 save 方法将创建的 Excel 文件保存为名为 new_example.xlsx 的新文件。

  4. 使用 load_workbook 函数打开一个名为 existing_example.xlsx 的已有的 Excel 文件,并获取默认的工作表。

  5. 使用类似字典的方式修改单元格的数据。

  6. 使用 save 方法将修改后的 Excel 文件保存回原始文件。

  7. 最后,使用 close 方法关闭所有打开的 Excel 文件。

五、样式和格式

        在 openpyxl 中,样式和格式可以通过 openpyxl.styles 模块来实现。下面是一个示例,演示了如何添加样式、设置单元格格式等:

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

# 创建一个新的 Excel 文件
wb = Workbook()

# 创建一个工作表
sheet = wb.active

# 向单元格写入数据
sheet['A1'] = '样式和格式示例'

# 设置单元格样式
font = Font(name='Arial', size=14, bold=True, italic=True, color='FF0000')
alignment = Alignment(horizontal='center', vertical='center')
fill = PatternFill(fill_type='solid', fgColor='FFFF00')
border = Border(left=Side(border_style='thin', color='000000'),
                right=Side(border_style='thin', color='000000'),
                top=Side(border_style='thin', color='000000'),
                bottom=Side(border_style='thin', color='000000'))

# 应用样式到单元格
sheet['A1'].font = font
sheet['A1'].alignment = alignment
sheet['A1'].fill = fill
sheet['A1'].border = border

# 设置列宽和行高
sheet.column_dimensions['A'].width = 20
sheet.row_dimensions[1].height = 30

# 保存 Excel 文件
wb.save('style_example.xlsx')

# 关闭 Excel 文件
wb.close()

这个示例演示了以下操作:

  1. 创建一个新的 Excel 文件,并获取默认的工作表。

  2. 向单元格 A1 写入数据。

  3. 创建并设置字体、对齐方式、填充颜色、边框等样式对象。

  4. 将样式应用到单元格 A1。

  5. 使用 column_dimensionsrow_dimensions 来设置列宽和行高。

  6. 最后,保存 Excel 文件并关闭。

六、图表和图像

        在 openpyxl 中,要向 Excel 文件添加图表和图像,需要使用 openpyxl.chart 模块。下面是一个示例,演示了如何在 Excel 中添加一个简单的图表:

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

# 创建一个新的 Excel 文件
wb = Workbook()

# 创建一个工作表
sheet = wb.active

# 向单元格写入数据
sheet['A1'] = '月份'
sheet['B1'] = '销售额'
sheet['A2'] = '一月'
sheet['B2'] = 1000
sheet['A3'] = '二月'
sheet['B3'] = 1500
sheet['A4'] = '三月'
sheet['B4'] = 1200

# 创建一个柱状图对象
chart = BarChart()

# 设置图表的数据范围
data = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=4)

# 将数据添加到图表中
chart.add_data(data)

# 添加图表标题
chart.title = "销售额月度统计"

# 设置 x 轴标签
chart.x_axis.title = '月份'

# 设置 y 轴标签
chart.y_axis.title = '销售额'

# 将图表添加到工作表中
sheet.add_chart(chart, "D1")

# 保存 Excel 文件
wb.save('chart_example.xlsx')

# 关闭 Excel 文件
wb.close()

这个示例演示了以下操作:

  1. 创建一个新的 Excel 文件,并获取默认的工作表。

  2. 向单元格写入数据,包括月份和对应的销售额。

  3. 创建一个柱状图对象,并设置其数据范围为销售额数据。

  4. 设置图表的标题、x 轴标签和 y 轴标签。

  5. 将图表添加到工作表中的指定位置。

  6. 最后,保存 Excel 文件并关闭。

七、数据分析

        使用 openpyxl 库进行数据分析可以通过读取 Excel 文件中的数据,并使用 Python 中的各种数据分析工具来实现。下面是一个示例,演示了如何使用 openpyxl 库读取 Excel 文件中的数据,并计算一些基本的统计指标:

from openpyxl import load_workbook
import numpy as np

# 加载 Excel 文件
wb = load_workbook('data_analysis_example.xlsx')
sheet = wb.active

# 读取数据
data = []
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, min_col=2, max_col=sheet.max_column):
    row_data = [cell.value for cell in row]
    data.append(row_data)

# 将数据转换为 NumPy 数组
np_data = np.array(data)

# 计算统计指标
mean = np.mean(np_data, axis=0)
median = np.median(np_data, axis=0)
std_dev = np.std(np_data, axis=0)

# 打印统计指标
print("平均值:", mean)
print("中位数:", median)
print("标准差:", std_dev)

# 关闭 Excel 文件
wb.close()

这个示例演示了以下操作:

  1. 使用 load_workbook 函数加载一个名为 data_analysis_example.xlsx 的 Excel 文件,并获取默认的工作表。

  2. 使用 iter_rows 方法迭代数据行,从第二行开始到最后一行,读取数据并存储在一个列表中。

  3. 使用 NumPy 库将数据转换为 NumPy 数组,以便进行统计计算。

  4. 使用 NumPy 提供的函数计算数据的平均值、中位数和标准差。

  5. 打印计算得到的统计指标。

        通过这个示例,你可以了解如何使用 openpyxl 库读取 Excel 文件中的数据,并结合其他数据分析工具(如 NumPy)进行统计计算。你也可以根据自己的需求进一步扩展这些操作,例如绘制图表来可视化数据分析结果。

八、案例

        假设你是一家小型企业的销售经理,你想要分析公司的销售数据并生成销售报告。销售数据存储在一个 Excel 文件中,每一行代表一个销售订单,包括订单号、客户姓名、销售日期、销售金额等信息。你想要使用 openpyxl 库读取这些数据,并计算每个月的销售总额,以及每个客户的销售额排名。

下面是一个示例,演示了如何实现这个实际案例:

from openpyxl import load_workbook
from collections import defaultdict
import datetime

# 加载 Excel 文件
wb = load_workbook('sales_data.xlsx')
sheet = wb.active

# 定义一个字典,用于存储每个月的销售总额
monthly_sales = defaultdict(float)

# 定义一个字典,用于存储每个客户的销售总额
customer_sales = defaultdict(float)

# 读取数据并计算销售总额
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, min_col=2, max_col=sheet.max_column):
    order_date = row[2].value
    sales_amount = row[4].value
    
    # 将 Excel 中的日期转换为 Python 的日期对象
    order_date = datetime.datetime.strptime(order_date, "%Y-%m-%d").date()
    
    # 计算订单所属月份
    month = order_date.month
    
    # 累加每个月的销售总额
    monthly_sales[month] += sales_amount
    
    # 计算每个客户的销售总额
    customer_name = row[1].value
    customer_sales[customer_name] += sales_amount

# 输出每个月的销售总额
print("每月销售总额:")
for month, sales in monthly_sales.items():
    print(f"{month}月: {sales}")

# 输出客户销售额排名
print("\n客户销售额排名:")
ranked_customers = sorted(customer_sales.items(), key=lambda x: x[1], reverse=True)
for i, (customer, sales) in enumerate(ranked_customers, start=1):
    print(f"第{i}名: {customer} - 销售额: {sales}")

# 关闭 Excel 文件
wb.close()

这个示例演示了以下操作:

  1. 使用 load_workbook 函数加载一个名为 sales_data.xlsx 的 Excel 文件,并获取默认的工作表。

  2. 使用 iter_rows 方法迭代数据行,从第二行开始到最后一行,读取销售订单数据。

  3. 将 Excel 中的日期字符串转换为 Python 的日期对象,并根据订单日期计算每个月的销售总额。

  4. 使用 defaultdict 来存储每个月的销售总额和每个客户的销售总额。

  5. 输出每个月的销售总额和客户销售额排名。

        通过这个示例,你可以了解如何使用 openpyxl 库读取 Excel 文件中的数据,并根据实际需求进行统计分析和报告生成。你也可以根据自己的需求进一步扩展这个案例,例如添加更多的分析指标、绘制图表等。

九、注意事项和常见问题

        在使用 openpyxl 进行 Excel 文件处理时,有一些注意事项和常见问题需要考虑。下面是一些常见的注意事项和解决方法:

  1. Excel 文件格式兼容性: openpyxl 对于 Excel 文件的兼容性较好,但在处理包含复杂格式、图表、宏等特殊内容的文件时可能会出现问题。建议使用较新版本的 Excel 文件格式(如 .xlsx),以确保最佳兼容性。

  2. 大型文件处理: 处理大型 Excel 文件时可能会占用大量内存,导致程序运行缓慢或崩溃。建议在处理大型文件时,采取适当的内存管理策略,例如分块读取数据或使用迭代器。

  3. 数据格式转换: 在读取 Excel 文件中的数据时,openpyxl 会将日期、数字等数据自动转换为 Python 中的相应类型。但有时候会出现数据类型转换不准确的情况,例如日期格式不一致、数字被识别为字符串等。可以通过手动指定数据类型或在读取数据后进行类型转换来解决这些问题。

  4. 数据写入顺序: 当向 Excel 文件中写入数据时,openpyxl 默认会按照顺序依次写入,而不会在原有数据上进行修改。这意味着如果需要修改已有数据或在指定位置插入数据,需要使用特定的方法和技巧,例如使用切片操作或自定义写入逻辑。

  5. 多线程并发访问: openpyxl 并不支持多线程并发访问同一个 Excel 文件,因为 Excel 文件本身是单线程访问的。如果需要在多线程环境下处理 Excel 文件,建议使用线程锁或队列等机制来避免并发访问导致的数据混乱或文件损坏问题。

  6. 错误处理: 在处理 Excel 文件时,可能会遇到各种意外情况,例如文件损坏、格式错误、权限问题等。建议在程序中加入适当的错误处理机制,以便及时捕获并处理异常情况,避免程序崩溃或数据丢失。

  7. 官方文档和社区支持: openpyxl 有详细的官方文档和活跃的社区支持,如果遇到问题可以查阅官方文档或在社区论坛上提问。另外,也可以查看 GitHub 上的 issues 和 PR,了解最新的问题和解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/696101.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

04-认识微服务-SpringCloud

04-认识微服务-SpringCloud 1.SpringCloud: 1.SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud 2.SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配&…

vue3中进度条上加高亮圆点

实现效果 小圆点基于进度条定位&#xff08;left&#xff09;。 实现代码 <template><!-- 这块代码实现的功能&#xff1a;progressData遍历的年份进度数组&#xff0c;展示每年完成的进度--><ul><li v-for"(item, index) in progressData" :k…

CST Studio Suite 2020 软件安装教程、安装包下载

CST Studio Suite 2020 安装教程 安装包下载 复制链接在浏览器打开 https://www.qqres.com/3150.html CST Studio Suite 是由Dassault Systmes公司开发的一套电磁场仿真软件。它应用于电子、通信、天线设计、射频与微波、电磁兼容性 (EMC)、电磁干扰 (EMI) 等领域。 CST St…

图Transformer 推荐系统

文章目录 Graph Transformer for Recommendation摘要引言相关工作方法3.1 Graph Invariant Rationale Learning3.1.1 Graph Collaborative Rationale Discovery3.1.2 Global Topology Information Injection3.1.3 Rationale Discovery with Graph Transformer.3.1.4 Task-Adapt…

作业-day-240607

思维导图 C编程 要求&#xff1a; 搭建一个货币的场景&#xff0c;创建一个名为 RMB 的类&#xff0c;该类具有整型私有成员变量 yuan&#xff08;元&#xff09;、jiao&#xff08;角&#xff09;和 fen&#xff08;分&#xff09;&#xff0c;并且具有以下功能&#xff1a;…

【深度学习】PuLID: Pure and Lightning ID Customization via Contrastive Alignment

论文&#xff1a;https://arxiv.org/abs/2404.16022 代码&#xff1a;https://github.com/ToTheBeginning/PuLID 文章目录 AbstractIntroductionRelated WorkMethods Abstract 我们提出了一种新颖的、无需调整的文本生成图像ID定制方法——Pure and Lightning ID customizatio…

北航第五次数据结构与程序设计编程题复习

北航第五次数据结构与程序设计编程题复习 树叶节点遍历&#xff08;树-基础题&#xff09;计算器&#xff08;表达式计算-表达式树实现&#xff09;服务优化词频统计&#xff08;树实现&#xff09; 树叶节点遍历&#xff08;树-基础题&#xff09; 【问题描述】 从标准输入中…

Golang的协程调度器GMP

目录 GMP 含义 设计策略 全局队列 P的本地队列 GMP模型以及场景过程 场景一 场景2 场景三 场景四 场景五 场景六 GMP 含义 协程调度器&#xff0c;它包含了运行协程的资源&#xff0c;如果线程想运行协程&#xff0c;必须先获取P&#xff0c;P中还包含了可运行的G…

Vue15-watch对比计算属性

一、姓名案例 1-1、watch实现 1-2、计算属性 对比发现&#xff1a; 计算属性比watch属性更简略一些。 1-3、计算属性 VS 侦听属性 1-4、需求变更 计算属性中不能开启异步任务&#xff01;&#xff01;&#xff01;因为计算属性靠return返回值。但是watch靠亲自写代码去改。 1-…

一款开源文件加速下载利器

前言 大文件的下载&#xff0c;浏览器支持不是很好&#xff0c;今天下载了一个20个G的文件&#xff0c;连续失败了好多次。 然后寻找到了一个开源的下载工具gospeed&#xff0c;可以完美的解决这个问题。而且下载速度快。 简介 Gopeed&#xff08;全称 Go Speed&#xff09;&am…

vscode copilot git commit 生成效果太差,用其他模型替换

问题 众所周知&#xff0c;copilot git commit 就像在随机生成 git commit 这种较为复杂的内容还是交给大模型做比较合适 方法 刚好&#xff0c;gitlens 最近开发了 AI commit的功能&#xff0c;其提供配置url api可以实现自定义模型 gitlens 只有3种模型可用&#xff1a…

重邮计算机网络803-(2)物理层

一.物理层 1.介绍 物理层的主要任务描述为确定与传输媒体的接口的一些特性&#xff0c;即&#xff1a; ①机械特性 指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。 ②电气特性 指明在接口电缆的各条线上出现的电压的范围。 ③功能特性 指明某条线上…

让AI做2024新高考1卷数学最后一题:AI智商横向对比!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

动手学深度学习4.10 实战Kaggle比赛:预测房价-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;实战 Kaggle 比赛&#xff1a;预测房价_哔哩哔哩_bilibili 本节教材地址&#xff1a;4.10. 实战Ka…

Keil软件仿真的使用

一、软件的初始化设置 初始设置可以按照下图&#xff0c;这里我使用的是STM32F103C8T6&#xff0c;所以单片机型号为STM32F103C8&#xff0c;这个设置在Debug目录下。然后进行时钟的设置&#xff0c;我们板上晶振为8M&#xff0c;这里将时钟改为8. 或许有人想问如果是别的型号单…

Vue3学习记录第三天

Vue3学习记录第三天 背景说明学习记录Vue3中shallowReactive()和shallowRef()Vue3中toRaw()和markRaw()前端...语法Vue3中readonly()和shallowReadonly()函数 背景 之前把Vue2的基础学了, 这个课程的后面有简单介绍Vue3的部分. 学习知识容易忘, 这里仅简答做一个记录. 内容都很…

# RocketMQ 实战:模拟电商网站场景综合案例(一)

RocketMQ 实战&#xff1a;模拟电商网站场景综合案例&#xff08;一&#xff09; 一、内容介绍 1、案例介绍&#xff1a; 1.1 业务分析 1&#xff09;下单业务 2&#xff09;支付业务 1.2 问题分析 2、技术分析 2.1 技术选型&#xff1a; 1&#xff09;SpringBoot 2&…

Zynq7000 系列FPGA模块化仪器

• 基于 XilinxXC7Z020 / 010 / 007S • 灵活的模块组合 • 易于嵌入的紧凑型外观结构 • 高性能的 ARM Cortex 处理器 • 成熟的 FPGA 可编程逻辑 &#xff0c;基于 IP 核的软件库 FPGA 控制器 Zynq7000 系列模块是基于 Xilinx XC7Z020/010/007S 全可编程片上系统 (SoC) 的…

【PPT技巧】PPT文件设置了修改权限,如何取消权限编辑文件?

不知道大家在使用PPT文件的时候&#xff0c;是否遇到过下面的提示框&#xff0c;这就是PPT文件设置了修改权限&#xff0c;只有输入密码才可以编辑文件。 如果我们没有输入密码&#xff0c;以只读方式进入&#xff0c;那么我们会发现功能栏中的按钮全是灰色&#xff0c;无法使用…

Vue3【二】 VSCode需要安装的Vue语法插件

VSCode需要安装的 适配Vue3的插件 Vue-Official插件安装