【问题标题】:Script that prints style from google spreadsheet to google doc将样式从谷歌电子表格打印到谷歌文档的脚本
【发布时间】:2014-03-04 18:58:19
【问题描述】:

请查看我的电子表格。

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

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

例如,在我的脚本中,我有一个名为“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();  

}

【问题讨论】:

  • 您还需要授予文档模板 (19ANrZluvbavWU4Ttgh1z9_DVJgEQ1hrGohd4lQAg7vI) 的权限。我们需要能够访问该文档以使用您的脚本(由于它未设置为公开,因此出现权限错误)。
  • 我公开了文档模板。抱歉耽搁了。我希望收到电子邮件通知,但我想这没有发生。我希望今天有人可以帮助我。
  • 我想知道是否需要使用 html 脚本,以便我可以使用 html 标签来设置文档样式。所以当我打开脚本编辑器时,我应该创建一个新的“html”文件(文件/新建/HTML 文件)。问题是我不知道怎么走这条路……

标签: google-apps-script


【解决方案1】:

您是否尝试将键的格式设置为您喜欢的样式?如果您在文档模板中格式化键(即 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 符号来获得。还有其他可以从电子表格中获取的格式选项吗?

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

【讨论】:

  • 是的,这行得通,但问题是我只希望其中一个变量是粗体的,而不是另一个。我有 2 个变量(line_item 和 desc)我希望 line_item 以粗体打印到谷歌文档。
  • 加粗 keyLine_Item,但不要加粗模板中的 keyDesc。另外,我下班回家后会查看模板和脚本,但同时尝试一下。
  • 我认为您必须查看该文档,因为...该脚本位于电子表格中,其中有 2 个变量(line_item,desc)。然后将 line_item 和 desc 放在一个变量 textToDoc 中。然后脚本通过将 keyJobScope 替换为变量 textToDoc 来打印到文档。所以我看不到只改变 line_item 变量的方法。如果我制作了 keyLineItem 和 keyDesc 而不是 keyJobScope,那么我将如何在 Desc 旁边组装 LineItem...
  • 跟进 cmets,我消除了将 line_item 和 descr var 组合成单个 var (textToDoc) 的 var,然后在模板上放置了两个键。我粗体格式化了 keyline_item 并保留了 keyDescr 平原。我修改了 .replaceText ('keyJobScope', jobScope); line 替换 line_item 键,并在 .replaceText('keyDescr', descr); 中添加了一行我测试并验证了这可以根据您的问题进行。请参阅编辑后的答案以获取正确的代码。查看您的模板文档以了解我在那里所做的更改(删除未使用的密钥,添加 2 个新密钥,格式化)。
  • 感谢您所做的工作。但是,它似乎只打印了我的电子表格中的最后一项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多