【问题标题】:Copy a range from worksheet to google doc by replace text with table format通过将文本替换为表格格式,将工作表中的范围复制到 google doc
【发布时间】:2022-08-14 06:34:37
【问题描述】:

我想将范围单元格从工作表复制到谷歌文档,保持表格格式

在一个谷歌文档模板中,我添加了一个要替换的文本。

{{TablaDetalle}}

我有一个替换 {{TablaDetalle}} 的范围,我得到了

Item Equipo Nro Serie Sitio
1 AA 11 Sitio A
2 AA 22 Sitio A
3 UPS 88 Sitio A
4 UPS 99 Sitio A

我的代码的一部分是

var hoja= SpreadsheetApp.getActiveSpreadsheet().getSheetByName(\"Base Datos\")
var wTablaDetalle=hoja.getRange(\"A1:D5\").getDisplayValues()

function crearCoti() {
  //create a new document based on template and store on a temp folder

  var templateDoc=DriveApp.getFileById(wTemplateId); // 
  var blobTemplate=templateDoc.getBlob()

  var folderNewCoti=DriveApp.getFolderById(wfolderNewCoitId);
  var folderTemp=DriveApp.getFolderById(wfolderTempId);
  

  var copyArchivoPlantilla=templateDoc.makeCopy(folderTemp)
  
  // get id from new copy template created and open it
  var copyId= copyArchivoPlantilla.getId();
  var wcopyArchivoPlantilla=DocumentApp.openById(copyId)
    
  wcopyArchivoPlantilla.getBody().replaceText(\"{{TablaDetalle}}\",wTablaDetalle)

当然,被复制到谷歌文档的文本是

Item,Equipo,Nro serie,Sitio,1,AA,11,Sitio A,2,AA,22,Sitio A,3,UPS,88,Sitio A,4,UPS,99,Sitio A

有没有办法将波纹管数据复制为表格或任何格式?顺便说一句,要复制的范围可以得到更多或更少的行,但总是相同的列

我等待您的评论,并提前致谢

奥马尔

  • 我不得不为我糟糕的英语水平道歉。我无法理解I have an item 1 and value 1 already in my sheet, and then I get new value of item 1, I want to renew value 1 only, otherwise, if I get new item 2 and value 2, I want to add this in new columns.。这样,我无法想象您的预期结果。我能问一下你当前的剧本问题和你的目标的细节吗?而且,你能提供你当前的脚本吗?例如,为了正确理解您的问题,您能否提供您期望的示例输入和输出情况作为图像?

标签: google-apps-script google-sheets merge google-sheets-formula


【解决方案1】:

这是一个如何通过替换标记段落来插入表格的示例。

代码.gs

function test() {
  try {
    let doc = DocumentApp.getActiveDocument();
    let body = doc.getBody();
    let data = [['Item','Equipo','Nro serie','Sitio'],
                [1,'AA',11,'Sitio A'],
                [2,'AA',22,'Sitio A'],
                [3,'UPS',88,'Sitio A'],
                [4,'UPS',99,'Sitio A']];
    let paras = body.getParagraphs();
    paras.some( para => {
        if( para.getText() === '{{TablaDetalle}}' ) {
          let index = body.getChildIndex(para);
          let table = body.insertTable(index,data);
          for( let i=0; i<table.getNumRows(); i++ ) {
            let row = table.getRow(i);
            for( let j=0; j<row.getNumCells(); j++ ) {
              let cell = row.getCell(j);
              if( i === 0 ) {
                cell.setBackgroundColor('#FFFF00');
              }
              cell.getChild(0).asParagraph().setAlignment(DocumentApp.HorizontalAlignment.CENTER);
            }
          }
          body.removeChild(para);
          return true;
        }
        return false;
      }
    );
  }
  catch(err) {
    console.log(err);
  }
}

参考

【讨论】:

  • 非常感谢,我将尝试使用鞘中的 getrange 而不是固定数据,但我理解您的答案概念。再次非常感谢
  • 是的,它使用动态数据形成 getRange。例如 getRange(9,4,5,4).getDisplayValues()....太棒了!有没有办法为表格行提供格式...例如,第一行必须是标题,并且可以使用其他背景颜色,并且所有单元格上的文本必须居中对齐。
猜你喜欢
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-22
  • 1970-01-01
相关资源
最近更新 更多