2014-11-24 2 views
0

Я использую следующий код для создания данных файла excel из объекта JSON, а затем загружаю его одним нажатием кнопки.JSON to excel file in javascript

getExcelFile: function() { 
      testJson = validation_data; 
      testTypes = { 
       "name": "String", 
       "city": "String", 
       "country": "String", 
       "birthdate": "String", 
       "amount": "Number" 
      }; 

      emitXmlHeader = function() { 
       return '<?xml version="1.0"?>\n' + 
         '<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">\n' + 
         '<ss:Worksheet ss:Name="Sheet1">\n' + 
         '<ss:Table>\n\n'; 
      }; 

      emitXmlFooter = function() { 
       return '\n</ss:Table>\n' + 
         '</ss:Worksheet>\n' + 
         '</ss:Workbook>\n'; 
      }; 

      jsonToSsXml = function(jsonObject) { 
       var row; 
       var col; 
       var xml; 
       var data = typeof jsonObject != "object" 
         ? JSON.parse(jsonObject) 
         : jsonObject; 

       xml = emitXmlHeader(); 

       for (row = 0; row < data.length; row++) { 
        xml += '<ss:Row>\n'; 

        for (col in data[row]) { 
         xml += ' <ss:Cell>\n'; 
         xml += ' <ss:Data ss:Type="' + testTypes[col] + '">'; 
         xml += data[row][col] + '</ss:Data>\n'; 
         xml += ' </ss:Cell>\n'; 
        } 

        xml += '</ss:Row>\n'; 
       } 

       xml += emitXmlFooter(); 
       return xml; 
      }; 
      download = function(content, filename, contentType) { 
       if (!contentType) 
        contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; 
       var a = document.getElementById('test'); 
       var blob = new Blob([content], { 
        'type': contentType 
       }); 
       a.href = window.URL.createObjectURL(blob); 
       a.download = filename; 
      }; 

      download(jsonToSsXml(testJson), 'validation_data.xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
     } 

Но созданный файл не открывается в Microsoft Office 2007 и дает ошибку «Файл может быть поврежден». Пожалуйста помоги.

+1

Обратите внимание, что это предыдущее переполнение стека [Вопрос] (http://stackoverflow.com/questions/4130849/convert-json-format-to-csv-format-for-ms-excel). Это может быть полезно. Удачи. –

+0

Спасибо @Nayana_Das за вашу помощь. Но упомянутый вами вопрос имеет код, который преобразует JSON в формат CSV. Я хочу, чтобы объект JSON был преобразован в формат XLSX. –

+0

Надеюсь, что этот модуль поможет вам проверить [icg-json-to-xlsx module] (https://www.npmjs.org/package/icg-json-to-xlsx), отсюда u получит репозиторий git link, где u можно загрузить этот модуль и выполнить работу. –

ответ

0

Я недавно получил решение по этому вопросу, используя AlaSQL.

working example.

var sheet_1_data = [{Col_One:1, Col_Two:11}, {Col_One:2, Col_Two:22}]; 
var sheet_2_data = [{Col_One:10, Col_Two:110}, {Col_One:20, Col_Two:220}]; 
var opts = [{sheetid:'Sheet One',header:true},{sheetid:'Sheet Two',header:false}]; 
var res = alasql('SELECT * INTO XLSX("sample_file.xlsx",?) FROM ?', [opts,[sheet_1_data ,sheet_2_data]]); 

библиотеки, необходимые:

<script src="http://alasql.org/console/alasql.min.js"></script> 
<script src="http://alasql.org/console/xlsx.core.min.js"></script> 

ПРИМЕЧАНИЕ: Не передавайте неопределенные значения функции. Сгенерированный файл будет выдавать предупреждающие сообщения, если вы попытаетесь открыть их в этом случае.

Другие опции были способны конвертировать JSON в CSV (не XLSX).