繁体   English   中英

Google Script,如何使用正则表达式将一行从 Sheet1 复制到 Sheet2 而不是一个单元格?

[英]Google Script, how can I copy a row from Sheet1 to Sheet2 instead of just one cell by using regex?

这里经验丰富的编码员,我一直在研究一个正则表达式函数,该函数在成绩单中搜索关键字,然后在找到关键字时用成绩单填充电子表格。 但是,我只研究了如何仅使用包含转录本的一个单元格填充工作表,而我想填充包含转录本单元格以及其他包含 url、日期和时间等单元格的整行。

这是我的代码:

function regexwithsheetpop() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var historySheet = ss.getSheetByName('sheet1');  
var resultsSheet = ss.getSheetByName('Results');
var totalRowsWithData = historySheet.getDataRange().getNumRows();
var data = historySheet.getRange(1, 2, totalRowsWithData).getValues(); 
var regexp = /\W*(identity)\W*\s+(\w+\s+){0,5}(verification)|(verification)\s+(\w+\s+){0,5}(identity)/i;
var result = []; 
for (var i = 0; i < data.length; i += 1) {
     var row = data[i];
     var column = row[0];
     if (regexp.exec(column) !== null) {
        result.push(row); }}
if (result.length > 0) {
    var resultsSheetDataRows = resultsSheet.getDataRange().getNumRows();
    resultsSheetDataRows = resultsSheetDataRows === 1 ? resultsSheetDataRows : resultsSheetDataRows + 1; 
    var resultsSheetRange = resultsSheet.getRange(resultsSheetDataRows, 1, result.length);
  resultsSheetRange.setValues(result);}}

因此,我在包含所有成绩单的“Sheet1”中的 B 列中搜索关键字。 如果找到关键字,regex 函数会用成绩单填充“结果”表。 如果在“Sheet1”的 B 列中找到关键字,正则表达式函数将“Sheet1”的 A、B 和 C 列填充到“结果”表中。

再次,非常有经验的编码员,因此任何简化或愚蠢的反馈都将不胜感激。 谢谢

欢迎! 你大部分时间都在那里。 要从“sheet1”中提取额外的列,您只需在getRange()包含一个额外的参数即可获取所有 3 列(A、B、C):

var data = historySheet.getRange(1, 1, totalRowsWithData, 3).getValues()

请参阅getRange(row, column, numRows, numColumns)

然后调整您的 for 循环以匹配 B 列上的正则表达式,如果找到匹配results则将整个row数组推送到results

在此处详细了解多维范围输出: 如何在 Google Apps 脚本中将数据写入单个范围?

最后,为resultsSheetRange的列数添加另一个参数。

function regexwithsheetpop() {
    var ss = SpreadsheetApp.getActiveSpreadsheet()
    var historySheet = ss.getSheetByName('sheet1')
    var resultsSheet = ss.getSheetByName('Results')

    var totalRowsWithData = historySheet.getDataRange().getNumRows()
    var data = historySheet.getRange(1, 1, totalRowsWithData, 3).getValues()
    var regexp = /\W*(identity)\W*\s+(\w+\s+){0,5}(verification)|(verification)\s+(\w+\s+){0,5}(identity)/i
    var result = []

    for (var i = 0; i < data.length; i += 1) {
        var row = data[i]
        var column = row[1]
        if (regexp.exec(column) !== null) {
            result.push(row)
        }
    }

    if (result.length > 0) {
        var resultsSheetDataRows = resultsSheet.getDataRange().getNumRows()
        resultsSheetDataRows =
            resultsSheetDataRows === 1
                ? resultsSheetDataRows
                : resultsSheetDataRows + 1
        var resultsSheetRange = resultsSheet.getRange(
            resultsSheetDataRows,
            1,
            result.length,
            3
        )
        resultsSheetRange.setValues(result)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM