我有一个包含多个标签的电子表格,所有标签的日期都在A列中。 我需要一个脚本,该脚本可以每晚使用触发器运行,以将A列中具有历史日期的所有行移动到历史行的单个选项卡上。
我已经成功地使第一张工作表中的历史记录行移至历史记录选项卡,但是我似乎无法使脚本适用于多个选项卡。
function HistoricDates() {
SHEET_NAME = "Area1" || "Area2" || "Area3"||"Area4";
// Initialising
var ss = SpreadsheetApp.getActiveSpreadsheet();
var Sheet = ss.getSheetByName(SHEET_NAME);
var PastSheet = ss.getSheetByName("Historic Sheet");
var lastColumn = Sheet.getLastColumn();
// Check all values from sheets
for(var i = Sheet.getLastRow(); i > 0; i--){
// Check if the value is a valid date
var dateCell = Sheet.getRange(i, 1).getValue(); //Dates in column 1
if(isValidDate(dateCell)){
var today = new Date();
var test = new Date(dateCell);
// If the value is a valid date and is a past date, we remove it from the sheet to paste on the other sheet
if(test < today){
var rangeToMove = Sheet.getRange(i, 1, 1, Sheet.getLastColumn()).getValues();
PastSheet.getRange(PastSheet.getLastRow() + 1, 1, 1, Sheet.getLastColumn()).setValues(rangeToMove);
Sheet.deleteRow(i);
}
}
}}
// Check is a valid date
function isValidDate(value) {
var dateWrapper = new Date(value);
return !isNaN(dateWrapper.getDate());
}
预期结果是区域2、3和4中的所有历史行都将移至单个历史标签。
我的带有脚本的电子表格可通过以下链接获得:
https://docs.google.com/spreadsheets/d/1WiZWok4onddTErdAxlWmU82KRSGfVJr5wi1p-rlbY5E/edit?usp=sharing
答案 0 :(得分:0)
您定义char letter = 'Y';
int position = 0;
string productNames[7] =
{ "Pen", "Paper", "Computer", "Pepsi", "Coke", "Book", "Scanner" };
int prizeOfproducts[7] = { 10, 2, 5000, 50, 45, 400, 2000 };
while (letter == 'Y')
{
string mystr = "";
cout << "enter the product name you want to search : ";
cin >> mystr;
int n = mystr.length();
char char_array[n + 1];
strcpy(char_array, mystr.c_str());
bool flag = false;
for (int i = 0; i < 7; i++)
{
int m = productNames[i].length();
char char_arrayOrig[m + 1];
strcpy(char_arrayOrig, productNames[i].c_str());
if (strstr(char_arrayOrig, char_array) == NULL)
{
flag = false;
}
else
{
flag = true;
position = i;
break;
}
}
if (!flag)
{
cout <<
"entered product not found in the product list . Do you want to search again Y/N ? : ";
cin >> letter;
}
的方式将始终为“区域1”。您可以对此进行测试。
SHEET_NAME
相反,function test() {
SHEET_NAME = "Area1" || "Area2" || "Area3"||"Area4";
Logger.log(SHEET_NAME);
}
应该是一个数组,然后您需要遍历该数组。下面,我提供了一个示例,介绍了如何定义该数组并获取工作表。
SHEET_NAME
假设您的其余代码正常工作(我没有对其进行分析),则修改后的脚本将如下所示:
function loopThroughSpecificSheets() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetNames = ["Area1", "Area2", "Area3", "Area4"];
for (var j in sheetNames) {
var sheet = ss.getSheetByName(sheetNames[j]);
// Do other stuff
}
}