我有一个代码可以遍历“hello”表并删除列顶部包含单词 B 的所有列:
function main(workbook: ExcelScript.Workbook) {
let ws = workbook.getWorksheet("hello");
let usedrange = ws.getUsedRange(true);
let qtycol = usedrange.getColumnCount() - 1;
let values = usedrange.getValues();
for (let j = qtycol; j >= 0; j--) {
let command = values[1][j];
if (command == "B") {
usedrange.getColumn(j).delete(ExcelScript.DeleteShiftDirection.left);
}
}
}
当文件较小时,没有问题。但现在文件有点大了,我收到以下错误:
第 64 行:范围 getColumn:超时
第64行是以usedrange开头的行...
有更有效的方法吗?很想获得反馈或其他想法。
谢谢!
我怀疑当删除很多列时,工作表的更新可能会导致您的问题。
为了解决这个问题,您可以建立一个多区域范围(这是一个不会修改工作表的只读操作),然后在单个操作中将其删除。
我无法访问 ExcelScript,但这是可以执行此操作的等效 VBA 例程:
Public Sub bla()
Dim J As Integer
Dim Command As String
Dim qtycol As Integer
Dim ws As Worksheet
Dim UsedRange As Range
Dim toDeleteRange As Range
Set ws = Application.ActiveWorkbook.Worksheets("hello")
Set UsedRange = ws.UsedRange
Let qtycol = UsedRange.Columns.Count - 1
For J = qtycol To 1 Step -1 '(let j = qtycol; j >= 0; j--) {
Let Command = UsedRange(1, J)
If (Command = "B") Then
If (toDeleteRange Is Nothing) Then
Set toDeleteRange = UsedRange.Columns(J)
Else
Set toDeleteRange = Union(toDeleteRange, UsedRange.Columns(J))
End If
End If
Next J
toDeleteRange.Delete (XlDeleteShiftDirection.xlShiftToLeft)
End Sub
您可以使用 ExcelScript 中的类似例程。