我有以下脚本,每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列中的公式。
答案 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列的电子表格数组公式吗?