从Google Spreadsheets创建表:如何操作数据?

时间:2013-04-22 16:35:34

标签: javascript datatables google-sheets

目前,我正在开展一个项目,从Google表单/电子表格中提取数据,并将其显示在使用JQuery / DataTables的网站上。我收到了有关将数据显示在网站上的帮助,但我遇到了一个新问题。

上一个问题:Is it possible to create a public database (spreadsheet) search with Google Scripts?

在Google上,我有一个输出八列的表单:

  • 时间戳
  • 标题
  • 作者
  • 类型
  • URL
  • 各种话题
  • 国家(S)
  • 产品关键词

其中,我不需要显示时间戳,如果URL存在,我希望标题链接到URL。由于我不太熟悉Javascript或DataTables,我制作了第二张,我试图将其简化为以下六种:

  • 标题(目前使用网址格式化为 <a> 标记
  • 作者
  • 类型
  • 各种话题
  • 国家(S)
  • 产品关键词

这几乎可行,除了我用来构建表的脚本呈现Title字段,因为它在单元格中,<a href=""></a>在表格中可见。有关当前情况,请参阅标题“实际产出”下的表格; “目标表外观”下的表格是我的目标。

因此,有没有办法让<a href=""></a>作为链接提供,尽管它们被放在Google电子表格单元格中?或者,有没有办法编辑当前脚本a)忽略timestamp列和b)使标题输出从URL列(具有适当的条件)的URL链接?


编辑:我现在专注于链接;我有一个时间戳的解决方案,涉及将数据复制到新的电子表格(因为表格严格复制/粘贴信息)。当前的问题是假设URL在第一列中,并且Title在第二列中,每个条目都有一个链接。请阅读Mogsdad的回答和我的第一条评论以获取更多信息。


解决方案:首先,我要感谢Mogsdad的灵感和洞察力的“火花”,这使我朝着解决方案的正确方向前进。为了解释一般的想法,我想不在目标网站上的Google电子表格中显示一列(URL),而是使用它的内容在另一个(标题)中创建链接。然后,一旦制作完表格,就会使用DataTables对其进行格式化。表中的所有单元格都必须包含某些内容,因此如果单元格为空白,则必须填充“无”。

function cellEntries(json, dest, divId) {
    var table = document.createElement('table');
        table.setAttribute("id", divId + "table");                 //Assign ID to <table> from the <div> name.
    var thead = document.createElement('thead');
    var tbody = document.createElement('tbody');
    var thr;
    var tr;
    var entries = json.feed.entry;                                     
    var cols = json.feed.gs$colCount.$t;                                  //The number of columns in the sheet.
    var link;                                                           //Teporary holder for the URL of a row.

    for (var i=0; i <cols; i++) {                                       //For the first row of cells (column titles),
        var entry = json.feed.entry[i];
        if (entry.gs$cell.col == '1') {                                     //For First Column / URL Column, (1)
            if (thr != null) {
                tbody.appendChild(thr);
            }
            thr = document.createElement('tr');                                 //Create <thr>/<tr> (???).
        }
        else {                                                              //For all other columns,
            var th = document.createElement('th');                              
            th.appendChild(document.createTextNode(entry.content.$t));          //Create title for each column.
            thr.appendChild(th);
        }
    } 
    for (var i=cols; i < json.feed.entry.length; i++) {                 //For all remaining cells,
        var entry = json.feed.entry[i];
        if (entry.gs$cell.col == '1') {                                     //For First Column / URL Column, (1)
            if (tr != null) {
                tbody.appendChild(tr);
            }
            tr = document.createElement('tr');                                  //Create <tr>.
            hlink = entry.content.$t;                                           //Put URL content into hlink.
        }
        else if (entry.gs$cell.col == '2') {                                //For Title Column,(2)
            var td = document.createElement('td');
            if (hlink != "None") {                                              //If there is a link,
                var alink = document.createElement('a');                            //Make <a>
                alink.appendChild(document.createTextNode(entry.content.$t));       //Put content in <a>
                alink.setAttribute('href',hlink);                                   //Assign URL to <a>.
                td.appendChild(alink);                                              //Put <a> in <td>.
            }
            else {                                                              //If there is no link,
                td.appendChild(document.createTextNode(entry.content.$t));          //Put content in <td>.
            }
            tr.appendChild(td);
        }
        else {                                                              //For all other columns,
            var td = document.createElement('td');
            if (entry.content.$t != "None") {                                   //If content is not "None",
                td.appendChild(document.createTextNode(entry.content.$t));          //Output the content.
            }
            else {                                                              //Else,
                td.appendChild(document.createTextNode(""));                        //Output a blank cell.
            }
            tr.appendChild(td);
        }       
    } 
    $(thead).append(thr);
    $(tbody).append(tr);
    $(table).append(thead);
    $(table).append(tbody);
    $(dest).append(table);
    $(dest + "table").dataTable();

};

function importGSS(json){
   var divId = "targetdivid"                            //ID of the target <div>.
   cellEntries(json, "#" + divId, divId);
};

1 个答案:

答案 0 :(得分:1)

tablescript.js中的这一位:

    var th = document.createElement('th');
    th.appendChild(document.createTextNode(entry.content.$t));
>>>>
    thr.appendChild(th)

您可以通过以下方式添加超链接:

th.setAttribute('href',<link>);

...将<link>设置为特定出版物的超链接。

要使这项工作正常,您可以重新设计电子表格来源,将链接放在一列中,将标题放在另一列中。然后修改tablescript.js以组合链接和文本,如下所示:

var hlink = null;  // Temporary storage for hyperlink 
for (var i=0; i <cols; i++) {
    var entry = json.feed.entry[i];
    if (entry.gs$cell.col == '1') { 
        if (thr != null) {
            tbody.appendChild(thr);
        }
        thr = document.createElement('tr');
    }
    // Element 0 assumed to have hyperlink
    if (i == 0) {
       hlink = entry.content.$t;
    }
    else {
       var th = document.createElement('th');
       // If we have an hlink, set the href attribute.
       if (hlink !== null) {
          th.setAttribute('href',hlink);
          hlink = null;
       }
       th.appendChild(document.createTextNode(entry.content.$t));
       thr.appendChild(th);
   }
}