我正在从模板创建文档,但无法弄清楚如何在正确的位置插入表格。
我将内存中的表作为2D数组,在模板中我有这样的占位符(包括方括号):
... [表格1] ... [表2] ... [表3] ...
每个占位符都在1x1表中。
我设法将我的第一个数组插入正确的位置,但是当我搜索以下占位符时,我的数组总是在表1之后插入。
我的代码如下(我在网上找到了这个并稍微改编了一下):
function insertTable(targetdoc, stringToReplace, tableValues) {
var body = targetdoc.getBody();
var searchElement = targetdoc.getActiveSection();
var searchType = DocumentApp.ElementType.TABLE;
var searchHeading = DocumentApp.ElementType.TABLE_CELL;
var searchResult = null;
// Search until the table is found.
while (searchResult = searchElement.findElement(searchType, searchResult)) {
var par = searchResult.getElement().asTable();
var tabletext = par.getText();
var substr=tabletext.search(stringToReplace);
if (substr >0 ) {
var childindex = body.getChildIndex(par);
var oTable = body.insertTable(childindex+1, tableValues);
return oTable;
}
}
}
,调用代码为:
var oTable = insertTable(oOutputFile,"["+cFieldID+"]",aTable);
其中oOutputfile是新文档,cFieldID是占位符文本,aTable是2D数组。
任何人都可以帮我解决这个问题,以便将每个数组插入正确的位置吗?
由于
答案 0 :(得分:0)
我写了一些非常相似的内容,可能对您有用,请参阅GAS Template Engine
它将接受任何JSON字符串并替换与JSON结构匹配的文档中的占位符。遇到数组时,脚本会在表中查找占位符,并为数组的每个元素创建表行。
因此,如果您的JSON字符串包含如下数组:
var json = { myarr : [ { col1: "a", col2 : "b" }, { col1 : "c", col2 : "d" }] }
然后脚本将在模板文档中查找如下所示的表:
------------------------------------------------------
| $myarr.col1 | $myarr.col2 |
-------------------------------------------------------
并将其转换为:
-----------------------------------
| a | b |
-----------------------------------
| c | d |
-----------------------------------
它也会保留行的格式。
它只是模板引擎的概念证明,但它应该足以解决您的问题。
答案 1 :(得分:0)
感谢koma为您的解决方案,我将来肯定会使用它,但是对于我正在寻找的东西来说有点过分。
最后,我在一个庞大的调试会话后找到了我需要的解决方案,上面显示的我的功能现在变成了:
function insertTable(targetdoc, stringToReplace, tableValues) {
var oDoc = targetdoc.getBody(); // Document
var oSR = oDoc.findText(stringToReplace); // SearchResult
var oPara = oSR.getElement().asText().getParent(); // Paragraph
var nIndex = oDoc.getChildIndex(oPara); // Index
var oTable = oDoc.insertTable(nIndex, tableValues); // Table
return oTable;
}
所以,例如,如果我有一个带有以下占位符的文档(oDoc)
[TABLE 1]
数组
aData: {{"","column 1","column 2"},{"row 1","data 11","data 12"},{"row 2","data 21","data 22"}}
和变量
cFieldID = "TABLE 1";
并调用我的函数
oTable = insertTable(oDoc, cFieldID, aData);
oOutputFile.replaceText("\\["+cFieldID+"\\]","");
我获得以下内容代替占位符文本
-----------------------------------
| | column 1 | column 2 |
-----------------------------------
| row 1 | data 11 | data 12 |
-----------------------------------
| row 2 | data 21 | data 22 |
-----------------------------------
这比koma的解决方案更不通用和强大,但足以满足我现在的需要。
克里斯