当前位置: 首页 > news >正文

前端excel导出

在数据可视化和管理日益重要的今天,前端实现 Excel 导出功能已经成为众多项目中的刚需。

一、Excel 导出的常见场景​

数据报表导出:在企业管理系统、数据分析平台中,用户经常需要将系统中的数据以 Excel 表格的形式导出,便于离线查看、编辑和分析。例如,销售数据报表、财务报表等。​
用户自定义数据导出:一些应用允许用户筛选、处理数据后,将处理结果导出为 Excel 文件。像电商平台中,用户可以导出自己的订单数据。​
系统日志导出:开发和运维人员需要导出系统日志进行问题排查和分析,Excel 格式便于数据的整理和搜索。​

二、实现 Excel 导出的依赖库选择​

在前端实现 Excel 导出,有多个优秀的依赖库可供选择。​

SheetJS(xlsx)​

SheetJS 是一个功能强大且兼容性极佳的 JavaScript 库,它能够解析和生成多种表格格式,包括 Excel 的.xlsx和.xls文件。其核心优势在于支持广泛的浏览器环境,并且对 Node.js 也有良好的支持,方便前后端通用。通过SheetJS,你可以直接操作表格数据,如添加数据、设置单元格样式等,灵活性极高。​

FileSaver.js​

FileSaver.js 是一个专注于文件保存功能的轻量级库,它提供了简单统一的接口来保存文件,支持 Blob 和 DataURL 两种格式。在 Excel 导出场景中,通常会与其他库配合使用,将生成的 Excel 数据转换为 Blob 对象后,借助 FileSaver.js 实现文件的下载保存。​

xlsx-js-style​

xlsx-js-style 是在 SheetJS 基础上扩展了单元格样式设置功能的库。如果你对导出的 Excel 文件有样式方面的需求,如字体颜色、背景色、边框等,使用xlsx-js-style 可以轻松实现这些效果,让导出的表格更加美观和专业。​

三、使用 SheetJS 实现基础 Excel 导出​

接下来,我们通过一个简单的示例,演示如何使用 SheetJS 实现前端 Excel 导出。

// 需要安装xlsx库
npm install xlsx // 在 HTML 文件中引入相关脚本(如果你使用的是 CDN 方式):​<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>在 JavaScript 代码中,我们创建一个简单的数据数组,并将其转换为 Excel 文件进行导出:// 创建示例数据const data = [["姓名", "年龄", "城市"],["张三", 25, "北京"],["李四", 30, "上海"],["王五", 35, "广州"]];// 将数据转换为SheetJS的工作簿对象const worksheet = XLSX.utils.aoa_to_sheet(data);const workbook = XLSX.utils.book_new();XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");// 将工作簿对象转换为二进制字符串const wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'binary' });// 将二进制字符串转换为Blob对象function s2ab(s) {const buf = new ArrayBuffer(s.length);const view = new Uint8Array(buf);for (let i = 0; i < s.length; i++) {view[i] = s.charCodeAt(i) & 0xff;}return buf;}const blob = new Blob([s2ab(wbout)], { type: 'application/octet-stream' });// 利用FileSaver.js保存文件(需先引入FileSaver.js库)​saveAs(blob, "example.xlsx");

上述代码首先创建了一个包含数据的二维数组,然后使用aoa_to_sheet方法将其转换为 SheetJS 的工作表对象,再将工作表添加到工作簿中。最后,通过XLSX.write方法将工作簿转换为二进制字符串,进一步转换为 Blob 对象,并使用saveAs函数实现文件下载。​

四、使用 xlsx-js-style 添加样式​

如果希望导出的 Excel 文件具有样式,我们可以使用 js-xlsx-style 库。

