打开excel文件并导出到json

时间:2011-12-09 08:22:13

标签: javascript jquery json excel

我想根据具有以下格式的Excel文件动态创建<select></select>(或者可能是带有自动填充的文本框)输入文件:

Airport Code    Airport Name    Language Code
 AAC             Al Arish                                            en
 AAE             Annaba Les Saline                                   en
 AAH             Aachen Merzbruck                                    en
 AAL             Aalborg                                             en
 AAN             Al Ain                                              en
 AAQ             Anapa                                               en
 AAR             Aarhus Tirstrup                                     en
 AAU             Asau                                                en

(还有更多)

我需要打开.xls文件并读取每一行,以便我可以将两个第一列作为锚点和值。

这是我发现的最相关内容,链接已被删除How to read and write into file using JavaScript

是否有适合IE7的解决方案

4 个答案:

答案 0 :(得分:6)

如果您的文件在http服务器上,您可以使用AJAX读取它。

让我们先定义一些常量:

var CSV_URL = "http://server.domain/path/file.csv";
var CSV_COLUMN = ';'
var CSV_ROW = '\n'

CSV_URL是您的CSV文件的网址。

CSV_COLUMN是分隔符字符,用于分隔列。

CSV_ROW是分隔行的分隔符。


现在我们需要进行AJAX查询以获取CSV数据内容。 我正在使用jQuery来执行AJAX请求。

$.get (CSV_URL, null, function (data) {
    var result = parse_csv (data);
    var e = create_select (result);
    document.body.appendChild (e);
});

好的,现在我们需要解析数据......

function parse_csv (data) {
    var result = new Array();
    var rows = data.split (CSV_ROW);

    for (var i in rows) {
        if (i == 0) continue; // skip the first row

        var columns = rows[i].split (CSV_COLUMN);
        result.push ({ "value": columns[1], "text": columns[0] });
    }

    return result;
}

...并创建选择:

function create_select (data) {
    var e = document.createElement ('select');

    for (var i in data) {
        var option = document.createElement ('option');

        option.value = data[i].value;
        option.innerHTML = data[i].text;

        e.appendChild (option);
    }

    return e;
}

除了AJAX请求之外的所有内容都是纯JavaScript。如果由于某种原因你不想要jQuery,你也可以在纯JS中编写你的AJAX请求。

答案 1 :(得分:0)

您应该将此文件上传到您的服务器,并在服务器中读取此文件,然后将JSON返回给浏览器并显示它。

答案 2 :(得分:0)

我建议使用Microsoft InterOp库服务器端在C#中打开电子表格,将其信息提取到POCO中,或者(1)将它们填充到JSON中,或者(2)在您的视图模型中发送POCO集合当您第一次呈现表单页面时。

如果你想保留客户端的所有内容,罗伯特开始解释的另一个选择是可行的,但你必须预先格式化你的电子表格以获得CSV表示法,你必须做一些大量的解析。

我个人会做这个服务器端,因为这里的文件系统权限通常也更容易处理。

以下是Microsoft Office Interop Libraries的信息,以及从Excel中提取的示例。

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel%28v=office.14%29.aspx

http://www.codeproject.com/KB/dotnet/Exceller.aspx

答案 3 :(得分:0)

据我所知,存在安全限制,并且无法使用javascript读取存储在客户端的文件,您可以使用的选项很少 1)上传到某个服务器,然后使用c#或php等服务器端语言进行读取(如前所述,之前有人说过) 2)Allready使用服务器端语言读取文件,然后将数据返回到javascript进行解析