Google apps script 使用Google Apps脚本从Google Sheets数据表复制到Google Documents表
有没有办法在谷歌文档中编写谷歌应用脚本,从谷歌工作表中检索限制为非空白行的范围,并将这些行显示为表格? 我正在寻找一个脚本,使用GoogleApps脚本(我的经验有限)将GoogleSheets单元格区域中的非空白行数据复制到Google文档中的表中 要复制的数据似乎太大,无法直接链接到Google文档,因此从电子表格到文档的复制粘贴操作不会提示选择链接数据 此外,行数是动态的,因此固定范围无法解决问题。在电子表格中,我使用了Google apps script 使用Google Apps脚本从Google Sheets数据表复制到Google Documents表,google-apps-script,google-sheets,google-docs,Google Apps Script,Google Sheets,Google Docs,有没有办法在谷歌文档中编写谷歌应用脚本,从谷歌工作表中检索限制为非空白行的范围,并将这些行显示为表格? 我正在寻找一个脚本,使用GoogleApps脚本(我的经验有限)将GoogleSheets单元格区域中的非空白行数据复制到Google文档中的表中 要复制的数据似乎太大,无法直接链接到Google文档,因此从电子表格到文档的复制粘贴操作不会提示选择链接数据 此外,行数是动态的,因此固定范围无法解决问题。在电子表格中,我使用了SORTN函数,并将其设置为显示领带,以便范围中非空白行的大小发生变化
SORTN
函数,并将其设置为显示领带,以便范围中非空白行的大小发生变化
我从以下代码大纲开始:
function myFunction() {
// Get Google Sheet data
var app = SpreadsheetApp;
var ss = app.openById('SHEET_ID');
var activeSheet = app.getActiveSpreadsheet();
var range = activeSheet.getRange("B4:D");
// Position to paste data in Google Docs
var doc = DocumentApp.getActiveDocument();
var body = DocumentApp.getActiveDocument().getBody();
// Build a table from the array.
body.appendTable(cells);
}
这是SE上最接近的问题,但没有回答此问题:。- 您希望将数据范围作为表格从Google电子表格复制到Google文档。
- 您希望将该表附加到Google文档中
- 在这种情况下,您不希望将工作表底部的空行包含到值中
- 在您的情况下,不需要将原始电子表格链接到文档表
- 您希望使用谷歌应用程序脚本实现这一点
- 在这种情况下,我使用了
function myFunction() {
// Get Google Sheet data
var ss = SpreadsheetApp.openById("###"); // Please set the Spreadsheet ID.
var sheet = ss.getSheetByName("Sheet1");
var range = sheet.getRange(4, 2, 1, 5).getDataRegion(SpreadsheetApp.Dimension.ROWS);
var values = range.getValues();
var backgroundColors = range.getBackgrounds();
var styles = range.getTextStyles();
// Position to paste data in Google Docs
var body = DocumentApp.getActiveDocument().getBody();
var table = body.appendTable(values);
table.setBorderWidth(0);
for (var i = 0; i < table.getNumRows(); i++) {
for (var j = 0; j < table.getRow(i).getNumCells(); j++) {
var obj = {};
obj[DocumentApp.Attribute.BACKGROUND_COLOR] = backgroundColors[i][j];
obj[DocumentApp.Attribute.FONT_SIZE] = styles[i][j].getFontSize();
if (styles[i][j].isBold()) {
obj[DocumentApp.Attribute.BOLD] = true;
}
table.getRow(i).getCell(j).setAttributes(obj);
}
}
}
函数myFunction(){
//获取谷歌工作表数据
var ss=SpreadsheetApp.openById(“#####”);//请设置电子表格ID。
var sheet=ss.getSheetByName(“Sheet1”);
var range=sheet.getRange(4,2,1,5).getDataRegion(SpreadsheetApp.Dimension.ROWS);
var values=range.getValues();
var backgroundColors=range.getBackgrounds();
var styles=range.getTextStyles();
//在Google文档中粘贴数据的位置
var body=DocumentApp.getActiveDocument().getBody();
var table=body.appendTable(值);
表1.1:宽度(0);
对于(var i=0;i
注:
- 在此示例脚本中,单元格“B4:F”的值是从共享电子表格中检索的。所以如果你想改变这个范围,请修改上面的脚本
function myFunction() {
// Get Google Sheet data
var ss = SpreadsheetApp.openById("###"); // Please set the Spreadsheet ID.
var sheet = ss.getSheetByName("Sheet1");
var range = sheet.getRange(4, 2, 1, 5).getDataRegion(SpreadsheetApp.Dimension.ROWS);
var values = range.getValues();
var backgroundColors = range.getBackgrounds();
var styles = range.getTextStyles();
var colWidth = []; // Added
for (var col = 2; col <= 6; col++) { // Added
colWidth.push(sheet.getColumnWidth(col) * 3 / 4);
}
// Position to paste data in Google Docs
var body = DocumentApp.getActiveDocument().getBody();
var table = body.appendTable(values);
table.setBorderWidth(0);
colWidth.forEach(function(e, i) {table.setColumnWidth(i, e)}); // Added
for (var i = 0; i < table.getNumRows(); i++) {
for (var j = 0; j < table.getRow(i).getNumCells(); j++) {
var obj = {};
obj[DocumentApp.Attribute.BACKGROUND_COLOR] = backgroundColors[i][j];
obj[DocumentApp.Attribute.FONT_SIZE] = styles[i][j].getFontSize();
if (styles[i][j].isBold()) {
obj[DocumentApp.Attribute.BOLD] = true;
}
table.getRow(i).getCell(j).setAttributes(obj);
}
}
}
在共享电子表格中,“B”列到“F”列的宽度分别为21、100、100、100和100像素。但我们发现,当表格从电子表格手动复制到文档时,每个列宽都会从原始大小更改。不幸的是,当脚本复制表的列宽时,无法复制手动复制的结果
示例脚本:
在下面的示例脚本中,Google电子表格的列宽被复制到Google文档的表中
function myFunction() {
// Get Google Sheet data
var ss = SpreadsheetApp.openById("###"); // Please set the Spreadsheet ID.
var sheet = ss.getSheetByName("Sheet1");
var range = sheet.getRange(4, 2, 1, 5).getDataRegion(SpreadsheetApp.Dimension.ROWS);
var values = range.getValues();
var backgroundColors = range.getBackgrounds();
var styles = range.getTextStyles();
var colWidth = []; // Added
for (var col = 2; col <= 6; col++) { // Added
colWidth.push(sheet.getColumnWidth(col) * 3 / 4);
}
// Position to paste data in Google Docs
var body = DocumentApp.getActiveDocument().getBody();
var table = body.appendTable(values);
table.setBorderWidth(0);
colWidth.forEach(function(e, i) {table.setColumnWidth(i, e)}); // Added
for (var i = 0; i < table.getNumRows(); i++) {
for (var j = 0; j < table.getRow(i).getNumCells(); j++) {
var obj = {};
obj[DocumentApp.Attribute.BACKGROUND_COLOR] = backgroundColors[i][j];
obj[DocumentApp.Attribute.FONT_SIZE] = styles[i][j].getFontSize();
if (styles[i][j].isBold()) {
obj[DocumentApp.Attribute.BOLD] = true;
}
table.getRow(i).getCell(j).setAttributes(obj);
}
}
}
函数myFunction(){
//获取谷歌工作表数据
var ss=SpreadsheetApp.openById(“#####”);//请设置电子表格ID。
var sheet=ss.getSheetByName(“Sheet1”);
var range=sheet.getRange(4,2,1,5).getDataRegion(SpreadsheetApp.Dimension.ROWS);
var values=range.getValues();
var backgroundColors=range.getBackgrounds();
var styles=range.getTextStyles();
var colWidth=[];//已添加
对于(var col=2;col为了正确理解您的情况,您能提供样本电子表格和样本文档,包括您期望的输入和输出吗?当然,请删除您的个人信息。这是一个。这是一个感谢您回复并提供样本。我看到了它们。我注意到文档中的表格是li链接到原始电子表格。在当前阶段,文档中由Google Apps脚本创建的表格无法链接到电子表格。因此,如果要更新表格,则需要通过脚本更新表格。这如何?@Tanaike对,对于当前项目,电子表格中的表格无法粘贴链接到示例文档文件中所示的文档。我已通过删除表中的链接来更新示例文档文件以反映这一点。我假设此限制是由于数据大小(不适用于小示例文件)并且只能通过针对大型数据集的Google Apps脚本来完成。感谢您的回复。从您的回复中,我提出了一个示例脚本作为答案。您能确认一下吗?如果我误解了您的问题,而这不是您想要的方向,我道歉。这非常有效。谢谢。下面的例子