// 需要安装xlsx库
npm install xlsx-js-style;// 导入
import XLSX from 'xlsx-js-style';// 具体使用。
// 直接导出HTML表格
exportTableAsExcel() {
// 不需要样式直接导出// const table = document.querySelector('.el-table');// const wb = XLSX.utils.table_to_book(table, { raw: true });// XLSX.writeFile(wb, `导出.xlsx`);// 样式处理后导出// 1. 把 HTML 表格转为 workbookconst tables = document.querySelectorAll('.el-table');// 2. 新建一个 workbookconst wb = XLSX.utils.book_new();// 3. 遍历每个 table,生成对应的 sheet 并追加到 workbooktables.forEach((tableEl, idx) => {// 将 HTML table 转为 sheetconst ws = XLSX.utils.table_to_sheet(tableEl, { raw: true })// 设置列宽(wch: 字符宽度,或 wpx: 像素宽度)ws['!cols'] = [{ wch: 6 },  { wch: 30 },  { wch: 30 }, { wch: 8 }, { wch: 8 }, { wch: 20 },  { wch: 20 }, ]// 全表居中对齐Object.keys(ws).forEach(addr => {if (addr[0] === '!') returnconst cell = ws[addr]if (!cell.s) cell.s = {}cell.s.alignment = { horizontal: 'center', vertical: 'center' }})const sheetName = `${idx + 1}导出`XLSX.utils.book_append_sheet(wb, ws, sheetName)})// 5. 写文件const filename = `导出.xlsx`XLSX.writeFile(wb, filename)
},

在上述代码中,导出表格上的所有数据,我们通过定义对象设置了居中对齐等样式,并将该样式应用到每一列中。

五、优化与注意事项​

数据量较大时的性能优化:当导出的数据量较大时,可能会导致页面卡顿甚至浏览器崩溃。可以采用分页导出的方式,将数据分批处理和导出;或者在导出前对数据进行压缩处理,减小文件大小。​
兼容性处理:虽然上述库在大多数现代浏览器中都能良好运行,但仍需考虑一些低版本浏览器的兼容性问题。可以使用 polyfill 等工具来解决兼容性问题,或者在项目中进行针对性的测试和优化。​
文件命名规范:根据业务需求,合理设置导出文件的名称,最好包含时间、数据类型等关键信息,方便用户识别和管理文件。​

个人博客: 前端Excel导出

相关文章:

前端excel导出

在数据可视化和管理日益重要的今天&#xff0c;前端实现 Excel 导出功能已经成为众多项目中的刚需。 一、Excel 导出的常见场景​ 数据报表导出&#xff1a;在企业管理系统、数据分析平台中&#xff0c;用户经常需要将系统中的数据以 Excel 表格的形式导出&#xff0c;便于离…...

pymsql(SQL注入与防SQL注入)

SQL注入&#xff1a; import pymysql# 创建数据库连接 返回一个对象 conn pymysql.connect(host"localhost", # MySQL服务器地址 本地地址 127.0.0.1user"root", # 用户名 &#xff08;账号&#xff09;password"155480", # 密码database&qu…...

基于Springboot + vue + 爬虫实现的高考志愿智能推荐系统

项目描述 本系统包含管理员和学生两个角色。 管理员角色&#xff1a; 个人中心管理&#xff1a;管理员可以管理自己的个人信息。 高校信息管理&#xff1a;管理员可以查询、添加或删除高校信息&#xff0c;并查看高校详细信息。 学生管理&#xff1a;管理员可以查询、添加或…...

delphi使用sqlite3

看了一下delphi调用sqlite3最新版本的调用&#xff0c;网上说的都很片面&#xff0c;也没有完整的资料了。 我自己研究了一下&#xff0c;分享出来。 在调用demo中&#xff0c;官方也给了一个demo但是功能很少&#xff0c;没有参考价值。 1.定义&#xff1a; 首先把sqlite3…...

高压开关柜局部放电信号分析系统

高压开关柜局部放电信号分析系统 - 开发笔记 1. 项目概述 这个项目是我在2025年实现的高压开关柜局部放电信号分析系统&#xff0c;目的是通过采集分析局部放电信号&#xff0c;判断设备的工作状态和潜在故障。系统包含从信号模拟生成、特征提取、到深度学习模型训练的全流程…...

ai环境conda带torch整体迁移。

conda打包好的GPU版torch环境&#xff0c;其实很简单&#xff0c;就是conda装好的torch环境env整体打包&#xff0c;然后到新机器上再解压到env路径。 打开搭建好的环境&#xff0c;找自己路径&#xff0c;我默认的是这个。 cd/root/anaconda3/envs/ 然后整个文件夹打包。tar -…...

电价单位解析与用电设备耗电成本计算

一、电价单位 元/kWh 的解析 定义&#xff1a; 元/kWh 表示每千瓦时电能的费用&#xff0c;即1度电的价格。例如&#xff0c;若电价为0.5元/kWh&#xff0c;则使用1千瓦的电器1小时需支付0.5元。 电价构成&#xff1a; 中国销售电价由四部分组成&#xff1a; 上网电价&#xf…...

