Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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工作表文件中的值范围复制格式_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 使用google工作表文件中的值范围复制格式

Google apps script 使用google工作表文件中的值范围复制格式,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我使用了以下代码,它正在执行以下操作: ->自动创建新的google工作表,复制所需列的数据,将其重命名为上个月的名称 function Copy() { var sss = SpreadsheetApp.openById('1IK6YsZS3_NNAlFA41d8uKriPzfZs_2Ukyh94eeBFj40'); //replace with source ID var ss = sss.getSheetByName('CURRENT'); //replace with source Sh

我使用了以下代码,它正在执行以下操作: ->自动创建新的google工作表,复制所需列的数据,将其重命名为上个月的名称

function Copy() {
var sss = SpreadsheetApp.openById('1IK6YsZS3_NNAlFA41d8uKriPzfZs_2Ukyh94eeBFj40'); //replace with source ID
var ss = sss.getSheetByName('CURRENT'); //replace with source Sheet tab name
var range = ss.getRange('A1:H45'); //assign the range you want to copy
var data = range.getValues();
var d = new Date();
d.setMonth(d.getMonth() - 1);
var prevMonth = Utilities.formatDate(d, 'GMT+1','MMMM-yyyy'); //rename sheet to previous month

var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var yourNewSheet = activeSpreadsheet.getSheetByName(prevMonth);

if (yourNewSheet != null) {
    activeSpreadsheet.deleteSheet(yourNewSheet);
}
yourNewSheet = activeSpreadsheet.insertSheet();
yourNewSheet.setName(prevMonth);
yourNewSheet.getRange(yourNewSheet.getLastRow()+1,1,45,8).setValues(data);
}
唯一缺少的是,它没有复制复制它的原始格式。格式正在改变,如行号、持续时间等。这里是原始文件和新文件的屏幕截图

这是原始的,

这是复制的。

我相信您可能在原始代码中过度复杂了一些东西。如果要将包含所有内容和格式的工作表复制到另一个电子表格中,只需使用sheet.copyTospreadsheet函数即可。这样,您甚至不需要使用该系列的。您必须按如下方式重构代码:

功能副本{ var sss=电子表格应用程序openById'1IK6YsZS3_NNAlFA41d8uKriPzfZs_2Ukyh94eeBFj40'; var ss=sss.getSheetByName'CURRENT'; var d=新日期; d、 setMonthd.getMonth-1; var prevMonth=Utilities.formatDate,“GMT+1”,“MMMM yyyy”; var activeSpreadsheet=SpreadsheetApp.getActiveSpreadsheet; //检查当月是否已存在工作表备份 如果activeSpreadsheet.getSheetByNameprevMonth!==null返回; var yourNewSheet=ss.copyToactiveSpreadsheet; yourNewSheet.setNameprevMonth; } 编辑 为了使公式具体化,将其值复制到电子表格中,而不是复制公式本身,您可以执行以下操作:

如前所述,使用copyTo复制工作表后,只需使用原始工作表中的getValues和目标工作表中的setValues覆盖内容。您的最终代码如下所示:

功能副本{ var sss=电子表格应用程序openById'1IK6YsZS3_NNAlFA41d8uKriPzfZs_2Ukyh94eeBFj40'; var ss=sss.getSheetByName'CURRENT'; var d=新日期; d、 setMonthd.getMonth-1; var prevMonth=Utilities.formatDate,“GMT+1”,“MMMM yyyy”; var activeSpreadsheet=SpreadsheetApp.getActiveSpreadsheet; //检查当月是否已存在工作表备份 如果activeSpreadsheet.getSheetByNameprevMonth!==null返回; var yourNewSheet=ss.copyToactiveSpreadsheet; yourNewSheet.setNameprevMonth; var dataValues=ss.getDataRange.getValues;//新建 yourNewSheet.getDataRange.setValuesdataValues;//新建 }
嘿,Zil,我已经发布了一个答案——尽管它的功能与您的原始代码大不相同。如果这是你想要的行为,请告诉我。Chearshey@carlesgg97您在下面编写的代码运行良好,所有内容都采用相同的格式,但问题是我使用了getRange、getValues、setValues和all,因为我只需要值,我不希望excel单元格公式被复制到备份文件中。我只想获取具有格式的值。请帮助我,嘿@carlesgg97你写的代码运行良好,所有内容都是相同的格式,但问题是我使用了getRange、getValues、setValues等等,因为我只需要值,我不想在备份文件中复制excel单元格公式。我只想获取具有格式的值。请帮帮我,–@zilsanghv我很抱歉误解了你的问题。我已经编辑了我的答案,请让我知道这是否适合你。Cheers@ZilSanghvi请尝试删除此脚本名称以“月-年”格式创建的任何工作表,然后再次尝试运行它。你现在有什么结果吗?@ZilSanghvi这很奇怪,因为我只添加了几行代码。它至少应该像前面的函数一样工作。能否在应用程序脚本IDE中的“视图>日志>应用程序脚本”仪表板中检查是否存在任何失败的执行?里面有日志吗?谢谢@他检查了死刑执行情况。它显示完成。我发布的第一个有问题的代码正在工作。