Фильтруйте CSV ежедневно и узнайте разницу между последним днем - PullRequest
1 голос
/ 13 октября 2019

Я работаю с поставщиком, который ежедневно дает мне CSV с обновлениями акций. Мне нужно загрузить его на мой веб-сайт с помощью инструмента импорта. Это круто, чтобы сделать все быстрее, но у меня есть некоторые проблемы:

  • Предоставленный CSV не в той же конфигурации, что и инструмент импорта. Нет проблем, я сделал фильтр с простым Query и Importrange, получая именно те столбцы, которые мне нужны.

  • Категоризация от поставщика плохая, поэтому мне нужно автоматически перечислить категориии сделать свой собственный. Нет проблем, я сделал =UNIQUE с категориями и написал свои собственные категории. После этого с помощью простого vlookup я получаю столбец с нужными категориями.

Теперь у меня есть собственный CSV-фильтр, поэтому я могу загружать его так быстро.

Но теперь у меня есть большая проблема. Мне нужно обновить акции с веб-сайта и добавить новые продукты.

Моя cms работает с опорным номером для обновления, поэтому мне просто нужно сгенерировать CSV с продуктами для обновления и импортировать их. Что касается новых продуктов, то же самое, мне просто нужно найти новые продукты и импортировать их.

Проблема здесь в том, как я могу получить изменения со склада и новые продукты?

Я попытался сохранить все CSV на одном листе, чтобы получить различия между последними, но мы говорим о 9 тыс. Строк на листе, поэтому у меня возникают некоторые проблемы.

У меня есть несколько идей, например, использовать фильтрующий документ для каждого нового CSV-файла и лучше сравнивать отфильтрованные листы, чем необработанный CSV.

Но мне нужно делать это эффективно, потому что это что-то, что нужно делать ежедневно.

Мне не нужен код или что-то в этом роде, просто некоторые идеи, чтобы следовать пути. Я могу искать, изучать и понимать большинство вещей, так что это не проблема.

У меня есть пример моего фильтрующего документа: https://docs.google.com/spreadsheets/d/1jfq1h4gnKbdoKrI7J260lXXKzXbkusbzn2cQcURPjCo/edit?usp=sharing

И если вам нужно от меня больше, я могу рассказать вам все.

Извините за мой английский,Я - испанский парень, и мне все еще трудно объяснить себя.

1 Ответ

0 голосов
/ 13 октября 2019

У вас есть два CSV-файла, которые были импортированы в Google Sheets. Один от вашего поставщика с информацией о наличии новых и существующих продуктов;Вы отфильтровали это, чтобы получить данные в правильном формате. Другой от вашей CMS - это вывод текущих данных CMS.

Вы хотите убедиться, что все новые продукты добавлены в CMS и что складские данные всех существующих продуктов обновлены в CMS. Вы также можете проверить, что все продукты в CMS находятся в списке поставщиков и что минимальное количество для продажи остается равным единице.

Следующий код не проверен, но отражает предлагаемую стратегию. Я прошу прощения, если я неправильно понял ваши намерения.

  • Используя метод 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);
    }
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...