Связать Google Документы с таблицей
Мне действительно нужна твоя помощь. Как связать отдельные ячейки в таблице с данными в документе? В таблице у меня есть расчеты, и мне нужно перенести результат в Google Docs с автоматическим обновлением. Как пример, "специальная вставка - ссылка" в Excel. Могу ли я сделать это в Google Docs?
1 ответ
Я все еще узнаю больше о Google Docs, так что, возможно, есть лучшие способы сделать это. Но вот функция, которая поможет вам определить дочерний индекс, индекс строки и индекс ячейки каждой таблицы в документе Google. Вторая функция может служить отправной точкой для извлечения данных из электронной таблицы и помещения их в этот дочерний индекс, индекс строки, индекс ячейки.
function findMyTables()
{
var doc=DocumentApp.getActiveDocument();
var body=doc.getBody();
var br='<br />';
var s='';
if(body)
{
var numChildren=body.getNumChildren();
for(var i=0;i<numChildren;i++)
{
var child=body.getChild(i);
if(child.getType()==DocumentApp.ElementType.TABLE)
{
s+=br + 'ChildIndex = ' + i;
s+=br + 'Cell[row index][column index] ';
var numrows = child.asTable().getNumRows();
for(var j=0;j<numrows;j++)
{
var numcells=child.asTable().getRow(j).getNumCells();
for(var k=0;k<numcells;k++)
{
var celltxt=child.asTable().getCell(j, k).editAsText().getText();
s+=br + '<strong>Cell[' + j + '][' + k + ']= </strong>' + '<span style="color:#ff0000;font-size:14px;font-weight:bold;">' + celltxt + '</span>';
}
}
}
}
}
var html=HtmlService.createHtmlOutput(s).setWidth(600).setHeight(450);
DocumentApp.getUi().showModelessDialog(html, 'My Tables');
Извлечь данные из электронной таблицы относительно просто, но я считаю, что попасть в Google Doc немного сложнее. Вот функция, которая берет дочерний индекс, индекс строки и индекс ячейки и вводит ваши данные в Google Docs. В настоящее время я не решил, почему это меняет форматирование. Я надеюсь, что одно из больших орудий на этом сайте пожалеет нас, бедных, пустых душ и просветит нас.
function saveChildTableCellChanges(childidx,rowidx,cellidx,text)
{
var doc=DocumentApp.getActiveDocument();
var child=doc.getBody().getChild(childidx);
child.asTable().getRow(rowidx).getCell(cellidx).editAsText().setText(text);
}
Если вы можете жить без автоматического обновления (попробовал несколько предложений здесь и на форуме поддержки Google, ни один из них не работал для меня), вы можете просто скопировать несколько ячеек (не будет работать для одной ячейки) из электронной таблицы Google (ctrl+C) и вставить ее в вашем документе (ctrl+V) вам будет предложено выбрать:
Вставить таблицу:
[x] Ссылка на таблицу <- вам нужен этот вариант
[ ] Связь отключена
Вышеуказанное не будет отображаться, если вы вставите одну ячейку!
Обходные пути для отображения как "поддельная одиночная ячейка":
- Скопируйте и вставьте две ячейки, одна из которых содержит ваши данные, а другая пуста, в электронной таблице скройте столбец или строку с пустой ячейкой, обновите таблицу в документе.
- Скопируйте и вставьте две ячейки, одна из которых содержит ваши данные, а другая пуста, затем измените границу пустой ячейки, чтобы она была шириной 0 pt, и перетащите ее, чтобы она была как можно меньше (чтобы не нарушать поток вашего документа).
Если из-за макета вашего листа трудно найти пустые ячейки рядом с ячейками данных, просто создайте еще один лист (он может быть установлен как "защищенный", если хотите) в этой электронной таблице, ссылаясь только на данные, которые вы хотите связать в своем документе. и скопируйте с этого нового листа.
ПОМНИТЬ! Вам придется обновлять вручную, ваш документ должен показывать вам и кнопку обновления над связанной таблицей каждый раз, когда контент не синхронизируется.