辛格迪客户案例 | 华道生物细胞治疗生产及追溯项目(CGTS)

01 华道&#xff08;上海&#xff09;生物医药有限公司&#xff1a;细胞治疗领域的创新先锋 华道&#xff08;上海&#xff09;生物医药有限公司&#xff08;以下简称“华道生物”&#xff09;是一家专注于细胞治疗技术研发与应用的创新型企业&#xff0c;尤其在CAR-T细胞免疫…...

C++(初阶)(十三)——继承

继承 继承概念示例 定义格式 继承和访问方式继承方式访问方式实例 继承类模板基类和派生类之间的转换继承中的作用域隐藏规则选择题 派生类的默认成员函数默认成员函数派生类中的实现 实现一个不能被继承的类继承与友元继承与静态成员多继承及其菱形继承问题虚继承多继承指针偏…...

S09-电机运行时间

感谢粉丝网友的支持&#xff0c;也欢迎你们的讨论和分享。昨天我们简单讨论了一下标准功能块的重要性&#xff0c;仅仅是拿电机块举了一个例子&#xff0c;有粉丝问能否把电机运行时间做到块里面&#xff0c;完善一下功能呢&#xff1f;那是绝对当然的100%可以的啊&#xff01;…...

大语言模型(LLMs)微调技术总结

文章目录 全面总结当前大语言模型&#xff08;LLM&#xff09;微调技术1. 引言2. 为什么需要微调&#xff1f;3. 微调技术分类概览4. 各种微调技术详细介绍4.1 基础微调方法4.1.1 有监督微调&#xff08;Supervised Fine-Tuning, SFT&#xff09;4.1.2 全参数微调&#xff08;F…...

python练习:求数字的阶乘

求数字的阶乘 eg:5的阶乘 54321 """ 求数字的阶乘 eg:5的阶乘 5*4*3*2*1 """count 1 for i in range(1,6):count count * iprint(count)运行结果&#xff1a;...

综合练习一

背景 某银行监管系统&#xff0c;需要设计并实现用户登入记录功能&#xff0c;每个用户登入系统时&#xff0c;系统自动记录登入用户的账户、登入时间、登入失败成功与否信息等&#xff0c;普通用户只能登入登出&#xff0c;管理员可以登入后查看日志及分析统计信息等。 用户…...

List--链表

一、链表 1.1 什么是List&#xff1f; 在C语言中&#xff0c;我们需要使用结构体struct来进行List(链表&#xff09;的实现&#xff1a; struct ListNode {DataType Data;//DataType是任意类型的变量定义struct ListNode* next;//指向下一个结点的指针变量 }; 与之前的vect…...

SpeedyAutoLoot

SpeedyAutoLoot自动拾取插件 SpeedyAutoLoot.lua local AutoLoot CreateFrame(Frame)SpeedyAutoLootDB SpeedyAutoLootDB or {} SpeedyAutoLootDB.global SpeedyAutoLootDB.global or {}local BACKPACK_CONTAINER BACKPACK_CONTAINER local LOOT_SLOT_CURRENCY LOOT_SLOT…...

编程日志4.23

栈的C顺序表实现 #include<iostream> #include<stdexcept> using namespace std; //模板声明&#xff0c;表明Stack类是一个通用的模板&#xff0c;可以用于存储任何类型的元素T template<typename T> //栈的声明 //Stack类的声明&#xff0c;表示一个栈的…...

打印所有字段

