简体   繁体   English

脚本 Google 表格错误,因为单元格为空

[英]Script Google Sheets error because cell is empty

I tried to take a code and adapt it to my needs but without success because I am a novice in scripting.我尝试获取代码并根据我的需要进行调整,但没有成功,因为我是脚本编写方面的新手。

This code allows to generate an image of a Google Maps with markers for each address and a line that connects them.这段代码允许生成一张谷歌地图的图像,每个地址都有标记和一条连接它们的线。 At first this code was for 2 addresses that we had to indicate in the code and the generated image was sent by email.起初这段代码用于我们必须在代码中指明的 2 个地址,生成的图像由 email 发送。

So I rewrote the code (my first one alone) to plot and mark the points of 6 addresses and then have the generated image pasted into a cell of my sheet.所以我将代码(我的第一个)重写为 plot 并标记 6 个地址的点,然后将生成的图像粘贴到我的工作表的一个单元格中。

The problem I have is that I get the error "Exception: Invalid argument: address" when at least one of the cells containing the addresses does not contain a value (so the value is an address).我遇到的问题是,当至少一个包含地址的单元格不包含值(因此该值是一个地址)时,我收到错误“异常:无效参数:地址”。 I need to add something after the.getValue() function but I can't.我需要在 the.getValue() function 之后添加一些内容,但我不能。

I know that the answer to this question may seem simple to the advanced script users, but also that this code could be useful to others.我知道这个问题的答案对于高级脚本用户来说可能看起来很简单,但也知道这段代码可能对其他人有用。

Thank you for your insight and indulgence.感谢您的洞察和宽容。

My Sheets:我的床单:

https://docs.google.com/spreadsheets/d/1eZUlQK3-4WZmhQAIw5BTLsKkbTUheCTsdKEhdG0k87E/edit#gid=1047347094 https://docs.google.com/spreadsheets/d/1eZUlQK3-4WZmhQAIw5BTLsKkbTUheCTsdKEhdG0k87E/edit#gid=1047347094

My Sript:我的剧本:

function onOpen() {
  SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
    .addItem('👉 Générer les Cartes', 'myFunction')
    .addToUi();
  myFunction()
}

function myFunction() {
  var sheet = SpreadsheetApp.getActive();
  var address1 = sheet.getRange('K121').getValue();
  var address2 = sheet.getRange('K122').getValue();
  var address3 = sheet.getRange('K123').getValue();
  var address4 = sheet.getRange('K124').getValue();
  var address5 = sheet.getRange('K125').getValue();
  var address6 = sheet.getRange('K126').getValue();

  var map = Maps.newStaticMap().setLanguage('fr')
  .setSize(846,479)
  .setMapType(Maps.StaticMap.Type.HYBRID)
  .setMarkerStyle(Maps.StaticMap.MarkerSize.MID, Maps.StaticMap.Color.GREEN,'1')
  .addMarker(address1)
  .setMarkerStyle(Maps.StaticMap.MarkerSize.MID, Maps.StaticMap.Color.BLUE,'2')
  .addMarker(address2)
  .setMarkerStyle(Maps.StaticMap.MarkerSize.MID, Maps.StaticMap.Color.BLUE,'3')
  .addMarker(address3)
  .setMarkerStyle(Maps.StaticMap.MarkerSize.MID, Maps.StaticMap.Color.BLUE,'4')
  .addMarker(address4)
  .setMarkerStyle(Maps.StaticMap.MarkerSize.MID, Maps.StaticMap.Color.BLUE,'5')
  .addMarker(address5)
  .setMarkerStyle(Maps.StaticMap.MarkerSize.MID, Maps.StaticMap.Color.RED,'6')
  .addMarker(address6)
  .beginPath()
  .addAddress(address1)
  .addAddress(address2)
  .addAddress(address3)
  .addAddress(address4)
  .addAddress(address5)
  .addAddress(address6)
  .endPath()
  .getBlob()
  sheet.insertImage(map,5,15)
}

This will loop through all your addresses and check whether they are empty or not and add to the map only the ones with a non empty address:这将循环遍历所有地址并检查它们是否为空,并仅将具有非空地址的地址添加到 map:

function onOpen() {
  SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
    .addItem('👉 Générer les Cartes', 'myFunction')
    .addToUi();
  myFunction()
}

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheetByName('AVRIL 22');
  var addresses = sheet.getRange('K121:K126').getValues().flat();
  var colors = [ Maps.StaticMap.Color.GREEN,Maps.StaticMap.Color.BLUE,
                 Maps.StaticMap.Color.BLUE,Maps.StaticMap.Color.BLUE,
                 Maps.StaticMap.Color.BLUE,Maps.StaticMap.Color.RED];

  var map = Maps.newStaticMap().setLanguage('fr')
  .setSize(846,479)
  .setMapType(Maps.StaticMap.Type.HYBRID);
  
   addresses.forEach((address,i)=>{

     if(address!=''){
          map.addMarker(address)
             .setMarkerStyle(Maps.StaticMap.MarkerSize.MID,colors[i],(i+1).toString())
             .addMarker(address)
     }
   });

   map = map.endPath().getBlob();
   spreadsheet.insertImage(map,5,15)

}

Another reason it does not work now is that because you have invalid addresses:它现在不起作用的另一个原因是因为您的地址无效:

在此处输入图像描述

put correct values and let me know if the code works.输入正确的值并让我知道代码是否有效。

The code of soMarios was working nice but markers colors was not correct. soMarios 的代码运行良好,但标记 colors 不正确。 Here is the solution from another comunity.这是另一个社区的解决方案。 I let the code if it can help someone else.如果它可以帮助别人,我就让代码。

function onOpen() {
  SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
    .addItem('👉 Générer les Cartes', 'myFunction')
    .addToUi();
  myFunction()
}

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  //var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Testing")

   // Deletes all images in sheet
    var images = sheet.getImages();
    images.map(function(img){img.remove();});

  var cards = []

  //gets the addresses of each card into an array
  for(i=0; i<16; i++)
  {
    cards.push(sheet.getRange(121, 11 + (15*i), 6, 1).getValues().flat())
  }

  //loop through the array of cards
  for(c=0; c < cards.length; c++){

   //create a new map
   var map = Maps.newStaticMap().setLanguage('fr')
  .setSize(846,479)
  .setMapType(Maps.StaticMap.Type.HYBRID)

  //remove blanks from card addresses
  var card = cards[c].filter(j => j)

  //begin a new path for the map
  map.beginPath()

  //loop through card addresses
  for(n=0; n < card.length; n++){

    //add the nth address to the map
    map.addAddress(card[n])

    //if first address, create new green marker (note n +1 due to array starting from 0 not 1)
    if(n == 0){

      map.setMarkerStyle(Maps.StaticMap.MarkerSize.MID, Maps.StaticMap.Color.GREEN,n+1)
      var marker = map.addMarker(card[n])
    }
    //if last address, create new red marker
    else if(n == card.length - 1){
      map.setMarkerStyle(Maps.StaticMap.MarkerSize.MID, Maps.StaticMap.Color.RED,n+1)
      var marker = map.addMarker(card[n])
    } 
    //if any other address create blue marker
    else{
      map.setMarkerStyle(Maps.StaticMap.MarkerSize.MID, Maps.StaticMap.Color.BLUE,n+1)
      var marker = map.addMarker(card[n])
    }
  } 
  
  //end the path and insert the map image to the sheet
  map.endPath()
  map.getBlob()
  sheet.insertImage(map,5+ (15*c),15)
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM