Google表格-在导入la importRange时保持超链接格式的脚本?

问题描述 投票:1回答:1

我目前使用以下基本脚本导入大量单元格(2500行,200列)。这些列中大约有20个是超链接,我希望保留其格式,但是在获取它们时当前会丢失。我确定这是因为getValues只能是Number,Boolean,Date或String类型。有人知道这里有解决方法吗?

function  importOnOpen() {
var values = SpreadsheetApp.openById('ABCDEFGHIJKLMNOPQRSTUVWXYZ').
  getSheetByName('exportSheet').getRange('A1:HZ2500').getValues();
  SpreadsheetApp.getActive().getSheetByName('importSheet').
  getRange(1,1,values.length,values[0].length).setValues(values);}

[一种选择是将getFormulas用于特定的超链接列,但是如果可能的话,我希望避免将公式完全拉到目标表中,以使其保持简洁。对每个超链接列也单独进行调用似乎很麻烦,尽管我想我可以将它们组合在一起。

我以前的解决方案是根本不使用脚本,而使用可以正常工作的importRange公式(另一方面,'query'函数也遇到相同的格式丢失问题)。我与importRange有关的问题有两个方面:1)它半连续获取数据,这损害了电子表格的性能; 2)由于“加载中...”问题,这是我需要将请求分解为大大小小的呼叫所致5个离散请求并将它们分组到一个arrayFormula中,以使其始终如一地工作-感觉很笨拙。

另一个可能的解决方案是setShowHyperlink(showHyperlink)函数吗?不知道它是如何工作的,我还没有看到有人使用它,所以我对此表示怀疑。只是一个想法。 https://developers.google.com/apps-script/reference/spreadsheet/range#setShowHyperlink(Boolean)

谢谢您的帮助!

javascript google-sheets hyperlink google-sheets-api google-sheets-query
1个回答
1
投票

答案:

要在同一电子表格中从一张工作表复制到另一张工作表,可以将Range.copyTo(destination, copyPasteType, transposed)方法与PASTE_NORMAL枚举器一起使用,以复制公式和文本。对于一个电子表格到另一个电子表格,可以使用Sheet.copyTo()方法。

在同一电子表格中:

正如您已经推论的,getValues()只能是数字,布尔值,日期或字符串类型,并且公式对象不能算作其中的任何一个。 getDisplayValues()也有相同的问题,因为它不能采用基础公式。

查看CopyPasteType的文档,您会发现使用PASTE_NORMAL枚举会粘贴values, formulas, formats and merges

使用此功能,只需几次调用就可以一次性复制整张纸:

function copyAllTheThings() {
  var ss = SpreadsheetApp.openById('<sheet-id>');

  var range = ss.getSheetByName('exportSheet')
                .getRange('A1:HZ2500');

  var importTo = ss.getSheetByName('importSheet')
                   .getRange(range.getA1Notation());

  range.copyTo(importTo, SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
}

从一个电子表格复制到另一个电子表格:

如果要将一个电子表格中的电子表格导入到另一个电子表格中,可以使用Sheet.copyTo()方法。这将复制整个工作表,而不仅仅是复制范围,但是可以使用它,以便保留要复制工作表中的数据格式和公式:

function  importOnOpen() {
  var otherSS = SpreadsheetApp.openById('<spreadsheet-id-to-copy-to>');

  var export = SpreadsheetApp.openById('<spreadsheet-id-to-copy-from>')
                             .getSheetByName('exportSheet');

  export.copyTo(otherSS);
}

希望对您有帮助!

参考:

© www.soinside.com 2019 - 2024. All rights reserved.