仅在以下范围不为空时设置值 - 转置数据

Only set values if the following range is not null - Transpose data

嗨!伙计们,有人可以帮我解决这个问题吗?我只想将 Sheet1 Column1 值转置到 Sheet2 Column5 到 Column9,将 Column2 值转置到 Sheet2 Column10 到 Column 12。标准是如果 'D10:G13' 范围不为空,那么这些值将转置到 Sheet1 表单 Sheet2。例如:Sheet1 中的 'D10:G12' 范围内有一些数据。因此,只有来自 Sheet1 Column1 和 Column2 的值才会针对该特定范围存储到 Sheet2。但是在我的代码中,Sheet1 Column1 和 Column2 中的值存储到 Sheet2,尽管范围 'D13:G13' 为 null 但仍然针对此空范围存储数据。我不想要的。我想要的是,如果范围 'D13:G13' 只填充了一些数据,那么 Column1 和 Column2 数据将存储在它上面。

Note: The given range 'D10:G13' is preset and cannot be changed.

function transpose() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh1 = ss.getSheetByName('Sheet1');
var sh2 = ss.getSheetByName('Sheet2');
var lr = sh2.getLastRow()+1;
var gv1 = sh1.getRange('D10:G13').getValues();
var gv2 = sh1.getRange('A2:A6').getValues();
var gv3 = sh1.getRange('B3:B5').getValues();

var result1 = [...gv1[0], ...gv2.flat(), ...gv3.flat()];
var result2 = [...gv1[1], ...gv2.flat(), ...gv3.flat()];
var result3 = [...gv1[2], ...gv2.flat(), ...gv3.flat()];
var result4 = [...gv1[3], ...gv2.flat(), ...gv3.flat()];


var results = [result1, result2, result3, result4];

sh2.getRange(lr,1,results.length, results[0].length).setValues(results);

}

据我了解,您想将 Sheet1 D10:G13 中的行数与 Sheet1[= 的转置数据相匹配33=] Column1 和 Column2.

在您的示例中,您想要删除 Sheet2 的第 5 行,因为 D13:G13 是空的。

试试这个:

function transpose() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh1 = ss.getSheetByName('Sheet1');
  var sh2 = ss.getSheetByName('Sheet2');
  var lr = sh2.getLastRow()+1;
  var gv1 = sh1.getRange('D10:G13').getValues();
  var gv2 = sh1.getRange('A2:A6').getValues();
  var gv3 = sh1.getRange('B3:B5').getValues();
  var results = [];
  for(var i = 0; i < gv1.length; i++){
    if(JSON.stringify(gv1[i]) != `["","","",""]`){
      results.push([...gv1[i], ...gv2.flat(), ...gv3.flat()])
    }
  }
  sh2.getRange(lr,1,results.length, results[0].length).setValues(results);
}

输出:

注意: 如果我对您的问题的理解正确,请告诉我。另外,如果您能提供预期输出的屏幕截图,我们将更容易提供答案。