金山在线文档写入大数组出现假死问题
let testfile=KSDrive.openFile("https://www.kdocs.cn/l/********")
let backendLogSheet = Application.Sheets("后台记录")
let useHistorySheet = Application.Sheets("查询记录")
let testSheet = testfile.Application.Sheets("测试")
let backendLogSheetTable = backendLogSheet.Range("A1:AA" + backendLogSheet.UsedRange.RowEnd).Value
let useHistorySheetTable = useHistorySheet.Range("A1:F" + useHistorySheet.UsedRange.RowEnd).Value
let searchFlag = 1
testSheet.Range("A1:AA" + testSheet.UsedRange.RowEnd).ClearContents()
for (let i = 2; i < backendLogSheetTable.length; i++) { //for循环遍历操作U列和V列数据
searchFlag = 1
console.log(i)
for (let j = useHistorySheetTable.length - 1; j > 0; j--) { //数据操作代码块
if (backendLogSheetTable[i][1] == useHistorySheetTable[j][2]) {
backendLogSheetTable[i][20] = useHistorySheetTable[j][5]
backendLogSheetTable[i][21] = useHistorySheetTable[j][4]
searchFlag = 0
break
}
}
// testSheet.Range("A"+(i+1)+":AA"+(i+1)).Value=backendLogSheetTable[i]
}
console.log("1")
testSheet.Range("A1:AA"+backendLogSheetTable.length).Value=backendLogSheetTable //程序运行到这里就会卡死,testSheet表格没有写入数据,日志窗口长时间没有变化
file.close
工作表“后台记录”中的数据量是4000*26个单元格,首先以二维数组的形式读取到backendLogSheetTable中。然后使用for循环遍历操作U列和V列数据,即backendLogSheetTable[i][20]和backendLogSheetTable[i][21],得到新的二维数组之后写入测试表格testSheet中(第23行)。但是程序运行到第22行日志输出”1“之后就出现假死问题,testSheet表格没有写入数据,日志窗口长时间没有变化。
但是如果改变写入方式,在操作数据的for循环遍历的时候就每次写入一行(如下代码第20行)就没有出现假死的问题,数据也能成功写入。第23行语句只要不加注释,程序就会在此处卡死。
let testfile=KSDrive.openFile("https://www.kdocs.cn/l/********")
let backendLogSheet = Application.Sheets("后台记录")
let useHistorySheet = Application.Sheets("查询记录")
let testSheet = testfile.Application.Sheets("测试")
let backendLogSheetTable = backendLogSheet.Range("A1:AA" + backendLogSheet.UsedRange.RowEnd).Value
let useHistorySheetTable = useHistorySheet.Range("A1:F" + useHistorySheet.UsedRange.RowEnd).Value
let searchFlag = 1
testSheet.Range("A1:AA" + testSheet.UsedRange.RowEnd).ClearContents()
for (let i = 2; i < backendLogSheetTable.length; i++) { //for循环遍历操作U列和V列数据
searchFlag = 1
console.log(i)
for (let j = useHistorySheetTable.length - 1; j > 0; j--) { //数据操作代码块
if (backendLogSheetTable[i][1] == useHistorySheetTable[j][2]) {
backendLogSheetTable[i][20] = useHistorySheetTable[j][5]
backendLogSheetTable[i][21] = useHistorySheetTable[j][4]
searchFlag = 0
break
}
}
testSheet.Range("A"+(i+1)+":AA"+(i+1)).Value=backendLogSheetTable[i] //在操作数据时每次写入一行就没有问题
}
console.log("1")
//testSheet.Range("A1:AA"+backendLogSheetTable.length).Value=backendLogSheetTable //只要把注释去掉,就会卡死在这里
file.close
我猜测可能是数据量太大,服务器拒绝一次性写入所以尝试过其他方式,将上面23行一次性写入的代码改成for循环遍历每一行写入(如下代码23-25行),一样也出现假死的状态。
let testfile=KSDrive.openFile("https://www.kdocs.cn/l/********")
let backendLogSheet = Application.Sheets("后台记录")
let useHistorySheet = Application.Sheets("查询记录")
let testSheet = testfile.Application.Sheets("测试")
let backendLogSheetTable = backendLogSheet.Range("A1:AA" + backendLogSheet.UsedRange.RowEnd).Value
let useHistorySheetTable = useHistorySheet.Range("A1:F" + useHistorySheet.UsedRange.RowEnd).Value
let searchFlag = 1
testSheet.Range("A1:AA" + testSheet.UsedRange.RowEnd).ClearContents()
for (let i = 2; i < backendLogSheetTable.length; i++) { //for循环遍历操作U列和V列数据
searchFlag = 1
console.log(i)
for (let j = useHistorySheetTable.length - 1; j > 0; j--) { //数据操作代码块
if (backendLogSheetTable[i][1] == useHistorySheetTable[j][2]) {
backendLogSheetTable[i][20] = useHistorySheetTable[j][5]
backendLogSheetTable[i][21] = useHistorySheetTable[j][4]
searchFlag = 0
break
}
}
//testSheet.Range("A"+(i+1)+":AA"+(i+1)).Value=backendLogSheetTable[i]
}
console.log("1")
for(let i=0;i<backendLogSheetTable.length;i++){ //用for循环每次写入一行也会卡死,没有任何数据写入
testSheet.Range("A"+(i+1)+":AA"+(i+1)).Value=backendLogSheetTable[i]
}
请教各位大神,这是什么问题嗷?
@金山办公