如何修复错误异常:无法转换为整数

huangapple go评论144阅读模式
英文:

How to fix error Exception: Can not be converted to int

问题

在您提供的代码中,问题出现在以下行:

  1. [weight, width, length, height, dimensions, volume] = [...data.split(';',)]

错误消息指出无法将字符串“500,120,80,250,120х80х250,0.0024”转换为整数。这是因为您尝试将包含浮点数的字符串分割并解构为整数,这会导致错误。

要解决此问题,您应该将数据分割后保留为字符串,而不是尝试将其转换为整数。您可以像这样修改代码:

  1. [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

  1. function setUpProps() {
  2. console.log('Set up props');
  3. var documentProperties = PropertiesService.getDocumentProperties();
  4. documentProperties.deleteAllProperties();
  5. var sh = SpreadsheetApp.getActive();
  6. var shname = sh.getSheetByName('конфиг');
  7. var values = shname.getRange(2, 1, shname.getLastRow(), 7).getValues();
  8. props = {};
  9. for (i of values) {
  10. props[i[0]] = i.slice(1).join(";");
  11. }
  12. documentProperties.setProperties(props);
  13. }
  14. function getProps() {
  15. var props = PropertiesService.getDocumentProperties();
  16. Logger.log(props.getProperties());
  17. }
  18. function onEdi(e) {
  19. var props = PropertiesService.getDocumentProperties();
  20. var range = e.range;
  21. var sheet = range.getSheet()
  22. var row = range.getRow()
  23. var shName = e.source.getSheetName();
  24. var col = range.getColumn();
  25. var g = 'г';
  26. if (['мука', 'масла', 'жмыхи', 'десерты', 'лечебные тарвы'].includes(shName) && col == 2) {
  27. var arr = [];
  28. var itemNames = range.getValues();
  29. for (let name of itemNames) {
  30. var data = props.getProperty(name + g);
  31. Logger.log(name + g);
  32. var weight, width, length, height, dimensions, volume;
  33. if (data != null) {
  34. [weight, width, length, height, dimensions, volume] = [...data.split(';')]
  35. var row = [weight, width, length, height, dimensions, volume];
  36. Logger.log(row);
  37. arr = arr.concat([row]);
  38. Logger.log(arr);
  39. }
  40. }
  41. sheet.getRange(row, 21, range.getNumRows(), 6).setValues(arr);
  42. }
  43. }

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

my error

When I use similar code like this

  1. function onEdit(e) {
  2. var props = PropertiesService.getDocumentProperties();
  3. const itemCol = 3;
  4. const groupCol = 4;
  5. var range = e.range;
  6. var sheet = range.getSheet()
  7. var row = range.getRow()
  8. if (range.getColumn() == 2) {
  9. var itemIDs = [];
  10. var itemGroups = [];
  11. var itemNames = range.getValues();
  12. for (let name of itemNames) {
  13. var data = props.getProperty(name);
  14. var itemID, groupName;
  15. if (data != null) {
  16. [itemID, groupName] = [...data.split(';')]
  17. itemIDs.push([itemID]);
  18. itemGroups.push([groupName]);
  19. } else {
  20. itemIDs.push(['NO DATA']);
  21. itemGroups.push(['NO DATA']);
  22. }
  23. }
  24. sheet.getRange(row, itemCol, range.getNumRows(), 1).setValues(itemIDs);
  25. sheet.getRange(row, groupCol, range.getNumRows(), 1).setValues(itemGroups);
  26. }
  27. }

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

output

答案1

得分: 1

你正在重新定义 row

onEdi(e) 的第3行:

  1. var row = range.getRow()

但是在 onEdi(e) 的第23行:

  1. var row = [weight, width, length, height, dimensions, volume];

所以在你的循环中,row 从一个整数重新定义为一个数组。

你可以将其更改为:

  1. let row = [weight, width, length, height, dimensions, volume];

现在会有两个名为 row 的变量,一个在 onEdi(e) 函数的全局范围内,另一个在循环的局部范围内。

英文:

You are redefining row.

On line 3 of onEdi(e):

  1. var row = range.getRow()

But on line 23 of onEdi(e):

  1. 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

  1. 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.

huangapple
  • 本文由 发表于 2023年6月2日 11:29:39
  • 转载请务必保留本文链接:https://go.coder-hub.com/76386955.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定