英文:
How to fix error Exception: Can not be converted to int
问题
在您提供的代码中,问题出现在以下行:
[weight, width, length, height, dimensions, volume] = [...data.split(';',)]
错误消息指出无法将字符串“500,120,80,250,120х80х250,0.0024”转换为整数。这是因为您尝试将包含浮点数的字符串分割并解构为整数,这会导致错误。
要解决此问题,您应该将数据分割后保留为字符串,而不是尝试将其转换为整数。您可以像这样修改代码:
[weight, width, length, height, dimensions, volume] = data.split(';');
这样,您将保留数据作为字符串数组,而不会尝试将其转换为整数。
此外,请确保在数据中没有包含无法转换为整数的值,否则可能需要在处理数据之前添加一些数据验证。
在修复了此问题后,您的代码应该能够按预期工作。
英文:
I'm trying to use the Property Service as an analogue of the vlookup function here is my code
function setUpProps() {
console.log('Set up props');
var documentProperties = PropertiesService.getDocumentProperties();
documentProperties.deleteAllProperties();
var sh = SpreadsheetApp.getActive();
var shname = sh.getSheetByName('конфиг');
var values = shname.getRange(2, 1, shname.getLastRow(), 7).getValues();
props = {};
for (i of values) {
props[i[0]] = i.slice(1).join(";");
}
documentProperties.setProperties(props);
}
function getProps() {
var props = PropertiesService.getDocumentProperties();
Logger.log(props.getProperties());
}
function onEdi(e) {
var props = PropertiesService.getDocumentProperties();
var range = e.range;
var sheet = range.getSheet()
var row = range.getRow()
var shName = e.source.getSheetName();
var col = range.getColumn();
var g = 'г';
if (['мука', 'масла', 'жмыхи', 'десерты', 'лечебные тарвы'].includes(shName) && col == 2) {
var arr = [];
var itemNames = range.getValues();
for (let name of itemNames) {
var data = props.getProperty(name + g);
Logger.log(name + g);
var weight, width, length, height, dimensions, volume;
if (data != null) {
[weight, width, length, height, dimensions, volume] = [...data.split(';')]
var row = [weight, width, length, height, dimensions, volume];
Logger.log(row);
arr = arr.concat([row]);
Logger.log(arr);
}
}
sheet.getRange(row, 21, range.getNumRows(), 6).setValues(arr);
}
}
error getting in this place sheet.getRange(row, 21, range.getNumRows(), 6).setValues(arr);
Exception: Невозможно преобразовать "500,120,80,250,120х80х250,0.0024" в int.
at onEdi(Copy of PropertyService:43:11)
On function onEdi()
I'm set a installable trigger for edit
When I use similar code like this
function onEdit(e) {
var props = PropertiesService.getDocumentProperties();
const itemCol = 3;
const groupCol = 4;
var range = e.range;
var sheet = range.getSheet()
var row = range.getRow()
if (range.getColumn() == 2) {
var itemIDs = [];
var itemGroups = [];
var itemNames = range.getValues();
for (let name of itemNames) {
var data = props.getProperty(name);
var itemID, groupName;
if (data != null) {
[itemID, groupName] = [...data.split(';')]
itemIDs.push([itemID]);
itemGroups.push([groupName]);
} else {
itemIDs.push(['NO DATA']);
itemGroups.push(['NO DATA']);
}
}
sheet.getRange(row, itemCol, range.getNumRows(), 1).setValues(itemIDs);
sheet.getRange(row, groupCol, range.getNumRows(), 1).setValues(itemGroups);
}
}
it works flawlessly
A simple trigger for edit is also used here
But I want to insert data in an array, tell me where is my mistake?
Gif what I need to output
答案1
得分: 1
你正在重新定义 row
。
在 onEdi(e)
的第3行:
var row = range.getRow()
但是在 onEdi(e)
的第23行:
var row = [weight, width, length, height, dimensions, volume];
所以在你的循环中,row
从一个整数重新定义为一个数组。
你可以将其更改为:
let row = [weight, width, length, height, dimensions, volume];
现在会有两个名为 row
的变量,一个在 onEdi(e)
函数的全局范围内,另一个在循环的局部范围内。
英文:
You are redefining row
.
On line 3 of onEdi(e)
:
var row = range.getRow()
But on line 23 of onEdi(e)
:
var row = [weight, width, length, height, dimensions, volume];
So in your loop row
is redefined from an integer to an array.
You could change it to
let row = [weight, width, length, height, dimensions, volume];
Now there would be two variables named row
, one at a global scope for the onEdi(e)
function and one at the local scope of the for loop.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论