nodejs解析上传excel并导出,以及前端实现下载

2 篇文章 0 订阅
2 篇文章 0 订阅

   近期使用nodejs以及相关组件实现了excel上传解析并下载功能。可参考:https://github.com/sun-zy/excel-import-export

一. excel上传

   1. 前端代码:

       excel上传: 

导入转写文档:<input type="file" accept=".xls,.xlsx" name="files" @change="readExcel($event)">
 // 上传文件
readExcel(this: any,e: any): any { //表格导入 
      let that = this,
          files = e.target.files;
            
      if(!files.length) { //如果没有文件名
            return false;
      }else if(!/\.(xls|xlsx)$/.test(files[0].name.toLowerCase())){
            alert('上传格式不正确,请上传xls或者xlsx格式');
            return false;
      }

      let formData = new FormData();
      formData.append("files", files[0]);

      //(这里是自己封装的axios代码,网上有很多案例可供参考)

      that.$http("/importExcel",'postFile',formData,'上传常').then(function(response:any){
          if(response.code === 0){

          }
      },function(error:any){
           console.log(222,error)
      })
}

        接口上传这样,即可说明上传的文件无误:

2.后端代码: 

 class ImportExcelController extends Controller {
      async index() {
          let { ctx,app } = this,

            //用于接收前端上传的文件(文件流形式:fileStream)
            file = ctx.multipart(),
            part = await file(); 

        // 删除原有excel文件(这里是单文件上传,接收上传文件之前删除原有文件,可根据自己需要而定)
        fs.unlink('./文件.xlsx', (err) => {
              if (err) throw err;
              console.log('文件已删除');
        });

        // 文件流转buffer,并存取(这里借用了stream-to-array 插件,将文件流转buffe)
        const bufferData = await toArray(part).then(function (parts) {
              const buffers = []
              for (let i = 0, l = parts.length; i < l; ++i) {
                const part = parts[i]
                buffers.push((part instanceof Buffer) ? part : new Buffer(part))
              }
              return Buffer.concat(buffers)
        })

        // 读取excel数据(这里借用了xlsx 插件,将表格数据转为json;以及exceljs插件,可参考:https://github.com/exceljs/exceljs/blob/HEAD/README_zh.md)
        let wb = XLSX.read(bufferData , {type:'buffer'}),
            excelData = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]),
            workbook = new Excel.Workbook(),
            worksheet = workbook.addWorksheet('worksheet');

        // 定义excel列
        worksheet.columns = [
              { header: '名称', key: 'name', width: 20 },
              { header: '性别', key: 'sex', width: 10 }
        ];

        // 根据需求 做出对应excel的变更
        excelData.forEach((item,index) => {
            let key = Object.keys(item),
                name = excelData[index][key];

            // 添加数据
            worksheet.addRow({name, sex}).commit();
        })

        // 生成excel文件
        await workbook.xlsx.writeFile('./文件.xlsx')

    }
}

module.exports = ImportExcelController;

二.  excel下载

   1.前端代码:

<span @click="exportExcel">下载</span>
exportExcel(this:any){
    //采用get请求,前端直接下载即可
	let that = this,
		url = window.location.protocol + '//' + window.location.host;
			
	window.location.href = url + '/exportExcel';
}

    2.后端代码:

class ExportController extends Controller {
  	async index() {
  		let { ctx,app } = this; 
  		// 格式必须,否则前端下载解析不出来excel格式
		ctx.attachment(`文件.xlsx`)
  		ctx.set('Content-Type', 'text/xml');
  		ctx.body = fs.readFileSync('./文件.xlsx');
	}
}

module.exports = ExportController;

大致就是这样,过程比较复杂,欢迎指出意见与错误~~~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Node.js 可以使用第三方库将 MySQL 数据导出Excel 文件。以下是使用 `mysql` 和 `exceljs` 这两个库实现导出的示例代码: 首先,你需要通过 `npm` 安装这两个库: ``` npm install mysql exceljs ``` 然后创建一个 `exportExcel.js` 文件,并将以下代码复制到文件中: ```javascript const mysql = require('mysql'); const ExcelJS = require('exceljs'); // 创建 MySQL 连接 const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'database_name', }); // 连接 MySQL connection.connect((error) => { if (error) { console.error('Error connecting to MySQL:', error); return; } console.log('Connected to MySQL'); // 查询数据 connection.query('SELECT * FROM table_name', (error, results) => { if (error) { console.error('Error querying MySQL:', error); return; } console.log('Retrieved data from MySQL'); // 创建工作簿 const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('Sheet 1'); // 将数据添加到工作表 results.forEach((row, index) => { const rowIndex = index + 1; Object.values(row).forEach((value, columnIndex) => { const cellIndex = columnIndex + 1; worksheet.getCell(`${String.fromCharCode(64 + cellIndex)}${rowIndex}`).value = value; }); }); // 保存工作簿为 Excel 文件 workbook.xlsx.writeFile('export.xlsx') .then(() => { console.log('Excel file exported'); }) .catch((error) => { console.error('Error exporting Excel file:', error); }) .finally(() => { // 关闭数据库连接 connection.end(); console.log('Disconnected from MySQL'); }); }); }); ``` 以下是文件中需要注意的几点: - 在 `connection` 对象的配置中,你需要替换 `localhost`、`root`、`password` 和 `database_name` 为你的 MySQL 连接信息。 - 在 `connection.query` 中,你需要替换 `table_name` 为你要导出数据的表名。 - 在 `workbook.xlsx.writeFile` 中,你需要替换 `export.xlsx` 为你想要导出Excel 文件的路径。 当你运行这段代码时,它会连接到 MySQL 数据库,并查询你指定的表中的数据。然后,它会将查询结果转换为 Excel 文件 (`export.xlsx`) 并保存到当前文件夹中。 希望这个示例可以帮助你理解如何使用 Node.js 将 MySQL 数据导出Excel 文件。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值