您有两个 CSV 文件已导入 Google 表格。一份来自您的供应商,提供新产品和现有产品的库存详细信息;您已对其进行过滤以获取正确格式的数据。另一个来自您的 CMS - 它是当前 CMS 数据的输出。
您要检查所有新产品是否都已添加到 CMS,以及所有现有产品的库存详细信息是否已更新到 CMS。您还可以选择检查 CMS 上的所有产品是否都在供应商列表中,并且“Minimum-to-Sell-Quantity”是否保持等于 1。
以下代码未经测试,但反映了建议的策略。如果我误解了您的意图,我深表歉意。
- 使用 Javascript map 方法,创建 CMS 中所有参考编号的列表。
- 使用 Javascript indexOf 方法,遍历过滤后的供应商数据中的值,并检查 CMS 列表中的每个参考编号。
- CMS 列表中存在该编号 - 这是现有产品,因此请更新库存
- CMS 列表中不存在该编号 - 这是新产品,因此请在 CMS 中创建新产品。
作为双重检查,您可以反转该过程以确保 i) CMS 列表中的每个数字都存在于过滤后的供应商列表中,并且 ii) “最小销售数量”仍然是一个单位。那些在供应商列表中找不到的 CMS 产品可以写入错误表并进行审查。
function so5836302201() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var cmsname = "CSV EXAMPLE";
var cms = ss.getSheetByName(cmsname);
var filtername = "FILTER"
var filter = ss.getSheetByName(filtername);
var cmserrorsname = "cms errors";
var cmserrors = ss.getSheetByName(errorsname);
// get cms data
var cmsLR = cms.getLastRow();
var cmsLC = cms.getLastColumn();
var cmsRange = cms.getRange(2,1,cmsLR-1,cmsLC);
var cmsValues = cmsRange.getValues();
// get filter data
var filterLR = filter.getLastRow();
var filterLC = filter.getLastColumn();
var filterRange = filter.getRange(2,1,cmsLR-1,cmsLC);
var filterValues = filterRange.getValues();
// setup cms errors sheet
// "My cms works with Refer Number to update"
// check every product from filter to cms
// if not exist in cms; then update cms as new
// if exist in cms, then update cms for stock
// cms reference number: assume the reference number is in column E of the cms=> column 4(zero-based)
// cms reference number: assume the reference number is in column B of the filter=> column 1(zero-based)
// get an array of reference numbers from the CMS
var cmsRefNum = cmsValues.map(function(e){return e[4];});//[[e],[e],[e]]=>[e,e,e]
//Logger.log(cmsRefNum); // DEBUG
// loop though filter and find ref num in cms
for (var i = 0;i<filterValues.length;i++){
Logger.log("DEBUG: i="+i+", Filter Ref Num: "+filterValues[i][1])
var filterresult = cmsValues.indexOf(filterValues[i][1]);
if (filterresult === -1){
// -1 means this is a new product
// include cope to add this product to cms
}
else{
// if not -1, the Filter product exists on cms
// include code to update stock only
// you might also test that Suppliers Min-Qty-to-Sell remains = 1
}
}
// belt and braces
// loop through cms and ensure that stock item was on filter.
var filterRefNum = filterValues.map(function(e){return e[1];});//[[e],[e],[e]]=>[e,e,e]
//Logger.log(filterRefNum); // DEBUG
var cmsmissingdata=[]
for (var i=0;i<cmsValues.length;i++){
var cmstemp=[];
Logger.log("DEBUG: i="+i+", CMS Ref Num: "+cmsValues[i][4])
var cmsresult = filterValues.indexOf(cmsValues[i][4]);
if (cmsresult === -1){
// -1 means this product wasn't on the Filter
// include this product on an error report.
cmstemp.push(filterValues[i][0]);
cmstemp.push(filterValues[i][1]);
cmstemp.push(filterValues[i][2]);
cmsmissingdata.push(cmstemp);
}
// delete existing cmserrors
var errorsLR = cmserrors.length;
var errorsLC = 3;
var errorsRange = cmserrors.getRange(2,1,errorsLR,errorsLC);
errorsRange.clearContent();
if (cmserrors.length !=0){
// there are errors - write them to
var errorsLR = cmserrors.length;
var errorsLC = 3;
var errorsRange = cmserrors.getRange(2,1,cmsLR-1,cmsLC);
cmserrors.setValues(cmsmissingdata);
}
}
}