Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 如何将某些行转换为列?_Google Sheets_Transpose_Google Sheets Formula_Array Formulas_Google Sheets Query - Fatal编程技术网

Google sheets 如何将某些行转换为列?

Google sheets 如何将某些行转换为列?,google-sheets,transpose,google-sheets-formula,array-formulas,google-sheets-query,Google Sheets,Transpose,Google Sheets Formula,Array Formulas,Google Sheets Query,有很多关于转置的问题,但我有一些细节,无法创建正确的公式。 因此,我有近10万行,格式如下 我需要ARRAYFORMULA或类似的东西,以使这10万行符合您在“预期结果”选项卡上看到的格式 您有大量记录,但每个记录有19个数据字段,分布在10列和12行中。您建议使用arrayformula(以及比我可能更聪明的人),但我建议使用一个脚本,将当前形式的数据放在一张纸上(比如“源”),并将数据输出到新的纸上(比如“目标”) 在“映射”数据时,有几个问题需要解决: 输入表上表示了多少记录-启用循

有很多关于转置的问题,但我有一些细节,无法创建正确的公式。 因此,我有近10万行,格式如下

我需要
ARRAYFORMULA
或类似的东西,以使这10万行符合您在“预期结果”选项卡上看到的格式


您有大量记录,但每个记录有19个数据字段,分布在10列和12行中。您建议使用arrayformula(以及比我可能更聪明的人),但我建议使用一个脚本,将当前形式的数据放在一张纸上(比如“源”),并将数据输出到新的纸上(比如“目标”)

在“映射”数据时,有几个问题需要解决:

  • 输入表上表示了多少记录-启用循环所需的记录数。我使用Javascript
    Math.floor
    方法来计算产品的数量
  • 确定每个字段的正确行/列组合。数据分为三个部分
    • 第一行连续列中的8个字段
    • 第九列中2行2个字段,以及
    • 第十列中九个连续行中的9个字段
    • 总计=12行/10列。为此,为了导航行,我使用计数器(I)乘以行数加1;这些列更直观
  • 为了提高效率,
    • 仅在脚本开始时获取一次数据
    • 使用数组逐步构建输出;及
    • 在脚本末尾更新一次输出(
      setValues

函数myFunction(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sourcesheetname=“source”;
var targetsheetname=“target”;
var source=ss.getSheetByName(sourcesheetname);
var target=ss.getSheetByName(targetsheetname);
var sourcerange=source.getDataRange();
var sourcedata=sourcerange.getValues();
var sourceheaders=1;
var rowsperproduct=12;
var sourcelr=source.getLastRow();
var integerPart=Math.floor((sourcelr sourceheaders)/rowsperproduct);
//Logger.log(“调试:产品数量=“+integerPart”);
var rowdata=[];
//看看产品的数量
对于(var i=0;i
=ARRAYFORMULA({UNIQUE(INDIRECT)(“source!A2:A”)和COUNTA(source!A2:A)),
查询(SPLIT)转置(SPLIT)查询♦"&索引(拆分)转置(拆分)(
TRIM(查询)(转置)(查询)(转置(
如果(来源:B2:J“”)♦“&source!A2:A&”♠"&{"♥“&source!B2:B,source!C2:J},))
,,999^99)),,999^99)), "♦")), "♠"),,2),,999^99), "♥")), "♦"), 
“其中Col2不为null”,0)})

欢迎。仅供参考,StackOverflow不是一项定制的编码服务。如果您能描述一下自己在解决此问题方面所做的努力,这将非常有帮助。我理解。谢谢。但这可能对有同样问题的人非常有帮助。非常感谢您的帮助!Stack始终是我遇到紧急情况时的去处,并且总是见面od和疯狂的人们!晚上好。待会儿见。Tour de force。我可以问一下你花了多长时间来建造吗?@Tedinoz花了我大约10分钟
function myFunction() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourcesheetname = "source";
  var targetsheetname = "target";
  var source = ss.getSheetByName(sourcesheetname);
  var target = ss.getSheetByName(targetsheetname);

  var sourcerange = source.getDataRange();
  var sourcedata = sourcerange.getValues();

  var sourceheaders = 1;
  var rowsperproduct = 12;

  var sourcelr = source.getLastRow();

  var integerPart = Math.floor((sourcelr-sourceheaders)/rowsperproduct);
  //Logger.log("DEBUG: number of products = "+integerPart);

  var rowdata = [];

  // look thought the number of products
  for (var i = 0; i<integerPart; i++){

    // use a temporary array to build the data for the row.
    var temp = [];
    // row 1, copy first eight columns (0-7)
    temp.push(sourcedata[(i*12)+1][0]);//ID
    temp.push(sourcedata[(i*12)+1][1]);//GID
    temp.push(sourcedata[(i*12)+1][2]);//NAME
    temp.push(sourcedata[(i*12)+1][3]);//PRICE
    temp.push(sourcedata[(i*12)+1][4]);//BRAND
    temp.push(sourcedata[(i*12)+1][5]);//URL
    temp.push(sourcedata[(i*12)+1][6]);//country
    temp.push(sourcedata[(i*12)+1][7]);//instock

    // row 2 & 3 in Column I(8)
    temp.push(sourcedata[(i*12)+2][8]);//url1
    temp.push(sourcedata[(i*12)+3][8]);//url2

    // rows 4 - 12 in Column J(9)
    temp.push(sourcedata[(i*12)+4][9]);// tech name
    temp.push(sourcedata[(i*12)+5][9]);// size
    temp.push(sourcedata[(i*12)+6][9]);// inches
    temp.push(sourcedata[(i*12)+7][9]);// mm
    temp.push(sourcedata[(i*12)+8][9]);// depth
    temp.push(sourcedata[(i*12)+9][9]);// BB
    temp.push(sourcedata[(i*12)+10][9]);// ref1
    temp.push(sourcedata[(i*12)+11][9]);// ref2
    temp.push(sourcedata[(i*12)+12][9]);// ref3

    // Update the rowdata for this row
    rowdata.push(temp);

  }

  // update data to target
  target.getRange(2,1,integerPart,19).setValues(rowdata);
}
=ARRAYFORMULA({UNIQUE(INDIRECT("source!A2:A"&COUNTA(source!A2:A))),
 QUERY(SPLIT(TRANSPOSE(SPLIT(QUERY("♦"&INDEX(SPLIT(TRANSPOSE(SPLIT(
 TRIM(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
 IF(source!B2:J<>"", "♦"&source!A2:A&"♠"&{"♥"&source!B2:B, source!C2:J}, ))
 ,,999^99)),,999^99)), "♦")), "♠"),,2),,999^99), "♥")), "♦"), 
 "where Col2 is not null", 0)})