gpt4 book ai didi

javascript - Google 表格有条件地组合,清除范围内的所有单元格,循环。 VBA转JS

转载 作者:行者123 更新时间:2023-11-30 00:14:50 24 4
gpt4 key购买 nike

我正在将 VBA 转换为 Google 表格脚本,但我不知道如何通过单列障碍中的所有行来克服这个循环。

我有一个包含 #OrdernNumber-State codeFirst name 的列有时是姓氏,后跟一个空单元格。我需要将名字和姓氏组合到名字单元格中,然后清除下面的姓氏单元格。下面的屏幕截图说明了这一点:

Illustrative screenshot

屏幕截图中的 C 列和 D 列揭示了我用来构建原始 VBA 代码的模式:

Sub WorkingCombineAndClearLoop()

Dim Rngcell As Range

For Each Rngcell In Range("B1:B100")
'if first character is #
If left(Rngcell.Value, 1) <> "#" _
'and if first character is -
And left(Rngcell.Value, 1) <> "-" _
'and if cell is not blank then
And Rngcell.Value <> "" Then
'combine left cell
Rngcell.Value = Rngcell.Offset(0, -1).Value _
'with bottom left cell
& " " & Rngcell.Offset(1, -1).Value
'then clear below cell
Rngcell.Offset(1, 0).ClearContents
End If
Next

End Sub

以下是我带注释的 JavaScript 代码。因为我还不能让循环工作,所以我不得不稍微改变一下代码逻辑:

    function workingCombineAndClearNoLoop() {

//get active spreadsheet, sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
//determine row count
var numRows = SpreadsheetApp.getActiveSheet().getRange("A:A").getLastRow();

//if A1's first character is not # AND
if (s.getRange('A1').getValue().substring(0,1) === "#" &&
//if A2's first character is not ' AND
s.getRange('A1').offset(1, 0).getValue().substring(0,1) === "-" ) {
//Set the value of A2 to...
s.getRange('A1').offset(2, 1).setValue(
//A2 cell content + " " + A2 cell content (concatenate)
s.getRange('A1').offset(2, 1).getValue() + " " +
s.getRange('A1').offset(3, 1).getValue())
//and then clear A2
s.getRange('A1').offset(3, 1).clearContent()
};
}

以下是一切都崩溃的地方 - 循环。我只在代码的最终副本中留下了骨架:

function notWorkingCombineAndClearWithLoop() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var numRows = SpreadsheetApp.getActiveSheet().getRange("A:A").getLastRow();

//loop
//how to replace 'A1' with A[i]?, so that it loops through all cells in the column?
for (var i = 0; i < 25; i++) {
if (s.getRange('A1').getValue().substring(0,1) === "#" &&
s.getRange('A1').offset(1, 0).getValue().substring(0,1) === "-" ) {
s.getRange('A1').offset(2, 1).setValue(
s.getRange('A1').offset(2, 1).getValue() + " " +
s.getRange('A1').offset(3, 1).getValue())
s.getRange('A1').offset(3, 1).clearContent()
}
};
}

注意:我已经完成了 Codacademy 的 JS 类(class)和几个 Google 表格教程,并且非常擅长 VBA,但我仍然在原地打转。我尝试遵循许多循环示例,使用变量代替 A1。因为我找不到任何有效的解决方案,所以我将无法正常工作的 A1 留作简单的占位符。

最佳答案

简答

//how to replace 'A1' with A[i]?, so that it loops through all cells
//in the column?

使用

'A' + i

说明

getRange() 有多种形式,其中一种使用 A1 表示法引用。这与问题中包含的 Google Apps 脚本一致使用。

例子

以下代码的主要目的是展示如何使用 A1 表示法循环遍历 Google Apps 脚本中列的单元格。


索引中有一些错误。他们被纠正了。还更改了第四行以减少要循环的行并添加了几行。


function editedNotWorkingCombineAndClearWithLoop() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var numRows = SpreadsheetApp.getActiveSheet().getLastRow();
/*
* use variables to reduce number of calls to Apps Script services
* and improve readability
*/
var range, substring1, substring2;

//loop
for (var i = 1; i <= numRows; i++) {
//Here is the magic
range = s.getRange('A' + i );
substring1 = range.getValue().substring(0,1);
substring2 = range.offset(1, 0).getValue().substring(0,1);
if ( substring1 === '#' && substring2 === '-' ) {
range.offset(0, 1).setValue(range.getValue());
range.offset(1, 1).setValue(range.offset(1, 0).getValue());
range.offset(2, 1).setValue(
range.offset(2, 0).getValue()
+ " "
+ range.offset(3, 0).getValue()
)
}
}
}

关于javascript - Google 表格有条件地组合,清除范围内的所有单元格,循环。 VBA转JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35134656/

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