利用node实现数据库数据导出到Excel

 更新时间:2024年11月06日 08:22:34   作者:JYeontu  
本文将详细讲解如何使用Node.js实现从MySQL数据库获取数据,并生成包含多个工作表的 Excel 文件,每个工作表对应数据库中的一个表,有需要的可以了解下

在现代软件开发中,数据的处理和展示是至关重要的环节。其中,将数据库中的数据提取出来并转换为直观的 Excel 文件是一项常见且实用的需求。本文将详细讲解如何使用 Node.js 实现从 MySQL 数据库获取数据,并生成包含多个工作表的 Excel 文件,每个工作表对应数据库中的一个表。

一、技术选型与准备

Node.js 作为一个强大的后端开发平台,为我们提供了丰富的模块和库来完成这个功能。我们主要使用了以下几个关键的库:

  • mysql 库:这是用于与 MySQL 数据库进行交互的核心库。它允许我们建立连接、执行 SQL 查询等操作,是整个数据获取过程的基础。
  • ExcelJS 库:专门用于在 Node.js 环境中创建和操作 Excel 文件。它提供了丰富的 API,可以方便地设置工作表、添加行列数据等。

二、数据库连接配置

首先,我们需要配置数据库连接信息。以下是相关的代码片段:

const dbConfig = {
  host: "localhost",
  user: "root",//用户名
  password: "root",//密码
  database: "test",//数据库名
};
const sqlData = {};//用于保存数据表数据
const connection = mysql.createConnection(dbConfig);

这里定义了一个dbConfig对象,其中包含了连接 MySQL 数据库所需的关键信息,包括主机地址、用户名、密码和数据库名称。sqlData对象则用于存储从数据库中查询出来的数据,初始化为空。connection对象是通过mysql.createConnection方法创建的数据库连接实例,它是后续所有数据库操作的入口。

三、连接数据库

连接数据库是整个流程的第一步,代码中通过一个函数connectDatabase来实现:

function connectDatabase() {
  return new Promise((resolve) => {
    connection.connect((error) => {
      if (error) throw error;
      console.log("成功连接数据库!");
      resolve("成功连接数据库!");
    });
  });
}

这个函数返回一个 Promise,在connection.connect方法中,我们处理连接可能出现的错误。如果连接成功,会在控制台输出相应的提示信息,并通过resolve将成功信息传递出去。这种基于 Promise 的设计使得我们可以方便地在异步流程中处理数据库连接的结果。

四、导出表数据

接下来是核心的导出表数据功能,由exportTableData函数实现:

function exportTableData(tableName) {
  return new Promise((resolve) => {
    connection.query(`SELECT * FROM ${tableName}`, (error, results) => {
      if (error) throw error;
      sqlData[tableName] = results;
      console.log(`表${tableName} 数据已成功导出.`);
      resolve(`表${tableName} 数据已成功导出.`);
    });
  });
}

这个函数接受一个表名作为参数,使用connection.query方法执行一个SELECT *的 SQL 查询语句,获取指定表的所有数据。如果查询过程中没有错误,将查询结果存储在sqlData对象中,以表名为键。同时,在控制台输出表数据导出成功的信息,并通过resolve将成功信息返回,同样是基于 Promise 的异步处理。

五、获取所有表名与数据

为了获取数据库中的所有表数据,我们需要先获取所有表名,这通过mysqlQuery函数实现:

function mysqlQuery() {
  return new Promise((resolve) => {
    connection.query("SHOW TABLES", (error, results) => {
      if (error) throw error;
      resolve(results);
    });
  });
}

这个函数执行SHOW TABLES的 SQL 查询,并返回一个包含所有表名结果的 Promise。

有了表名之后,我们可以通过getAllTableData函数来获取所有表的数据:

async function getAllTableData() {
  const reqList = [];
  const results = await mysqlQuery();
  results.forEach((result) => {
    const tableName = result[`Tables_in_${dbConfig.database}`];
    reqList.push(exportTableData(tableName));
  });
  await Promise.all(reqList);
  console.log("已全部导出!");
}

在这个异步函数中,首先调用mysqlQuery获取所有表名,然后遍历每个表名,调用exportTableData函数来获取每个表的数据,并将这些操作的 Promise 添加到reqList数组中。最后,使用Promise.all来等待所有的表数据导出操作完成,确保所有数据都被正确获取后,在控制台输出已全部导出的信息。

数据库中有这么两张测试用的表

数据分别是

六、生成 Excel 文件

获取到所有表的数据后,我们使用generateExcelFromJson函数将数据生成 Excel 文件:

