利用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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Node.js log4js日志管理详解

    Node.js log4js日志管理详解

    日志对任何的应用来说都是至关重要的,下面这篇文章主要给大家介绍了关于Node.js log4js日志管理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-07-07
  • node连接MongoDB数据库错误:MongoServerSelectionError: connect ECONNREFUSED ::1:27017(解决方案)

    node连接MongoDB数据库错误:MongoServerSelectionError: connect ECON

    使用node连接MongoDB数据库时发生报错,MongoServerSelectionError: connect ECONNREFUSED ::1:27017,本文给大家分享原因分析及解决方案,感兴趣的朋友跟随小编一起看看吧
    2023-04-04
  • Node.js 中的 RSA 加密、解密、签名与验证

    Node.js 中的 RSA 加密、解密、签名与验证

    RSA加密算法因其非对称的特性,广泛应用于数据的加密、解密、签名和验证等安全领域,本文主要介绍了Node.js 中的 RSA 加密、解密、签名与验证,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • NodeJS学习笔记之网络编程

    NodeJS学习笔记之网络编程

    Node.js采用了Google Chrome浏览器的V8引擎,性能很好,同时还提供了很多系统级的API,如文件操作、网络编程等。Node.js则是一个全面的后台运行时,为Javascript提供了其他语言能够实现的许多功能。今天我们来看下Nodejs的网络编程
    2014-08-08
  • Zabbix添加Node.js监控的方法

    Zabbix添加Node.js监控的方法

    这篇文章主要介绍了Zabbix添加Node.js监控的方法,非常不错具有一定的参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • 推荐 21 款优秀的高性能 Node.js 开发框架

    推荐 21 款优秀的高性能 Node.js 开发框架

    Node.js是JavaScript中最为流行的框架之一,易于创建可扩展的Web应用。Node.js包含不同类型框架,包括MVC, full-stack,REST API以及Generators。借助这些框架使Node.js更加易于使用,它还支持众多特性功能,只需几个步骤就可快速搭建强大的Web应用。本文为大家推荐21款
    2014-08-08
  • Nodejs实现内网穿透服务

    Nodejs实现内网穿透服务

    很多人都不知道什么是内网穿透,就是公网客户端,可以访问局域网内的服务,本文详细的介绍了原理以及实现,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Node.js开发者必须了解的4个JS要点

    Node.js开发者必须了解的4个JS要点

    这篇文章主要介绍了Node.js开发者必须了解的4个JS要点,Node.js是一个面向服务器的框架,立足于Chrome强大的V8 JS引擎。尽管它由C++编写而成,但是它及其应用是运行在JS上的,需要的朋友可以参考下
    2016-02-02
  • nodejs搭建本地服务器并访问文件的方法

    nodejs搭建本地服务器并访问文件的方法

    本篇文章主要介绍了nodejs搭建本地服务器并访问文件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • 详解如何用typescript开发koa2的二三事

    详解如何用typescript开发koa2的二三事

    这篇文章主要介绍了详解如何用typescript开发koa2的二三事,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11

最新评论