2016-03-30 22 views
4

Excelシートで提供されているデータ型に従ってフォームを設計しなければならないフォームExcelシートを生成するタスクがあります。例:
enter image description hereExcelからJavascriptのJSONスキーマへ

私は動的にフォームを生成するためにMongoDBに挿入できるようにExcelのデータの上からJSONスキーマを作成しようとしています。続き

は私が実装しようとしているコードです:

  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に実装しようとしているコードです。

ご協力いただければ幸いです。

+4

コードの塊を貼り付けて、デバッグを依頼しないでください。何を試しましたか?実際の対期待行動は何でしたか?エラーメッセージ? http://stackoverflow.com/help/how-to-ask –

+0

@JuanMendes:そうです。私はポストを更新しましょう – Sky

+0

@JuanMendes:ポストplzを更新しました – Sky

答えて

1

あなたは、クライアント側とJS-XLSXライブラリを使用して他のExcel形式でXLSXを読むことができます。

ドロップダウンを格納する必要はありません。入力に入力する他の値は乗算されます。それらは別々に保管する必要があります。

{ 
    "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" 
      ] 
     } 
    } 
}; 

ように、1つのスキーマ・オブジェクトを組み合わせることができますので、配列オブジェクトは

[ { "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" } ] 

下にドロップダウンと無線の値は以下のように別々に保存しなければならないようにする必要があります注:日付型の値は、JSONにシリアル化する際に日付オブジェクトとして格納することはできません。これらは、文字列または数値として格納されなければならないと私は

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

が続き、このGITプロジェクトにJSONの生成とフォームの生成を実装している

が出力され、クライアント側のDateオブジェクトに変換する必要がありますスクリーンショット。

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" 
     ] 
    } 
    } 
} 
+0

@ 11thdention:ありがとう、 – Sky

+0

よろしくお願いします! – 11thdimension

0

This projectは、XLSXファイルからJSONを生成します。そのコードを見てください。

Javaで書かれています。そして、apache.poiを使用してXLSXファイルを解析し、mongodb.bsonを使用してJSONを生成します。たぶんそれはあなたに有用なアイデアを与えるかもしれません。

This projectおよびthis projectはJavascriptで書かれています。 githubで検索すると便利なコードが見つかるかもしれません。

0

schema with that of dataというコンセプトを混乱させているようです。 FinanceであるAbc Xyzaの部門はデータです。 Excelファイルに与えられたDepartmentの可能な値がFinance、HealthまたはInsuranceであることがスキーマであること。ここで

は一例です:http://json-schema.org/examples.html

そこで質問のタイトルが正しく、あなたはJSONスキーマが必要な場合は、その後、私はの場合には、提供される値から文字列の配列を作成する機能のために行くだろう'ドロップダウン'または 'ラジオボタン'の種類、列の値のデータ型を決定する(数値の場合はint、名前の場合は文字列など)、最小値と最大値、さらには許容文字列パターンを決定する。

私はここに想像出力は次のようなものです:

{ 
    "id" : "http://your.site/form-schema", 
    "title" : "Form schema", 
    "description" : "JSON schema for autogenerating forms", 
    "type" : "object", 
    "properties" : { 
     "Number" : { 
      "type" : "integer" 
     }, 
     "FirstName" : { 
      "type" : "string" 
     }, 
     "LastName" : { 
      "type" : "string" 
     }, 
     "Dept" : { 
      "type" : "string", 
      "oneOf" : [ 
         { "format" : "Finance"}, 
         { "format" : "Health" }, 
         { "format" : "Insurance" } 
      ] 
     }, 
     "Country" : { 
      "type" : "string", 
      "oneOf" : [ 
         {"format" : "US" }, 
         { "format" : "Australia" }, 
         { "format" : "Canada" } 
      ] 
     }, 
     "Year" : { 
      "type" : "integer", 
      "oneOf" : [ 
         { "format" : "2014" }, 
         { "format" : "2015" }, 
         { "format" : "2016" } 
      ] 
     }, 
     "DateofBirth" : { 
      "type" : "string", 
      "pattern" : "yyyyMMdd" 
     }, 
     "Gender" : { 
      "enum" : ["M", "F"] 
     } 
    }, 
    "required" : ["Number", "FirstName", "LastName"], 
    "additionalProperties" : false 
} 
関連する問題