Javascript 在nodejs中将excel文件转换为json

Javascript 在nodejs中将excel文件转换为json,javascript,json,node.js,excel,Javascript,Json,Node.js,Excel,我正在尝试使用以下api将excel文件转换为json: 转换json节点api 我可以在本地机器上完成,但不能在服务器上完成。只有csv到json在本地和服务器上工作。这是我的密码: 服务器在尝试解析第一个console.log之后的excel文件时崩溃。下面是它的外观: 我认为服务器上没有excel驱动程序是一个问题,但下载并安装之后,它也不起作用。有人遇到过这个问题吗?如果您需要更多信息,请告诉我。使用此方法可以轻松地进行下发和解析: npm install --save excel'

我正在尝试使用以下api将excel文件转换为json: 转换json节点api

我可以在本地机器上完成,但不能在服务器上完成。只有csv到json在本地和服务器上工作。这是我的密码:

服务器在尝试解析第一个console.log之后的excel文件时崩溃。下面是它的外观:


我认为服务器上没有excel驱动程序是一个问题,但下载并安装之后,它也不起作用。有人遇到过这个问题吗?如果您需要更多信息,请告诉我。

使用此方法可以轻松地进行下发和解析:

npm install --save excel'



var xls = require('excel');

xls('Sheet.xlsx', function(err, data) {
  if(err) throw err;
    // data is an array of arrays
});
正如它所说,它返回的数据是一个数组数组。我们希望它是JSON,这样我们就可以用它做任何我们想做的事情

这是一个将数组数组转换为JSON的函数:

function convertToJSON(array) {
  var first = array[0].join()
  var headers = first.split(',');

  var jsonData = [];
  for ( var i = 1, length = array.length; i < length; i++ )
  {

    var myRow = array[i].join();
    var row = myRow.split(',');

    var data = {};
    for ( var x = 0; x < row.length; x++ )
    {
      data[headers[x]] = row[x];
    }
    jsonData.push(data);

  }
  return jsonData;
};

关注问题第一行的前半部分:如何将Excel转换为json

假设:Excel电子表格是一个正方形的数据,其中第一行是对象键,其余行是对象值,所需的json是对象列表

对前面答案的改进:删除不必要的拆分和联接(如果键或值包含逗号,则不必要并可能导致无效转换),允许键中的虚线字符串暗示嵌套对象,coffeescript,写入文件

虚线表示法:包含firstName、lastName、address.street、address.city、address.state、address.zip的关键行(0)每行将生成一个包含名字和姓氏的文档以及一个包含地址的名为address的嵌入式文档

通过视觉从中分配功能

首先,加载excel模块

npm install excel --save-dev
不优雅,只需完成“r”代码即可

fs=需要“fs”
excel=需要“excel”
文件=[
{src:'input.xlsx',dst:'output.json'}
]
#为虚线特性名称指定值-在子对象上设置值
赋值=(对象、键、值)->
#因为我们递归,一个键可以是一个虚线字符串,也可以是一个先前分割的字符串
#虚线。
key=key.split'.'除非key的类型为'object'
如果key.length>1
e=键。移位()
obj[e]=如果Object.prototype.toString.call(obj[e])是“[Object Object]”,那么obj[e]else{}
分配对象、键、值
其他的
obj[键[0]]=值
#excel模块从指定的xlsx文件读取工作表0
进程=(src,dst)->
excel src(错误,数据)->
犯了错误就扔
密钥=数据[0]
行=数据[1..]
结果=[]
一行一行
项目={}
分配项、键[索引]、值对值、行中的索引
结果:推送项目
fs.writeFile dst,JSON.stringify(结果,null,2),(错误)->
如果出错
console.error(“写入文件#{dst}时出错”,err)
其他的
console.log“更新的#{dst}”
处理文件中文件的file.src、file.dst

找到适合我的快速准确的解决方案:

server.js

let express = require('express'),
    app = express(),
    bodyParser = require('body-parser'),
    multer = require('multer'),
    crypto = require('crypto'),
    xlsxtojson = require('xlsx-to-json'),
    xlstojson = require("xls-to-json");

let fileExtension = require('file-extension');

    app.use(bodyParser.json());  

    let storage = multer.diskStorage({ //multers disk storage settings
        destination: function (req, file, cb) {
            cb(null, './input/')
        },
        filename: function (req, file, cb) {
            crypto.pseudoRandomBytes(16, function (err, raw) {
                cb(null, raw.toString('hex') + Date.now() + '.' + fileExtension(file.mimetype));
                });
        }
    });

    let upload = multer({storage: storage}).single('file');

    /** Method to handle the form submit */
    app.post('/sendFile', function(req, res) {
        let excel2json;
        upload(req,res,function(err){
            if(err){
                 res.json({error_code:401,err_desc:err});
                 return;
            }
            if(!req.file){
                res.json({error_code:404,err_desc:"File not found!"});
                return;
            }

            if(req.file.originalname.split('.')[req.file.originalname.split('.').length-1] === 'xlsx'){
                excel2json = xlsxtojson;
            } else {
                excel2json = xlstojson;
            }

           //  code to convert excel data to json  format
            excel2json({
                input: req.file.path,  
                output: "output/"+Date.now()+".json", // output json 
                lowerCaseHeaders:true
            }, function(err, result) {
                if(err) {
                  res.json(err);
                } else {
                  res.json(result);
                }
            });

        })

    });
    // load index file to upload file on http://localhost:3000/
    app.get('/',function(req,res){
        res.sendFile(__dirname + "/index.html");
    });

    app.listen('3000', function(){
        console.log('Server running on port 3000');
    });
index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Excel to Json in nodejs | jsonworld</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>

<div class="jumbotron text-center">
    <h1>Excel to Json in nodejs</h1>
    <p>source : <a href="https://jsonworld.com">jsonworld</a></p> 
</div>

<div class="container">
    <div class="row">
        <div class="col-sm-4 col-md-offset-4">
            <form id="form" enctype ="multipart/form-data" action="sendFile" method="post">
            <div class="form-group">
            <input type="file" name="file" class="form-control"/>
            <input type="submit" value="Upload" name="submit" class="btn btn-primary" style="float:right; margin-top:30px;">
            </form>    
        </div>
    </div>
</div>

</body>
</html>

nodejs | jsonworld中的Excel到Json
nodejs中的Excel到Json
资料来源:


确保您的Excel文件未被任何其他软件(尤其是Excel!)打开。如果您的代码列表正确,请使用
console.log(“将转换…”)不打印任何内容,则崩溃可能发生在其他地方。尝试注释整个Try-catch块,并确保显示第二个日志。您应该注意,您使用的模块仅支持
.xlsx
文件。对于较旧的支持,它可以很好地工作。如果列中的某个值已经包含逗号(,),则会失败。它也会将其拆分并将值追加到下一列。你能在上面的代码中解决这个问题吗?
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Excel to Json in nodejs | jsonworld</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>

<div class="jumbotron text-center">
    <h1>Excel to Json in nodejs</h1>
    <p>source : <a href="https://jsonworld.com">jsonworld</a></p> 
</div>

<div class="container">
    <div class="row">
        <div class="col-sm-4 col-md-offset-4">
            <form id="form" enctype ="multipart/form-data" action="sendFile" method="post">
            <div class="form-group">
            <input type="file" name="file" class="form-control"/>
            <input type="submit" value="Upload" name="submit" class="btn btn-primary" style="float:right; margin-top:30px;">
            </form>    
        </div>
    </div>
</div>

</body>
</html>