亨罗!我被谷歌应用程序脚本(相对于工作表)中的一个奇怪的bug卡住了,我在互联网上找不到任何响应。
我有一个带有过滤器(大约370行)的工作表,并且我正在尝试将它的值复制到另一个工作表。但是当我这样做的时候,出于某种原因,370行被复制了2次,我完全不知道为什么。结果表是370行+一个空白行+ 370行。
下面是我使用的代码:
var spreadsheet = SpreadsheetApp.openById(spreadsheetID);
var init_sheet = spreadsheet.getSheetByName("default");
var final_sheet = spreadsheet.insertSheet("final");
var soure_range = init_sheet.getRange("A1:K");
var target_range = final_sheet.getRange("N1:X");
soure_range.copyTo(target_range);如果有人知道为什么范围被复制了2次,我很高兴得到解开:x
编辑:
正如评论中所讨论的,这个bug似乎只有在我使用从xlsx转换而来的工作表时才会出现(上面的函数在任何其他普通工作表上都可以正常工作)。下面是我使用的转换函数:
function convert(xlsxID, name, parentFolder) {
var xlsxBlob = DriveApp.getFileById(xlsxID).getBlob();
var file = {
title: ,
//Which Drive Folder do you want the file to be placed in
parents: [{'id':parentFolder}],
key: 'XXXX',
value: 'XXXX',
visibility: 'PRIVATE'
};
file = Drive.Files.insert(file, xlsxBlob, {
convert: true
});
return file.getId();
}发布于 2021-07-20 23:48:56
我能够复制这个问题。最初,我没有过滤转换后的xlsx文件中的数据。
使用copyTo(destination)复制范围时。使用destination区域的左上角单元格位置。
示例代码:
var spreadsheet = SpreadsheetApp.openById(spreadsheetID);
var init_sheet = spreadsheet.getSheetByName("Feuil1");
var final_sheet = spreadsheet.insertSheet("final");
var soure_range = init_sheet.getRange("A1:K");
var target_range = final_sheet.getRange("N1"); //Top-left cell position
soure_range.copyTo(target_range);输出:

发布于 2021-07-19 22:07:33
const ss = SpreadsheetApp.openById(spreadsheetID);
const ish = ss.getSheetByName("default");
const fsh = ss.insertSheet("final");
const srg = ish.getRange(1,1,ish.getLastRow(),11);
const vs = srg.getValues();
const trg = fsh.getRange(1,14,vs.length,vs[0].length);
srg.copyTo(trg);https://stackoverflow.com/questions/68441279
复制相似问题