Google Script删除我的HYPERLINK(Google SpreadSheet)

时间:2014-08-13 17:12:24

标签: google-apps-script google-sheets google-spreadsheet-api

情况:

我有以下脚本,每1小时运行一次。此脚本插入"更新年龄",我的意思是从DATE1到DATE2的过去天数。

脚本1:Script Link

问题:

A列:此列有一个超链接。 (门票号码)
专栏F& G:日期1和日期2
H列:脚本1的结果

在库存A中,我有其他插入超链接的脚本...请参阅Script Link 2
这个脚本2运行OnEdit,但脚本1每1小时运行一次。

当脚本1运行时,删除公式或超链接只显示单元格中的数据。

问题:

以脚本1运行时的任何方式存在,不删除超链接或将超链接应用于从第二行开始的所有行,即超链接。

插入链接的脚本:

function InsertLink(e)
{
  var actSht = e.source.getActiveSheet();
  if (actSht.getName() == ['ISP1']){

  var activeCell = actSht.getActiveCell(); //Detec the ActiveCell

  //var activeCell = event.range;
  var activeCellValue = e.value;

  var column = activeCell.getColumn();
  var colNums  = [1]; //Columns, whose edit is considered
  if(colNums.indexOf(column) == -1) return; //If column other than considered then return

  var row = activeCell.getRow();
  if(row < 2)   return; //If header row then return

  var length = String(activeCellValue).length;

  if (!e.value)
  {
    activeCell.setValue()
  }
  else if(length > 2)
  {
    activeCell.setValue('=HYPERLINK' + '("https://www.example.com/id='+activeCellValue+'";"'+activeCellValue+'")');
  }
}
}

SCRIPT UPDATE:

// Create a timer trigger that will call "shellUpdateAge" every 30 minutes
// This function will run only for this particular sheets
function shellUpdateAge(){
  var sheets = ['ISP1'];
  for (var s in sheets){
toUpdateAge(sheets[s]);
  }
}

function toUpdateAge(sheetName){
  var ss = SpreadsheetApp.openById('1WmEwSLzqxOj7xkjokmor5B_HpMdabbEAGXiYeQwpIl8');
  var sh = ss.getSheetByName(sheetName);
  var data = sh.getRange(1,1,sh.getLastRow(),sh.getLastColumn()).getValues();
  for(var n=0;n<data.length;++n){
  if(typeof(data[n][6])=='object'){
data[n][7]=dayToToday(data[n][6])
  }
}
   sh.getRange(1,1,data.length,data[0].length).setValues(data)
}

function dayToToday(x){
  var refcell = x;;// get value in column A to get the reference date
  var refTime = new Date(refcell);
  var ref = refTime.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
  var today = new Date();
  var TD = today.setHours(0,0,0,0)/(24*3600000);// set hours, minutes, seconds and milliseconds to 0 if necessary and get number of days
  var day = parseInt(TD-ref);// get the difference in days (integer value )
  return day ; // return result that will be in cell
}

DATA: A2:= HYPERLINK(&#34; https://www.example.com/id=12345&#34;;&#34; 12345&#34;)

注意:当我进入故障单ID时,A列中的每一行都会显示超链接。

F:12/08/2014 18:08:00(此值为DATA2)
G:13/08/2014 18:08:00(此值为DATE2)
H:更新年龄,插入DATE2-DATE1的结果。在此示例中,脚本将返回1天。

现在问题是当脚本更新时间运行时,脚本会更新列G并删除A列中的公式。

1 个答案:

答案 0 :(得分:1)

我会得到并设置最低限度,因此您不会涉及HYPERLINK列:

function toUpdateAge(sheetName){
  var ss = SpreadsheetApp.openById('1WmEwSLzqxOj7xkjokmor5B_HpMdabbEAGXiYeQwpIl8');
  var sh = ss.getSheetByName(sheetName);
  var range = sh.getRange(1,7,sh.getLastRow(),2);
  var data = range.getValues();
  for(var n=0;n<data.length;++n){
  if(typeof(data[n][0])=='object'){
    data[n][1]=dayToToday(data[n][0]);
  }
}
   range.setValues(data);
}

另外,您不会考虑日期差异和HYPERLINK列的电子表格数组公式吗?