javascript - Javascript 中的 Excel 到 JSON 模式

标签 javascript json mongodb mean-stack mean

我的任务是生成表格 Excelsheet,我必须根据 ExcelSheet 中提供的数据类型设计表格。例子:
enter image description here

我正在尝试从上面的 excel 数据创建一个 JSON 模式,以便我可以将它插入到 mongodb 中以动态生成表单。

以下是我要实现的代码:

            var workbook = XLSX.readFile(req.file.path);
            //console.log(workbook);
            var result = {};
            workbook.SheetNames.forEach(function (sheetName) {
                var roa = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
                if (roa.length > 0) {
                    result = roa;
                }
            });
            //return result;
            //console.log(result);

            var jsonData = {};
            var dropdown = {};
            var attrTypes = result[0];
            //console.log(attrTypes);

            for (var i = 1; i < result.length; i++) {
                var obj = result[i];
                //console.log(obj);
                for (var key in obj) {
                    var attrName = key;
                    var attrValue = obj[key];
                    if (attrTypes[attrName]) {
                        var type = attrTypes[attrName].toLowerCase().replace(/ /g, ''); // Means type is given                        
                        //console.log(type);

                        if (type === "selectbox") {
                            console.log(attrValue);
                            //var dropdown = attrValue;
                            //console.log(dropdown);
                        }

                    } else {
                        //console.log(type); // Means type is not given
                        jsonData = attrName + ":" + attrValue;
                        //console.log(jsonData);
                    }
                }
            }

预期的 JSON 输出:

[
{
    Number : 1,
    FirstName : "Abc",
    LastName : "Xyza",
    Dept: ['Finance','Health','Insurance'],
    Country : ['US','Australia','Canada'],
    Year : ['2014','2015','2016'],,
    DateofBirth" : new Date(1937,05,02),
    Gender : ['M','F']    
},
{
    Number : 2,
    FirstName : "Abcd",
    LastName : "Xyzb",
    Dept: ['Finance','Health','Insurance'],
    Country : ['US','Australia','Canada'],
    Year : ['2014','2015','2016'],,
    DateofBirth" : new Date(1948,10,27),
    Gender : ['M','F']    
}
        .
        .
        and so on
]

以上是我试图在 MEANSTACK 中实现的代码。

如有任何帮助,我们将不胜感激。

最佳答案

您可以使用JS-XLSX 在客户端阅读XLSX 和其他Excel 格式。图书馆。

您不需要在下拉列表中存储要在输入乘法中填充的任何其他值。它们应该分开存放。所以数组对象应该如下所示

[   
    {  
      "Number":1,
      "FirstName":"Abc",
      "LastName":"Xyza",
      "Dept":"Finance",
      "Country":"US",
      "Year":2014,
      "DateOfBirth":19370502,
      "Gender":"M"
    },
    {  
      "Number":2,
      "FirstName":"Abcd",
      "LastName":"Xyzb",
      "Dept":"Health",
      "Country":"Australia",
      "Year":2014,
      "DateOfBirth":19481027,
      "Gender":"F"
    }
]

Dropdown 和 radio 值应该像下面这样分开存储:

{  
   "Dept":{  
      "type":"dropdown",
      "values":[  
         "Finance",
         "Health",
         "Insurance"
      ]
   },
   "Country":{  
      "type":"dropdown",
      "values":[  
         "US",
         "Australia",
         "Canada"
      ]
   },
   "Year":{  
      "type":"dropdown",
      "values":[  
         2014,
         2015,
         2016
      ]
   },
   "Gender":{  
      "type":"radio button",
      "values":[  
         "M",
         "F"
      ]
   }
}

这两者可以组合成一个模式对象作为

//included single objects from both for brevity
jsonSchema = {
    array: [
        {  
            "Number":2,
            "FirstName":"Abcd",
            "LastName":"Xyzb",
            "Dept":"Health",
            "Country":"Australia",
            "Year":2014,
            "DateOfBirth":19481027,
            "Gender":"F"
        }
    ],
    inputs: {
        "Gender":{  
            "type":"radio button",
            "values":[  
                "M",
                "F"
            ]
        }
    }
};

注意:在序列化为 JSON 时,日期类型值不能存储为日期对象。这些应存储为字符串或数字,并应在客户端转换为 Date 对象

我在这个GIT项目中实现了JSON生成和Form生成

https://github.com/ConsciousObserver/stackoverflow/tree/master/excelTest

以下是输出截图。

Generated Forms

这是输出的 JSON。

{
  "array": [
    {
      "Number": 1,
      "FirstName": "Abc",
      "LastName": "Xyza",
      "Dept": "Finance",
      "Country": "US",
      "Year": 2014,
      "DateOfBirth": 19370502,
      "Gender": "M"
    },
    {
      "Number": 2,
      "FirstName": "Abcd",
      "LastName": "Xyzb",
      "Dept": "Health",
      "Country": "Australia",
      "Year": 2014,
      "DateOfBirth": 19481027,
      "Gender": "F"
    },
    {
      "Number": 3,
      "FirstName": "Abce",
      "LastName": "Xyzc",
      "Dept": "Health",
      "Country": "US",
      "Year": 2015,
      "DateOfBirth": 19441029,
      "Gender": "F"
    },
    {
      "Number": 4,
      "FirstName": "Abcf",
      "LastName": "Xyzd",
      "Dept": "Insurance",
      "Country": "Canada",
      "Year": 2016,
      "DateOfBirth": 19481030,
      "Gender": "M"
    },
    {
      "Number": 5,
      "FirstName": "Abcg",
      "LastName": "Xyze",
      "Dept": "Finance",
      "Country": "Canada",
      "Year": 2016,
      "DateOfBirth": 19480604,
      "Gender": "M"
    }
  ],
  "inputs": {
    "Dept": {
      "type": "dropdown",
      "values": [
        "Finance",
        "Health",
        "Insurance"
      ]
    },
    "Country": {
      "type": "dropdown",
      "values": [
        "US",
        "Australia",
        "Canada"
      ]
    },
    "Year": {
      "type": "dropdown",
      "values": [
        2014,
        2015,
        2016
      ]
    },
    "Gender": {
      "type": "radio button",
      "values": [
        "M",
        "F"
      ]
    }
  }
}

关于javascript - Javascript 中的 Excel 到 JSON 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36312137/

相关文章:

c# - 在 Dynamics CRM 2013/2015 插件中序列化/反序列化 JSON

mongodb - 无法从 ReactiveMongo Play 应用访问经过身份验证的 MongoDB 集合

node.js - Mongoose findOne() 不返回 Promise

javascript - 尝试使用 React 的 <select> 创建下拉选择菜单并将数组中的用户映射为选项

javascript - 在jquery mobile中动态生成optgroup

javascript - $stateProvider 不工作并且不在控制台中显示错误

ios - 如何将 NSDictionary 转换为 JSON 对象?

javascript - JSON.parse 用于 JSON 对象而不是字符串

mongodb - spring-data-mongo,如何从 mongo 返回保存的对象的 _id ?

javascript - 如何在网络爬虫中以编程方式设置 Angular JS 选择值?