如何动态设置从 google spread sheet 到另一个 google spread sheet 单元格的值
How to set dynamically value from a google spread sheet to another google spread sheet cell
我正在尝试从交接报告中获取合同日期 google 价差 sheet,
//这是移交报告的样本sheet
https://docs.google.com/spreadsheets/d/1gVnj2LV60hBXmuiTDa287cNoN1VzroPJEPXl3w-SBF0/edit?usp=sharing
然后,我想将值设置为与包含移交报告 ss id 的行和包含“合同日期”文本的列匹配的单元格。
//这里是示例列表 sheet
https://docs.google.com/spreadsheets/d/1Hu8dTsuH5iS9P0JGBlyN6pOWHo1hhe2t03Wih2BDRGw/edit?usp=sharing
但是,什么也没发生:(
如您所见,保持行和列动态以实现灵活性和可扩展性很重要。
非常感谢您的帮助。
function contractDate() {
//handover report ss
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('handover report');
var val = sh.getRange(2,1).getValue();
var id = ss.getId();
//list ss
var lss = SpreadsheetApp.openById('1Hu8dTsuH5iS9P0JGBlyN6pOWHo1hhe2t03Wih2BDRGw');
var lsh = lss.getSheetByName('before submission');
var lastCol = lsh.getLastColumn();
var lastRow = lsh.getLastRow();
//get dynamic column number of contranct date
function findCol_contractDate(lsh,lastCol) {
for (var i=1; i<=lastCol; i++) {
if(lsh.getRange(1,i).getValue() === 'constract date') {
return i;
}
return 0;
}
}
// get dynamic column number of handover report
function findCol_report(lsh,lastCol) {
for (var i=1; i<=lastCol; i++) {
if(lsh.getRange(1,i).getValue() === 'ss id of handover report') {
return i;
}
return 0;
}
}
//get dynamic row number of ss id that match with the id
function findRow(lsh,lastRow,findCol_report,id) {
for(var i=1; i<=lastRow; i++) {
if(lsh.getRange(i,findCol_report).getValue() === id) {
return i;
}
return 0;
}
}
//set value
function setValue(findRow,findCol_contractDate,val) {
lsh.getRange(findRow,findCol_contractDate).setValue(val);
}
}
问题在于你编写函数的方式
您在 contractDate()
中定义了所有函数,但您从不调用它们,也从不为它们分配参数。
还有:
您的 return 0;
语句应放在 for
循环之后 - 否则如果 if
条件未满足,则在第一次迭代后将返回 0
。返回意味着函数将在迭代完成之前停止。
工作样本:
//handover report ss
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('handover report');
var val = sh.getRange(2,1).getValue();
var id = ss.getId();
//list ss
var lss = SpreadsheetApp.openById('1Hu8dTsuH5iS9P0JGBlyN6pOWHo1hhe2t03Wih2BDRGw');
var lsh = lss.getSheetByName('before submission');
var lastCol = lsh.getLastColumn();
var lastRow = lsh.getLastRow();
function contractDate() {
var dateCol = findCol_contractDate();
var reportCol = findCol_report();
var row = findRow(reportCol);
setValue(row,dateCol);
}
//get dynamic column number of contranct date
function findCol_contractDate() {
for (var i=1; i<=lastCol; i++) {
if(lsh.getRange(1,i).getValue() === 'contract date') {
return i;
}
}
return 0;
}
// get dynamic column number of handover report
function findCol_report() {
for (var i=1; i<=lastCol; i++) {
if(lsh.getRange(1,i).getValue() === 'ss id of handover report') {
return i;
}
}
return 0;
}
//get dynamic row number of ss id that match with the id
function findRow(findCol_report) {
for(var i=1; i<=lastRow; i++) {
if(lsh.getRange(i,findCol_report).getValue() === id) {
return i;
}
}
return 0;
}
//set value
function setValue(findRow,findCol_contractDate) {
if(findRow > 0 && findCol_contractDate > 0){
lsh.getRange(findRow,findCol_contractDate).setValue(val);
}
}
我正在尝试从交接报告中获取合同日期 google 价差 sheet,
//这是移交报告的样本sheet https://docs.google.com/spreadsheets/d/1gVnj2LV60hBXmuiTDa287cNoN1VzroPJEPXl3w-SBF0/edit?usp=sharing
然后,我想将值设置为与包含移交报告 ss id 的行和包含“合同日期”文本的列匹配的单元格。
//这里是示例列表 sheet https://docs.google.com/spreadsheets/d/1Hu8dTsuH5iS9P0JGBlyN6pOWHo1hhe2t03Wih2BDRGw/edit?usp=sharing
但是,什么也没发生:( 如您所见,保持行和列动态以实现灵活性和可扩展性很重要。
非常感谢您的帮助。
function contractDate() {
//handover report ss
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('handover report');
var val = sh.getRange(2,1).getValue();
var id = ss.getId();
//list ss
var lss = SpreadsheetApp.openById('1Hu8dTsuH5iS9P0JGBlyN6pOWHo1hhe2t03Wih2BDRGw');
var lsh = lss.getSheetByName('before submission');
var lastCol = lsh.getLastColumn();
var lastRow = lsh.getLastRow();
//get dynamic column number of contranct date
function findCol_contractDate(lsh,lastCol) {
for (var i=1; i<=lastCol; i++) {
if(lsh.getRange(1,i).getValue() === 'constract date') {
return i;
}
return 0;
}
}
// get dynamic column number of handover report
function findCol_report(lsh,lastCol) {
for (var i=1; i<=lastCol; i++) {
if(lsh.getRange(1,i).getValue() === 'ss id of handover report') {
return i;
}
return 0;
}
}
//get dynamic row number of ss id that match with the id
function findRow(lsh,lastRow,findCol_report,id) {
for(var i=1; i<=lastRow; i++) {
if(lsh.getRange(i,findCol_report).getValue() === id) {
return i;
}
return 0;
}
}
//set value
function setValue(findRow,findCol_contractDate,val) {
lsh.getRange(findRow,findCol_contractDate).setValue(val);
}
}
问题在于你编写函数的方式
您在 contractDate()
中定义了所有函数,但您从不调用它们,也从不为它们分配参数。
还有:
您的 return 0;
语句应放在 for
循环之后 - 否则如果 if
条件未满足,则在第一次迭代后将返回 0
。返回意味着函数将在迭代完成之前停止。
工作样本:
//handover report ss
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('handover report');
var val = sh.getRange(2,1).getValue();
var id = ss.getId();
//list ss
var lss = SpreadsheetApp.openById('1Hu8dTsuH5iS9P0JGBlyN6pOWHo1hhe2t03Wih2BDRGw');
var lsh = lss.getSheetByName('before submission');
var lastCol = lsh.getLastColumn();
var lastRow = lsh.getLastRow();
function contractDate() {
var dateCol = findCol_contractDate();
var reportCol = findCol_report();
var row = findRow(reportCol);
setValue(row,dateCol);
}
//get dynamic column number of contranct date
function findCol_contractDate() {
for (var i=1; i<=lastCol; i++) {
if(lsh.getRange(1,i).getValue() === 'contract date') {
return i;
}
}
return 0;
}
// get dynamic column number of handover report
function findCol_report() {
for (var i=1; i<=lastCol; i++) {
if(lsh.getRange(1,i).getValue() === 'ss id of handover report') {
return i;
}
}
return 0;
}
//get dynamic row number of ss id that match with the id
function findRow(findCol_report) {
for(var i=1; i<=lastRow; i++) {
if(lsh.getRange(i,findCol_report).getValue() === id) {
return i;
}
}
return 0;
}
//set value
function setValue(findRow,findCol_contractDate) {
if(findRow > 0 && findCol_contractDate > 0){
lsh.getRange(findRow,findCol_contractDate).setValue(val);
}
}