async function generateExcelFromJson(jsonData) {
  const workbook = new ExcelJS.Workbook();

  for (const sheetName in jsonData) {
    const worksheet = workbook.addWorksheet(sheetName);
    worksheet.columns = Object.keys(jsonData[sheetName][0]).map((key) => ({
      header: key,
      key: key,
    }));
    jsonData[sheetName].forEach((rowData) => {
      worksheet.addRow(rowData);
    });
  }

  await workbook.xlsx.writeFile(`${dbConfig.database}.xlsx`);
  console.log(`${dbConfig.database}.xlsx已成功导出`);
}

在这个函数中,首先创建一个ExcelJSWorkbook实例。然后遍历jsonData对象(其中存储了所有表的数据),为每个表名创建一个工作表。对于每个工作表,通过分析数据的键来设置列标题,并将每一行数据添加到工作表中。最后,使用workbook.xlsx.writeFile方法将生成的 Excel 文件保存为以数据库名命名的文件,并在控制台输出成功导出的信息。

导出excel数据如下:

七、主流程执行

最后,通过run函数来组织整个流程:

async function run() {
  await connectDatabase();
  await getAllTableData();
  await generateExcelFromJson(sqlData);
  process.exit(0);
}

run();

run函数中,按照顺序依次执行连接数据库、获取所有表数据和生成 Excel 文件的操作。当所有操作完成后,使用process.exit(0)正常退出程序。

通过以上步骤,我们成功地实现了从 MySQL 数据库中获取数据并生成 Excel 文件的功能,为数据的进一步分析和处理提供了便利。这种方法在很多实际的业务场景中都有着广泛的应用,比如数据备份、报表生成等。

到此这篇关于利用node实现数据库数据导出到Excel的文章就介绍到这了,更多相关node数据库数据导出到Excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nest.js中使用HTTP五种数据传输方式小结

    Nest.js中使用HTTP五种数据传输方式小结

    本文主要介绍了Nest.js中使用HTTP五种数据传输方式小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • nodejs处理tcp连接的核心流程

    nodejs处理tcp连接的核心流程

    这篇文章主要介绍了nodejs处理tcp连接的核心流程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • node.js连接mongoose数据库方法详解

    node.js连接mongoose数据库方法详解

    之前我们都是通过shell来完成对数据库的各种操作的,在开发中大部分时候我们都需要通过程序来完成对数据库的操作。而Mongoose就是一个让我们可以通过Node来操作MongoDB的模块
    2022-08-08
  • node.js中cluster的使用教程

    node.js中cluster的使用教程

    这篇文章主要介绍了node.js中cluster的使用教程,分别介绍使用NODE中cluster利用多核CPU、通过消息传递来监控工作进程状态以及终止进程等功能,给出了详细的示例代码供大家参考学习,需要的朋友们下面来一起看看吧
    2017-06-06
  • node.js使用cluster实现多进程

    node.js使用cluster实现多进程

    本文给大家详细介绍了nodejs使用cluster模块实现多进程的方法和步奏,非常的细致全面,有需要的小伙伴可以参考下
    2016-03-03
  • nvm管理node无法正常切换node版本问题的解决方法

    nvm管理node无法正常切换node版本问题的解决方法

    相信一定会有存在一些小伙伴 明明都已经按着操作卸载node 和安装nvm 了但是 依旧无法正常通过nvm管理node,本文将给大家介绍nvm管理node无法正常切换node版本问题的解决方法,需要的朋友可以参考下
    2024-01-01
  • node.js实现http服务器与浏览器之间的内容缓存操作示例

    node.js实现http服务器与浏览器之间的内容缓存操作示例

    这篇文章主要介绍了node.js实现http服务器与浏览器之间的内容缓存操作,结合实例形式分析了node.js http服务器与浏览器之间的内容缓存原理与具体实现技巧,需要的朋友可以参考下
    2020-02-02
  • Node实现前端本地开发接口代理服务

    Node实现前端本地开发接口代理服务

    本文主要介绍了Node实现前端本地开发接口代理服务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • nodejs中npx 命令的使用小结

    nodejs中npx 命令的使用小结

    npx是npm 5.2+内置的工具,可直接运行Node.js包的可执行文件而无需安装,本文就来介绍一下nodejs中npx 命令的使用小结,感兴趣的可以了解一下
    2026-01-01
  • PM2部署与管理Node.js项目的步骤

    PM2部署与管理Node.js项目的步骤

    使用 PM2(Process Manager 2)来部署Node.js项目是一种非常流行的方法,因为它可以帮助你管理 Node.js 应用的进程,包括启动、停止、重启和监控,下面介绍如何使用PM2部署一个Node.js项目的步骤,感兴趣的朋友跟随小编一起看看吧
    2025-10-10

最新评论