Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用Google Apps脚本从Google Sheets数据表复制到Google Documents表_Google Apps Script_Google Sheets_Google Docs - Fatal编程技术网

Google apps script 使用Google Apps脚本从Google Sheets数据表复制到Google Documents表

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函数,并将其设置为显示领带,以便范围中非空白行的大小发生变化

有没有办法在谷歌文档中编写谷歌应用脚本,从谷歌工作表中检索限制为非空白行的范围,并将这些行显示为表格?

我正在寻找一个脚本,使用GoogleApps脚本(我的经验有限)将GoogleSheets单元格区域中的非空白行数据复制到Google文档中的表中

要复制的数据似乎太大,无法直接链接到Google文档,因此从电子表格到文档的复制粘贴操作不会提示选择链接数据

此外,行数是动态的,因此固定范围无法解决问题。在电子表格中,我使用了
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文档中
    • 在这种情况下,您不希望将工作表底部的空行包含到值中
    • 在您的情况下,不需要将原始电子表格链接到文档表
  • 您希望使用谷歌应用程序脚本实现这一点
我可以像上面那样理解。如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

流量: 此示例脚本的流程如下所示

  • 从谷歌电子表格中检索数据范围。
    • 在这种情况下,我使用了
  • 使用范围检索值、背景和文本样式
  • 将新表附加到带有值的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”的值是从共享电子表格中检索的。所以如果你想改变这个范围,请修改上面的脚本
    参考资料:
    补充: 将列宽从电子表格反映到文档的问题: 可以反映列宽。但当列宽设置为Google Document时,结果似乎与直接复制粘贴表格的结果不同,即使单位从电子表格转换为文档

    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脚本来完成。感谢您的回复。从您的回复中,我提出了一个示例脚本作为答案。您能确认一下吗?如果我误解了您的问题,而这不是您想要的方向,我道歉。这非常有效。谢谢。下面的例子