链接来自两个 google 工作表的数据
Linking Data from two google sheets
我想要 link 来自我 google sheet 的数据来跟踪人们的假期。我还有另一个 sheet,然后我将使用它打印出来,以便人们轻松查看谁不在场。任何人都可以帮助我从一系列单元格中获取数据并且仅 return 人名的逻辑吗?
我无法共享 sheet,因为绑定到我的公司,我无法在公司外部共享。我可以分享我正在尝试完成的内容的屏幕截图。任何可以使这更容易的想法都会有所帮助。我还尝试 link 跟踪器到 Google 日历,在那里我制作了一个新的
CalendarChart Code
Screenshots
我创建了一个自定义函数,用于根据假期输入检索每天的姓名列表。
Test Sheet
工作原理:
根据输入 sheet,公式找到具有正确日期的列,然后查看该列是否有任何 v
个字符,如果找到任何字符,它会将名称添加到结果。
注意事项
日期数字是格式化为仅显示月份日期的日期对象。
月份名称显示其下方日期的月份。 (只是化妆品)
如果您不只是查找 v
而您想查找任何内容(h
、p
等),您可以将注释行更改为 !=""
。但是,例如,需要对 return 区分休假和半天的列表进行更多调整。
代码
function test(){
GETVACATIONS(new Date("2019-01-02"));
}
function GETVACATIONS(date) {
const inputSheetName = "Input";
const namesColumns = 1;
const dateRow = 2;
const dateStartCol = 8;
var spreadsheet = SpreadsheetApp.getActive();
var inputSheet = spreadsheet.getSheetByName(inputSheetName);
var nameSize = inputSheet.getDataRange().getLastRow()-dateRow;
date = date.setHours(1,0,0,0); //reset time for uniform search
var result = [];
//Find cell that has the correct date.
var lookupDateRange = inputSheet.getRange(dateRow, dateStartCol, 1, inputSheet.getMaxColumns()-dateStartCol);
var foundIndex = lookupDateRange.getValues()[0].map(function (x) {return x.setHours(1,0,0,0);}).indexOf(date);
if (foundIndex!=-1) {
//match found
var lookupColumn = dateStartCol+foundIndex;
var lookupDataRange = inputSheet.getRange(dateRow+1, lookupColumn, nameSize);
//Collect rows that have data, fetch the usernames on that row.
for (var r=0; r<lookupDataRange.getValues().length; r++) {
if (lookupDataRange.getValues()[r][0]==="v") {//Has vacation. Might change to if !="" if you want to register any non empty
result.push(inputSheet.getRange(dateRow+1+r, namesColumns).getValue());
}
}
}
return result.sort().toString();
}
用法
将公式 =GETVACATIONS(date)
添加到单元格中,其中日期是 Date
对象或对带有对象的单元格的引用。
希望对您有所帮助!
我想要 link 来自我 google sheet 的数据来跟踪人们的假期。我还有另一个 sheet,然后我将使用它打印出来,以便人们轻松查看谁不在场。任何人都可以帮助我从一系列单元格中获取数据并且仅 return 人名的逻辑吗?
我无法共享 sheet,因为绑定到我的公司,我无法在公司外部共享。我可以分享我正在尝试完成的内容的屏幕截图。任何可以使这更容易的想法都会有所帮助。我还尝试 link 跟踪器到 Google 日历,在那里我制作了一个新的
CalendarChart Code Screenshots
我创建了一个自定义函数,用于根据假期输入检索每天的姓名列表。
Test Sheet
工作原理:
根据输入 sheet,公式找到具有正确日期的列,然后查看该列是否有任何 v
个字符,如果找到任何字符,它会将名称添加到结果。
注意事项
日期数字是格式化为仅显示月份日期的日期对象。
月份名称显示其下方日期的月份。 (只是化妆品)
如果您不只是查找 v
而您想查找任何内容(h
、p
等),您可以将注释行更改为 !=""
。但是,例如,需要对 return 区分休假和半天的列表进行更多调整。
代码
function test(){
GETVACATIONS(new Date("2019-01-02"));
}
function GETVACATIONS(date) {
const inputSheetName = "Input";
const namesColumns = 1;
const dateRow = 2;
const dateStartCol = 8;
var spreadsheet = SpreadsheetApp.getActive();
var inputSheet = spreadsheet.getSheetByName(inputSheetName);
var nameSize = inputSheet.getDataRange().getLastRow()-dateRow;
date = date.setHours(1,0,0,0); //reset time for uniform search
var result = [];
//Find cell that has the correct date.
var lookupDateRange = inputSheet.getRange(dateRow, dateStartCol, 1, inputSheet.getMaxColumns()-dateStartCol);
var foundIndex = lookupDateRange.getValues()[0].map(function (x) {return x.setHours(1,0,0,0);}).indexOf(date);
if (foundIndex!=-1) {
//match found
var lookupColumn = dateStartCol+foundIndex;
var lookupDataRange = inputSheet.getRange(dateRow+1, lookupColumn, nameSize);
//Collect rows that have data, fetch the usernames on that row.
for (var r=0; r<lookupDataRange.getValues().length; r++) {
if (lookupDataRange.getValues()[r][0]==="v") {//Has vacation. Might change to if !="" if you want to register any non empty
result.push(inputSheet.getRange(dateRow+1+r, namesColumns).getValue());
}
}
}
return result.sort().toString();
}
用法
将公式 =GETVACATIONS(date)
添加到单元格中,其中日期是 Date
对象或对带有对象的单元格的引用。
希望对您有所帮助!