package com.volvo.midend.vehicle;import com.volvo.midend.vehicle.dto.out.vista.VistaDemoVO;import java.lang.reflect.Field;public class TestAllFiled {// 递归打印类的所有字段public static void printAllFields(Class<?> clazz, int indentLevel) {// 根据缩…...

4G FS800DTU上传图像至巴法云

目录 1 前言 2 准备工作 2.1 硬件准备 2.2 软件环境 2.3 硬件连接 3 实现方案 4 巴法云平台账号创建与设备联网配置 4.1 创建账号 4.2 进入巴法云 4.3 获取联网参数 4.4 连接巴法云 5 拍照上传至巴法云 6 ESP32-CAM程序 7 总结 1 前言 巴法云(Bemfa Cloud)是一个…...

一键叠图工具

写了个拼图小工具 供大家测试 APP安卓的 测试下载 点击下载 百度网盘: https://pan.baidu.com/s/17B5KVIMMZlOAsF7a16KNug?pwd1234 提取码: 1234 拼图步骤&#xff1a;选图--选择变亮或变暗--滤镜发色 在正式开始之前&#xff0c;我们来定义几条原则先&#xff08;熟悉…...

【OSG学习笔记】Day 12: 回调机制——动态更新场景

UpdateCallback 在OpenSceneGraph&#xff08;OSG&#xff09;里&#xff0c;UpdateCallback是用来动态更新场景的关键机制。 借助UpdateCallback&#xff0c;你能够实现节点的动画效果&#xff0c;像旋转、位移等。 NodeCallback osg::NodeCallback 是一个更通用的回调类&…...

快速上手Prism WPF 工程

1、Prism 介绍 ​定位​&#xff1a; Prism 是 ​微软推出的框架&#xff0c;专为构建 ​模块化、可维护的复合式应用程序​ 设计&#xff0c;主要支持 WPF、Xamarin.Forms、UWP 等平台。​核心功能​&#xff1a; ​模块化开发​&#xff1a;将应用拆分为独立模块&#xff0c…...

Dockerfile讲解与示例汇总

容器化技术已经成为应用开发和部署的标准方式,而Docker作为其中的佼佼者,以其轻量、高效、可移植的特性,深受开发者和运维人员的喜爱。本文将从实用角度出发,分享各类常用服务的Docker部署脚本与最佳实践,希望能帮助各位在容器化之路上少走弯路。 无论你是刚接触Docker的…...

MATLAB Coder代码生成(工业部署)——MATLAB技巧

MATLAB Coder是MATLAB生态中用于将算法代码转换为C/C++代码的核心工具,其生成的代码可直接部署到嵌入式硬件、工业控制器或企业级应用中,尤其在智能制造、物联网和实时控制领域具有广泛应用。 通过 MATLAB Coder,可以轻松地将 MATLAB 代码转换为高效的 C/C++ 代码,适用于嵌…...

3、CMake语法:制作和使用动态库和静态库

动态库和静态库 1 动态库和静态库简介1.1 静态库静态库文件类型.lib 文件.pdb 文件 1.2 动态库动态库文件类型 1.3 总结 2. 制作和使用静态库2.1 CMake指定输出的路径 2.2 VS利用第三方库编译静态库 2.3 使用静态库CMake链接静态库VS链接静态库 3. 制作和使用动态库3.1 CMake指…...

使用双端队列deque模拟栈stack

使用双端队列deque模拟栈stack 今天的内容有点简单~ 众所周知&#x1f913;&#x1f446;&#xff0c;栈作为一个先进后出的结构&#xff0c;在计算机的世界确实能够发挥很多的作用。 而我们C祖师爷本贾尼是第一批把这个结构作为实实在在的容器做进std的人~ 那为了更好的了解…...

Spring系列四:AOP切面编程第三部分

&#x1f40b;AOP-JoinPoint 1.通过JoinPoint可以获取到调用方法的签名 2.其他常用方法 ●代码实现 1.com.zzw.spring.aop.aspectj.SmartAnimalAspect Aspect //表示是一个切面类 Component //会将SmartAnimalAspect注入到容器 public class SmartAnimalAspect {//给Car配置…...

为什么使用ThreadLocal后要调用remove()方法呢?

ThreadLocalMap中包含一个数组&#xff0c;每个节点对应的类名叫Entry&#xff0c;这个类继承WeakReference<ThreadLocal<?>>&#xff0c;entry中有两个属性&#xff1a;key和value。特别需要指出的是key来自于父类中的threadLocal对象。 为了避免内存泄露&#…...

如何在idea 中写spark程序

在 IntelliJ IDEA 中编写 Spark 程序可以通过以下步骤进行&#xff1a; 1. **安装 Scala 插件**&#xff1a;首先确保已经安装了 Scala 插件。在 IntelliJ IDEA 中选择 File -> Settings -> Plugins -> 搜索 Scala -> 安装插件。 2. **创建新项目**&#xff1a;在…...

国产全兼容ADS131E08芯片---LHA7878

LHA787X是一系列多通道同步采样、24位A-∑模数转换器(ADC)&#xff0c;内置可编程增益放大器(PGA)、内部基准和振荡器。凭借ADC的宽动态范围、可扩展数据传输速率以及内部故障检测监测计&#xff0c;LHA787X受到工业电源监测和保护以及测试和测量应用的青睐。真正的高阻抗输入支…...

免费LUT网站

FREE LUTs | Color Lookup Tables - Presetpro.com...

ICH CTD中ISS的关键内容与作用

1. ISS在ICH CTD中的定位 1.1 模块2与模块5的分工 1.1.1 模块2:整体总结的全局视角 模块2的2.7.4 ISS对所有临床研究安全性数据整合分析,涵盖I-III期试验,提供药物安全性全局视角,确保其在目标人群中的可接受性。 ISS需与风险控制措施关联,如说明书警示、风险管理计划,…...

Ocelot的应用案例

搭建3个项目&#xff0c;分别是OcelotDemo、ServerApi1和ServerApi2这3个项目。访问都是通过OcelotDemo进行轮训转发。 代码案例链接&#xff1a;https://download.csdn.net/download/ly1h1/90715035 1.架构图 2.解决方案结构 3.步骤一&#xff0c;添加Nuget包 4.步骤二&…...

OpenCV VC编译版本

vc12 Visual Studio 2013 vc14 Visual Studio 2015 vc15 Visual Studio 2017 vc16 Visual Studio 2019 vc17 Visual Studio 2022 opencv支持情况&#xff1a; OpenCV2.4.10 支持 VS2010&#xff0c;VS2012&#xff0c;VS2013 &#xff08;x64&#xff0c;x86&#xff09; …...

测试用例介绍

文章目录 一、测试用例基本概念1.1 测试用例基本要素 二、测试用例的设计方法2.1 基于需求的设计方法2.2 等价类2.3 边界值2.4 错误猜测法2.6 场景设计法2.7 因果图2.5 正交排列 三、综合&#xff1a;根据某个场景去设计测试用例&#xff08;万能公式&#xff09;四、如何使用F…...

Vue 2 中 Vue 实例对象(vm)的所有核心方法,包含完整示例、使用说明及对比表格

以下是 Vue 2 中 Vue 实例对象&#xff08;vm&#xff09;的所有核心方法&#xff0c;包含完整示例、使用说明及对比表格&#xff1a; 1. $mount() 作用&#xff1a;手动挂载 Vue 实例到 DOM 元素 参数&#xff1a; element&#xff1a;DOM 元素或选择器字符串&#xff08;可…...

大模型的scaling laws:Scaling Laws for Neural Language Models

一、TL&#xff1b;DR Loss与模型size、数据集大小以及用于训练的计算量呈幂律关系其他架构细节&#xff0c;如网络宽度或深度&#xff0c;在较宽范围内影响极小简单的公式可以描述过拟合与模型/数据集大小的依赖关系&#xff0c;以及训练速度与模型大小的依赖关系作用&#x…...

【Docker】使用 jq 管理镜像源

国内访问 Docker Hub 速度较慢&#xff0c;通过配置国内镜像加速器&#xff0c;可显著加快拉取镜像速度。使用 jq 操作 /etc/docker/daemon.json 的 registry-mirrors 字段&#xff0c;可避免手动编辑带来的格式错误&#xff0c;并在添加、替换、删除等场景下保持高效与安全。 …...

青年座谈会的读书汇报

今天&#xff0c;单位组织了一个五四青年座谈会&#xff0c;我们室由于大家都在出差忙之类的&#xff0c;我必须要参加&#xff0c;还要我做一个汇报&#xff0c;我一新来的还没深入到研发工作中&#xff0c;于是决定写了一篇简单的读书笔记&#xff0c;再用deepseek润色一下&a…...

leetcode刷题日记——两数相加

[ 题目描述 ]&#xff1a; [ 思路 ]&#xff1a; 通过两个循环将 l1, l2存储的数字读出&#xff0c;然后求和&#xff0c;再将结果存储链表中由此发了一个问题&#xff0c;结果溢出&#xff0c;如果使用更大的 long 类型&#xff0c;后续不出所料&#xff0c;仍然超出所以只能…...

使用腾讯地图检索地点

最近需求又多了&#xff0c;现在需要使用腾讯地图检索功能&#xff0c;需要经纬度返给商户后端 效果图&#xff1a; 把地图写成组件 现在components创建map/Getpoint.vue 代码如下 <template><div class"getpoint-container"><div><div id&…...

VINS-FUSION:跑通手机录制数据

文章目录 &#x1f4da;简介&#x1f680;手机录制数据&#x1f680;跑通数据&#x1f527;启动rviz&#x1f527;启动配置&#x1f527;播放rosbag&#x1f3af;跑通结果 &#x1f4da;简介 利用智能手机的 摄像头IMU 采集数据&#xff0c;并在 VINS-Fusion&#xff08;视觉惯…...

iView Table 组件跨页选择功能实现文档

iView Table 组件跨页选择功能实现文档 功能概述 实现基于 iView Table 组件的多选功能&#xff0c;支持以下特性&#xff1a; ✅ 跨页数据持久化选择✅ 当前页全选/取消全选✅ 自动同步选中状态显示✅ 分页切换状态保持✅ 高性能大数据量支持 实现方案 技术栈 iView UI 4…...

Spark知识总结

宽窄依赖&#xff1a;父RDD的分区只对应下面子RDD的一个分区&#xff0c;为窄依赖。其余为宽依赖 维度‌‌窄依赖‌‌宽依赖‌数据传输无shuffle&#xff0c;本地处理14需shuffle&#xff0c;跨节点传输14并行度高&#xff08;允许流水线并行&#xff09;57低&#xff08;需等…...

window 图形显示驱动-在 WDDM 1.2 中提供无缝状态转换(下)

在不禁用驱动程序的情况下转换到操作系统 有时操作系统遇到不可恢复的错误&#xff0c;必须发出系统 bug 检查。 发生这种情况时&#xff0c;在某些情况下&#xff0c;操作系统必须控制显示器&#xff0c;但无法停止 WDDM 驱动程序。 需要 WDDM 1.2 及更高版本的驱动程序来实现…...

WPF之Label控件详解

文章目录 1. 引言2. Label控件基础2.1 类继承结构2.2 Label类定义 3. Label控件的核心属性3.1 Content属性3.2 Target属性3.3 其他常用属性 4. 标签样式与模板自定义4.1 简单样式设置4.2 使用Style对象4.3 触发器使用4.4 使用ControlTemplate完全自定义 5. Label与表单控件交互…...

STM32 HAL库实现USB虚拟串口

1. 引言 在嵌入式系统开发中&#xff0c;USB 虚拟串口是一种非常实用的功能。它允许 STM32 微控制器通过 USB 接口与计算机进行通信&#xff0c;就像使用传统的串口一样。这种方式不仅简化了硬件设计&#xff0c;还提高了通信的灵活性和稳定性。STM32F407 系列微控制器具有强大…...

第二阶段:基础加强阶段总体介绍

Java语法的学习笔记 下面放复习的文档链接&#xff0c;如果有需要可以前往下载获取&#xff0c;这个仓库还有关于mysql、hadoop、python等的复习部分&#xff0c;并且每个文档有着对应的代码部分。文章作为复习使用&#xff0c;更多代码内容见链接如下: https://gitee.com/zha…...

Callable Future 实现多线程按照顺序上传文件

/** * 异步上传 BiopsyFlow 中的所有视频和音频文件到暂存服务器 */ private List<String> uploadBiopsyFlowFiles(BiopsyFlow biopsyFlow, SyncFile SyncFile) { List<String> fileBase64List syncFile.getFileBase64List(); if (CollectionUtils.is…...

leetcode283-移动零

leetcode 283 思路 本题是通过把数组中所有不为0的数字前置&#xff0c;实现把所有的0后置的效果 双指针法 slow 充当指针&#xff0c;记录当前零应该被移到的位置。而 i 用来遍历整个数组&#xff0c;检查每个元素。如果当前元素不为零&#xff0c;就将其与 slow 位置上的…...

【dify+docker安装教程】

目录 一、dify安装包下载 二、运行环境配置 1、下载docker 2、安装 2.1 新建文件夹 2.2 安装 2.3 命令安装 3.下载完成后需要重启电脑&#xff0c;注意保存文档&#xff01;&#xff01;注意保存&#xff01;&#xff01;注意&#xff01;&#xff01;&#xff08;血的教…...