gpt4 book ai didi

google-apps-script - 在第一个计数实例上方添加一行 - Google 电子表格

转载 作者:行者123 更新时间:2023-12-02 05:09:00 26 4
gpt4 key购买 nike

我正在尝试编写一个脚本,使我能够在唯一值的第一个计数实例上方添加一行。

例如。

    A
German
German
German
Italian
Italian
French
French

运行脚本后,它应该类似于:

    A
DE
German
German
German
IT
Italian
Italian
FR
French
French

我所写的只是确定存在多少个值:

function insertRowAbove() 
{
var report = SpreadsheetApp.getActive().getSheetByName('REPORT');

var lang = report.getRange('A10:A').getValues();
var positions = report.getRange('A10:A').getA1Notation();
var DE = [];

for (var i = 0; i < lang.length; i++)
{
if (lang[i] == 'German')
{
DE++
report.getRange('A1').setValue(DE);//now I know there are 3 German entries
}
}
}

我的问题:脚本是否可以知道第一次出现的值的 A1notation 并在其上方添加一行?感谢您提供任何明智的建议。

最佳答案

您的具体问题是:

My question: Is it possible for the script to know the A1notation of the 1st occurrence of a value and add a row above it?

通过组合使用一个 bool 值来指示您是否找到了您要查找的任何项,以及几个Range方法,您可以得到第一次出现的 A1notation。

var column = 1; // this example is only using column A
var foundGerman = false;
var firstGerman = '';
...
if (lang[i] == 'German') {
if (!foundGerman) {
foundGerman = true;
firstGerman = range.getCell(i, column).getA1Notation();
}
...
}

之后,您将获得包含“German”的第一个单元格的 A1Notation。

但是,函数 insertRowsBefore() 是一个 Sheet 方法,需要行号作为参数,而不是 A1Notation。所以弄清楚第一个德国牢房的地址是什么被证明是不必要的。

脚本

这是我的参赛作品!为了提高速度,明智的做法是尽可能少地使用应用程序脚本服务调用。在这个脚本中,所有的数据操作都是使用数组完成的,最后的结果只写一次。

预计您将拥有三种以上的语言,并且为了可维护性,语言查找由对象 iso639 处理。 (假设您使用的是 ISO 639-1 Language Codes。)因此,实际工作只需 10 行代码!

function insertViaArray() {
var sheet = SpreadsheetApp.getActive().getSheetByName('REPORT');
var values = sheet.getDataRange().getValues();
var newValues = [];

var iso639 =
{
"German" : "DE",
"Italian" : "IT",
"French" : "FR"
}

var curLang = '';
for (var i in values) {
if (values[i][0] !== curLang) {
curLang = values[i][0];
newValues.push([iso639[curLang]]);
}
newValues.push([values[i][0]]);
}
sheet.getRange(1, 1, newValues.length, 1).setValues(newValues)
};

编辑脚本 V2

通过使用 Array.splice() 插入语言标签,我们可以进一步将代码减少到 8 行,并消除对并行 newValues 数组的需要.

function insertViaArrayV2() {
var sheet = SpreadsheetApp.getActive().getSheetByName('REPORT');
var values = sheet.getDataRange().getValues();

var iso639 =
{
"German" : "DE",
"Italian" : "IT",
"French" : "FR"
}

var curLang = '';
for (var i = 0; i < values.length; i++) {
if (values[i][0] !== curLang) {
curLang = values[i][0];
values.splice(i, 0, [iso639[curLang]]);
}
}
sheet.getRange(1, 1, values.length, 1).setValues(values)
};

关于google-apps-script - 在第一个计数实例上方添加一行 - Google 电子表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15808524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com