Возвращение данных частичной строки с помощью регулярного выражения
Хорошо, это работает для меня. У меня есть файл с именем «LocafoxInventoryData_Automatic», который представляет собой электронную таблицу с одним листом. Я ищу файлы с таким именем и, если найдено более одного, выдает ошибку, чтобы вы могли выяснить, какой вы хотите.
Затем я открываю файл как SpreadSheet с openById. Я получаю идентификатор продукта из столбца листа Vorlage I7,8,9,10 и оборачиваю их регулярным выражением, которое выглядит следующим образом: ^ 1 \ | \ | cw8vtfxa5owglp03btv22g9d. \ | \ | \ | (. ) $. Хотя в коде обратная косая черта \
должна быть \\
двойной обратной косой чертой, что потребовало некоторого времени, чтобы выяснить.
Итак, в конце получаем числа, и я помещаю их в столбец Vorlage D7,8,9,10. И тогда я установил для файла isTrashed значение true. Я не знаю, хотите ли вы вернуть данные, поэтому я оставил объект там, но закомментировал их. Я также удалил все остальное, если.
function getData() {
var filename='LocafoxInventoryData_Automatic';
var files = DriveApp.getFilesByName(filename);
var n=0;
while (files.hasNext()) {
var file = files.next();
var id = file.getId();
n++;
}
if(n>1){throw(Utilities.formatString('Error: More than file named %s', filename));}//Will present an error if there is more than one file
if(id){
var sheetData = SpreadsheetApp.openById(id).getActiveSheet().getDataRange().getValues();//I assumed no headers in this file
var sspre = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Vorlage");
var re1 = new RegExp('^1\\|\\|' + sspre.getRange('I7').getValue() + '.*\\|\\|\\|(.*)$','i');
var re2 = new RegExp('^1\\|\\|' + sspre.getRange('I8').getValue() + '.*\\|\\|\\|(.*)$','i');
var re3 = new RegExp('^1\\|\\|' + sspre.getRange('I9').getValue() + '.*\\|\\|\\|(.*)$','i');
var re4 = new RegExp('^1\\|\\|' + sspre.getRange('I10').getValue() + '.*\\|\\|\\|(.*$)','i');
for(var i=0;i<sheetData.length;i++){
var rD1=re1.exec(sheetData[i][0]);
if(rD1) {
var rowData1 = rD1[1];
}
var rD2=re2.exec(sheetData[i][0]);
if(rD2) {
var rowData2 = rD2[1];
}
var rD3=re3.exec(sheetData[i][0]);
if(rD3) {
var rowData3 = rD3[1];
}
var rD4=re4.exec(sheetData[i][0]);
if(rD4) {
var rowData4 = rD4[1];
}
}
//var rObj={rowData1:rowData1,rowData2:rowData2,rowData3:rowData3,rowData4:rowData4};
sspre.getRange('D7').setValue(rowData1);
sspre.getRange('D8').setValue(rowData2);
sspre.getRange('D9').setValue(rowData3);
sspre.getRange('D10').setValue(rowData4);
file.setTrashed(true);
//return rObj;
}
}
Между прочим, для решения этой проблемы весьма полезно иметь собственный тестер регулярных выражений, написанный на том же языке, на котором вы разрабатываете. Извините, это заняло у меня так много времени. Если у вас возникнут дополнительные проблемы, дайте мне знать.