使用JavaScript从文本文件创建HTML表格?

3
我甚至不确定我的项目是否可行。在寻找了几个小时并阅读了其他Stack Overflow问题后,我的希望正在逐渐消失,但这不会阻止我提问! 我的项目:为我的上级创建一个简单的HTML表格,以对我们的销售团队电话活动进行分类。目前,我需要有些东西从文件中提取数据值,并在表格内使用这些值。 我的问题:Javascript能做到吗?我知道它可以在客户端计算机上读取cookie,但它能否读取与网页在同一目录下的文件?(如果网页在公司服务器上?) 我的进展:我将随着发现更多信息而更新。
更新:你们中的许多人都对文件存储方式感到好奇。它是我们文件服务器上的静态网页(table.html)。文本文件(data.txt)将在同一目录中。

是的,我读到了通过Javascript尝试访问文件可能会导致混淆的错误代码。问题是,文件服务器上没有安装PHP,所以我需要一些可以在客户端运行的东西。他们的计算机没有安装Python,所以也不能使用cgi。 :( - Jacob Bridges
只有在数据文件是公共的情况下,您才能轻松地完成此操作。 - twinlakes
如果文件在服务器上,您可以使用AJAX读取其内容。最好将数据存储为JSON格式,在获取内容后进行解析。 - Hashem Qolami
这可能会有帮助:https://dev59.com/znI-5IYBdhLWcg3wMFIf - Hashem Qolami
我对AJAX不是很熟悉,但我会去了解一下。 - Jacob Bridges
如果您考虑使用jQuery,这是一个不错的教程:http://www.sitepoint.com/ajax-jquery/,同时请查看:http://api.jquery.com/jQuery.ajax/。 - Hashem Qolami
6个回答

1

我最近完成了一个项目,几乎和你的条件完全一样(唯一的区别是用户专门使用IE)。

最终我使用了JQuery的$.ajax()函数,并从XML文件中提取数据。

这个解决方案需要使用Microsoft Access或Excel。我使用的是早期的2003版本,但后来的版本也可以正常工作。

我的数据保存在Access表格中(在Excel中我使用了列表)。一旦你在Access中创建了你的表格,只需点击“导出”,将其保存为XML,然后玩弄你的“ajax()”函数(http://api.jquery.com/jQuery.ajax/)以操纵你想要输出的数据,然后使用CSS/HTML来布局你的页面。

我建议使用Access,因为它不需要太多麻烦就可以正确地导出XML,虽然Excel需要更多的调整。

以下是使用ms-access的步骤:

在access中创建表格并导出为XML

enter image description here

生成的XML将如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation="Calls.xsd" generated="2013-08-12T19:35:13">
<Calls>
    <CallID>1</CallID>
    <Advisor>Jenna</Advisor>
    <AHT>125</AHT>
    <Wrap>13</Wrap>
    <Idle>6</Idle>
</Calls>
<Calls>
    <CallID>3</CallID>
    <Advisor>Edward</Advisor>
    <AHT>90</AHT>
    <Wrap>2</Wrap>
    <Idle>4</Idle>
</Calls>
<Calls>
    <CallID>2</CallID>
    <Advisor>Matt</Advisor>
    <AHT>246</AHT>
    <Wrap>11</Wrap>
    <Idle>5</Idle>
</Calls>

示例 HTML

<table id="doclib">
    <tr><th>Name</th><th>AHT</th><th>Wrap</th><th>Idle</th></tr>
</table>

jQuery:

$(document).ready(function(){
$.ajax({
    type: "GET",
    url: "Calls.xml",
    dataType: "xml",
    success: function(xml) {
        $(xml).find('Calls').each(function(){
            var advisor = $(this).find('Advisor').text(),
                aht = $(this).find('AHT').text(),
                wrap = $(this).find('Wrap').text(),
                idle = $(this).find('Idle').text(),
                td = "<td>",
                tdc = "</td>";
            $('#doclib').append("<tr>" + 
                td + advisor + tdc + td + aht + tdc + td + wrap + tdc + td + idle + tdc + "</tr>")  
            });
        }
    });
});

0
你可以尝试查看FileReader: https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader
The FileReader object lets web applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer

我个人从未使其完全正常运作,但它应该能够允许这种事情发生。


谢谢,我会研究一下...虽然看起来好像需要在客户端电脑上安装FileReader。但我没有这些权限。 - Jacob Bridges

0

听起来你只是想从服务器获取静态文件的内容,是吗?如果这就是你需要做的事情,那么你很幸运。这非常容易。

load('textTable.txt', function(err, text) {
    buildTable(text);
});

function load(url, callback) {  
    var xhr = new XMLHttpRequest();  

    xhr.onreadystatechange = function() {
        if (xhr.readyState < 4) return;

        if (xhr.status !== 200) {  
            return callback('HTTP Status ' + xhr.status);
        }  

        if (xhr.readyState === 4) {  
            callback(null, xhr.responseText);  
        }             
    };

    xhr.open('GET', url, true);  
    xhr.send('');  
}

如果你选择 qwest,它会看起来像这样:

qwest.get('textTable.txt').success(function(text) {
    buildTable(text);
});

使用jQuery:

jQuery.get('textTable.txt', function(text) {
    buildTable(text);
});

1
我认为他没有服务器,只有一个静态页面。 - m_vdbeek
@AwakeZoldiek 所提到的,是指服务器上的一个静态页面。 - Hashem Qolami
谢谢你发布代码,但是XMLHttpRequest()只能在IE上使用吗? - Jacob Bridges
1
@Jacob-IT 不是的,它可以在所有现代浏览器中运行。我不会在实际应用中使用这种过于简单的示例代码。看 https://github.com/pyrsmk/qwest 吧。它可以更好地处理错误并且在所有浏览器中都有效。 - Trevor Dixon
@Jacob-IT 这是你需要做的吗?这对你有用吗? - Trevor Dixon
说实话,我还在阅读Github的文档。Javascript对我来说还是比较新的,这个问题让我有些摸不着头脑。但如果这是解决方案,我会相应地更新我的问答。 - Jacob Bridges

0

由于安全原因,JavaScript 无法自动读取文件。

您有两个选择:

  • 如果您可以依赖于使用 IE,则可以使用一些花哨的 ActiveX 工具。

  • 使用后端,该后端可以不断向 JS 客户端推送数据或在拉取请求时提供数据。


花哨的ActiveX东西?听起来很有趣,你能再详细说一点吗? - Jacob Bridges
@Jacob-IT 我在ActiveX方面的编程经验非常小(实际上是零)。但你可以看看这里:http://www.powerobjects.com/blog/2008/09/02/69/ 那段代码似乎很不错。 - ComFreek

0

如果你有一个使用Node.js、PHP等构建的服务器,这个方法可能会起作用。

JavaScript可以通过Ajax协议读取文件,但这意味着你需要一个服务器。

否则,你的请求将通过file://协议进行,而该协议不支持Ajax。


table.html 文件将被上传到一个“服务器”..实际上是共享存储。至于 Ajax..那对我来说是新的。如果你有任何有用的链接,能否在评论中提供?我会去找的。 - Jacob Bridges

0

我的上级专门使用Firefox浏览器,他讨厌IE。所以,我必须迎合他的喜好,你懂的吧?不过还是谢谢你的回答! - Jacob Bridges

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接