簡體   English   中英

使用數組公式連接兩個獨立的工作表

[英]Use array formulas to concatenate two independent sheets

我有兩個布局完全相同的Google表格,由獨立的團隊填寫:

表格1:

team1_entry1 243
team1_entry2 546
etc
...
XXX

表格2:

team2_entry1 166
team2_entry2 888
...
XXX

我需要在一個表中查看兩個工作表中的數據,然后可以使用“過濾器視圖”進行過濾和排序。 我編寫了一個簡單的Apps腳本函數,以遍歷每個工作表並獲取所有值,直到達到“ XXX”為止。 然后,將收集到的數據作為二維數組寫入我的圖紙中。 (我將此數據的IMPORTRANGE()放入另一張工作表中,從中生成過濾器視圖等。)

問題

該工作流程無法離線運行(Apps Script需要運行互聯網),並且我希望能夠在無法訪問Internet時處理這些數據。

是否可以使用某種數組公式向導來進行這種工作表數據連接?


我當前正在工作的腳本代碼,以供參考:

function CreateMasterTableTest( ) { 
  var name_of_a_sheet                  = 'Team1Sheet';
  var name_of_b_sheet                  = 'Team2Sheet';
  var num_tables                       = 2;
  var database_terminating_string      = 'XXX';
  var start_of_data_row_index          = 1; // 2nd row in the sheet
  var ss                               = SpreadsheetApp.getActiveSpreadsheet();

  var all_values    = [];
  var a_sheet       = ss.getSheetByName( name_of_a_sheet );
  var range         = a_sheet.getDataRange();
  all_values[ 0 ] = range.getValues();  
  var b_sheet       = ss.getSheetByName( name_of_b_sheet );
  var range         = b_sheet.getDataRange();
  all_values[ 1 ]   = range.getValues();
  var output_array                     = [];
  var global_row_index                 = 0;
  var end_of_data_encountered          = false;

  ////////////////////////////////////////////////////////////////////
  // Now I have to reserve space for the second dimension
  ////////////////////////////////////////////////////////////////////
  for ( var i = 0; i < ( all_values[ 0 ].length + all_values[ 1 ].length ); i++ ) {    
     output_array[ i ] = output_array[ i ] || []; 
  }

  ////////////////////////////////////////////////////////////////////
  // Walk through each row and each column of each sheet
  ////////////////////////////////////////////////////////////////////
  var a_num_rows = all_values[ 0 ].length;
  var a_num_cols = all_values[ 0 ][ 0 ].length; // this gets the number of cols   
  for ( var table_index= 0; table_index < num_tables; table_index++ ) {    
   for ( var row = 0; row < a_num_rows; row++ ) {
    for ( var col = 0; col < a_num_cols; col++ ) { 
      temp_val                        = String( all_values[ table_index ][ row ][ col ] ); //#VALUE! 
      ///////////////////////////////////////////////////////////////////////////
      // At this point we shall check for the terminating string
      ///////////////////////////////////////////////////////////////////////////
      if ( database_terminating_string == temp_val ) {
          end_of_data_encountered = true;          
          break; 
      }            
      if ( start_of_data_row_index <= row ) {
          output_array[ row - start_of_data_row_index + global_row_index ][ col ] = temp_val; 
      }      
    }    
    if (  end_of_data_encountered == true ) {
      end_of_data_encountered = false;
      global_row_index = row - 1;
      break;
    } //end of if
   } // end of row for loop
  } // end of tables for loop
  return output_array;
}

編輯2:這是我想出的工作表公式,但我無法使它適用於兩個工作表:

=Indirect( "Sheet1!A3:HA" & Match( "XXX", Sheet1!A3:A1000, 0 ) + 1 )

對於Sheet2同樣

=Indirect( "Sheet2!A3:HA" & Match( "XXX", Sheet2!A3:A1000, 0 ) + 1 )

以下不適用於我:

=concat( Indirect( "Sheet1!A3:HA" & Match( "XXX", Sheet1!A3:A1000, 0 ) + 1 ), Indirect( "Sheet2!A3:HA" & Match( "XXX", Sheet2!A3:A1000, 0 ) + 1 ) )

我可能需要與concat類似的東西,也許適用於Arrays。

Edit3:似乎已找到解決方案

代替上面的concat,使用{array1; array2}方法。

換句話說,在我的情況下是:

= {Indirect(“ Sheet1!A3:HA”&Match(“ XXX”,Sheet1!A3:A1000,0)+ 1); 間接(“ Sheet2!A3:HA”和Match(“ XXX”,Sheet2!A3:A1000,0)+ 1)}

={Indirect( "Sheet1!A3:HA" & Match( "XXX", Sheet1!A3:A1000, 0 ) + 1 ); Indirect( "Sheet2!A3:HA" & Match( "XXX", Sheet2!A3:A1000, 0 ) + 1 ) }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM