将样式从谷歌电子表格打印到谷歌文档的脚本

时间:2014-03-04 18:58:19

标签: google-apps-script

请参阅我的电子表格。

https://docs.google.com/a/zigmens.com/spreadsheet/ccc?key=0AtXr7M_f8JAadG1qclprdXRFb3VuNXV0OXg5bDNpNkE&usp=drive_web#gid=0

我有一个菜单项,创建/作业范围,从电子表格中提取数据,并在谷歌驱动器的“我的驱动器”位置创建一个新文档。我遇到的问题是,它不包括我在电子表格中的stye和格式。例如,我尝试了很多方法将脚本中的变量设置为“粗体”,但似乎无法使其工作。我希望有一个对象,我可以添加到将设置它的样式的变量。

例如,在我的脚本中,我有一个名为“desc”的变量

var descr = values[n][3] ;

我想创建一个新变量,例如

var descr = values[n][3] ;

var desc_style = descr.setStyle("bold") ;

以下是电子表格中的脚本,但我认为最好只更新电子表格中的脚本。

function jobScope() {

  var ss = SpreadsheetApp.getActiveSheet();
  var values = ss.getDataRange().getValues();
  var docTemplate = "19ANrZluvbavWU4Ttgh1z9_DVJgEQ1hrGohd4lQAg7vI";
  var job_name = ss.getRange("D4").getValue();
  var docName = job_name+' Job Scope '; 

  var x = 1 ;
  while(values[x][0] ^= "") {    
     ++x ;
  }
  var textToDoc = "" ;
  for(n=1;n<x;++n){  
     var cell = values[n][4] ; 
    if (cell ^ "0") {
      var line_item = values[n][1]; 
      var descr = values[n][3] ;
      textToDoc = textToDoc + line_item + "  " + descr + "\n\n" ;

    }

  }

  var copyId = DocsList.getFileById(docTemplate)
  .makeCopy(docName)
  .getId();  

  var copyDoc = DocumentApp.openById(copyId);

  var copyBody = copyDoc.getActiveSection();

  copyBody.replaceText('keyScope', textToDoc);
  copyBody.replaceText('keyJobName', job_name);

  copyDoc.saveAndClose();  

}

1 个答案:

答案 0 :(得分:0)

您是否尝试将按键格式设置为首选样式?如果在文档模板中格式化键(即keyScope),则替换键的变量将保留键的格式。

  //...trimmed previous code
  // Get document template, copy it as a new temp doc, and save the docs id
  var copyId = DocsList.getFileById(docTemplate)
  .makeCopy(docName)
  .getId();  

  //Open the temporary document and set it to a variable
  var copyDoc = DocumentApp.openById(copyId);

  //Get the documents body section
  var copyBody = copyDoc.getActiveSection();

  //Replace place holder keys, in our google doc template
  copyBody.replaceText('keyline_item', line_item);
  copyBody.replaceText('keyDescr', descr);
  copyBody.replaceText('keyJobName', job_name);

  copyDoc.saveAndClose();



}

虽然这是我所知道的唯一回答原始问题的答案,但作者正在寻找的是一种在连接来自不同单元格(具有不同格式)的两个值的变量中保留格式(粗体)的方法。据我所知,无论变量的数量如何,都无法将电子表格中的格式转换为文档,因为keyReplace对象仅由占据目标单元格的原始文本(或公式)或.getValues的范围组成。 ()使用。

如果我对此有误,我会很感激有人纠正我,但由于作者将两个相邻的单元格组合成一个变量,这就是他所寻求的答案,我认为它仍然不会可以作为模板中的单个keyObject替换,因为具有不同格式的两个单元格被合并到脚本中的单个对象中。我知道你可以获得背景和前景色,但你必须通过R1C1表示法得到它们。是否有其他格式选项可以从电子表格中捕获?

无论哪种方式,我都会把它留给专业人士,因为从他的源文件中我唯一可以看到的方法是完全重写他的文档模板和脚本,这不是问题的作者在寻找。对于那些可能希望将来做类似事情的人,我会把我的剧本留在上面。