2013-08-09 4 views
0

Я создаю документ из шаблона и не могу понять, как вставить таблицу в нужное положение.Вставка массива в виде таблицы в документ Google

У меня есть таблица в памяти как 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

Спасибо 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 | 
----------------------------------- 

Это менее универсальный и мощный, чем решение кома, но достаточно для того, что я нужно сейчас.

Chris

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

он также сохранит форматирование строк.

Это всего лишь доказательство концепции для механизма шаблонов, но этого должно быть достаточно, чтобы решить вашу проблему.

+0

Спасибо, я посмотрю на это завтра и посмотрю, смогу ли я использовать его для решения моей проблемы. –

Смежные вопросы