我有一个电子表格,使用Vmerge和查询公式从其他6个电子表格中提取和累积所有必需的数据,所有合并数据将使用触发事件转换为pdf和emaild到邮件ID。
每次发布的附件邮件包含所有标题和其他格式时,问题就会出现,但是不会显示提取的数据。看起来好像-
打开同一个电子表格,过了一段时间所有-
(连字符)都被数据取代/希望所有数据更新一段时间后打开电子表格。
任何人都可以指示我解决这个问题。
对于这个解决方案应该是 - >应该更新所有数据,然后电子邮件脚本应该工作;或者它应该在通过电子邮件发送脚本之前更新。
或赞赏任何其他更好的想法。
答案 0 :(得分:2)
某些电子表格公式(例如ImportRange
和ImportXml
(以及Apps脚本自定义公式)仅在有人登录电子表格时进行评估。就像这些功能需要评估帐户,例如,在importRange
中,如果您与某人但不是importRange
来源共享此电子表格,则登录的帐户必须有权访问要导入的范围,当此人正在查看此电子表格时,importRange
功能将无效(除非您也在电子表格中并且公式已经过评估)。
最重要的是,您不能拥有此公式并使用按时间驱动(或其他不需要某人登录的触发器)触发的脚本,并期望脚本能够读取此数据。
虽然解决方法非常简单。执行importRange
函数在脚本中执行的操作! e.g。
var source = SpreadsheetApp.openById('source-spreadsheet-key');
var data = source.getSheetByName('List').getRange('I6:AT500').getValues();
//then save it somewhere
var s = Spreadsheet.getActive().getSheetByName('hidden-import');
s.getRange('I6:AT500').setValues(data);
SpreadsheetApp.flush(); //force the data to be written
//so all the other formulas on your spreadsheet get updated with the new data
所有“逻辑”公式,例如query
和vmerge
,这些脚本难以模仿,可以保留在电子表格中,但是我只是引用这个“隐藏导入”表单发明而不是直接嵌套importRange
。
<强> [编辑] 强>
要仅复制非空行,请执行以下操作:
var data = SpreadsheetApp.openById('source-spreadsheet-key').
getSheetByName('List').getDataRange().getValues();
Spreadsheet.getActive().getSheetByName('hidden-import').
getRange(1,1,data.length,data[0].length).setValues(data);