目前,我正在开展一个项目,从Google表单/电子表格中提取数据,并将其显示在使用JQuery / DataTables的网站上。我收到了有关将数据显示在网站上的帮助,但我遇到了一个新问题。
上一个问题:Is it possible to create a public database (spreadsheet) search with Google Scripts?
在Google上,我有一个输出八列的表单:
其中,我不需要显示时间戳,如果URL存在,我希望标题链接到URL。由于我不太熟悉Javascript或DataTables,我制作了第二张,我试图将其简化为以下六种:
<a>
标记 这几乎可行,除了我用来构建表的脚本呈现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);
};
答案 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);
}
}