【问题标题】:JSON to excel file in javascriptJSON到javascript中的excel文件
【发布时间】:2014-11-24 06:50:58
【问题描述】:

我正在使用以下代码从 JSON 对象创建 excel 文件数据,然后单击按钮下载它。

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 中打开并给出错误“文件可能已损坏”。请帮忙。

【问题讨论】:

  • 请参考之前的堆栈溢出Question。这可能很有用。祝你好运。
  • 感谢@Nayana_Das 的帮助。但是您提到的问题是将 JSON 转换为 CSV 格式的代码。我希望将我的 JSON 对象转换为 XLSX 格式。
  • 希望这个模块对你有帮助,请查看icg-json-to-xlsx module,从这里,你将获得 git 存储库链接,你可以在其中下载该模块并进行锻炼。
  • @Nayana_Das:解析来自 ipaddress 的 json 数据是否有帮助,例如:127.0.0.1:8000/courses/?format=json 并生成 xlsx 表作为输出

标签: javascript


【解决方案1】:

我最近使用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)。

【讨论】:

    猜你喜欢
    • 2015-05-07
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多