2011-12-09 222 views
4

我要动态地创建<select></select>(或者一个具有自动完成文本框)输入文件取决于一个Excel用这样的格式文件:打开Excel文件,并出口到JSON

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

工作
+0

您正在运行什么服务器? LAMP,ISS?你在哪里存储Excel文件(本地或在服务器上)? – Powertieke

+0

.xls会存储在服务器上,这是运行在Java下(我真的不知道什么样的服务器使用;我是前端,但CMS生成静态文件) –

回答

6

如果您的文件位于http服务器上,您可以使用AJAX进行阅读。

让我们先来定义一些常量:

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

CSV_URL是您的CSV文件的URL。

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; 
} 

...并创建选择:除了AJAX请求

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; 
} 

一切都是纯JavaScript。如果你出于某种原因不需要jQuery,那么你也可以用纯JS编写你的AJAX请求。

+0

男人这看起来很棒,会尝试让你知道 –

+0

只是现在试图和萤火虫跳'data.split不是一个函数 [检测器错误] var rows = data.split(CSV_ROW); ' –

+0

@ToniMichelCaubet您可能需要检查数据是否以字符串形式表示。请参阅http://www.w3schools.com/jsref/jsref_split.asp – penguat

0

则应将此文件上传到服务器,并阅读这个文件在服务器上,然后返回JSON到浏览器并显示它。

+0

我有点迷失在如何导出json的excel ...有关此信息的任何信息? –

+0

这取决于您在服务器端使用哪种语言。您可以在该语言的官方库中找到excel关键字,或者找到一些开源解决方案,例如,在github.com中搜索:https://github.com/search?q=excel&type=Everything&repo=&langOverride=&start_value=1 –

+0

i需要在客户端执行它 –

0

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

如果您希望保留客户端的所有内容,罗伯特开始解释的其他选项会起作用,但您必须将电子表格预先格式化为CSV表示法,并且您必须执行一些重大解析。

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

以下是Microsoft Office Interop库的信息,以及从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

0

按我的知识有安全限制和ü不能读取存储的文件在客户端使用JavaScript,很少有替代品u可以使用 1)上传到一些服务器,然后使用c#或php等服务器端语言进行读取(如之前发布的文章所述) 2)使用服务器端语言读取已准备好的文件,然后将数据返回给javascript解析