Reputation: 23
I need to merge data from two spreadsheets and add column with the file ID on each row.
Spreadsheet 1 Columns => A B C D
Spreadsheet 2 Columns => O P Q R
Spreadsheet merged Columns => 'X' A B C D O P Q R
edited: where column X contains ID of spreadsheet.
...where 'X' is not column from Spreadsheet 1 or Spreadsheet 2 but it is new column in merged new spreadsheet and contains text/ID of spreadsheet where is origin of the row.
I use now this code...
=ARRAYFORMULA({
QUERY(importrange("spreadsheet1-ID"; "'Sheet'!A:D");"SELECT * WHERE Col1!=''");
QUERY(importrange("spreadsheet2-ID"; "'Sheet'!O:R");"SELECT * WHERE Col1!=''")
})
...and I get:
A1 B1 C1 D1
A2 B2 C2 D2
O1 P1 Q1 R1
O2 P2 Q2 R2
But I need:
spreadsheet1-ID A1 B1 C1 D1
spreadsheet1-ID A2 B2 C2 D2
spreadsheet2-ID O1 P1 Q1 R1
spreadsheet2-ID O2 P2 Q2 R2
Can I use something like this to add fixed column with ID in QUERY?
=ARRAYFORMULA({
QUERY(importrange("spreadsheet1-ID"; "'Sheet'!A:D");"SELECT 'ID1', * WHERE Col1!=''");
QUERY(importrange("spreadsheet2-ID"; "'Sheet'!O:R");"SELECT 'ID1', * WHERE Col1!=''")
})
Upvotes: 2
Views: 7830
Reputation: 3094
Does this formula work as you want:
={QUERY(importrange("spreadsheet1-ID", "'Sheet'!A:X"),"SELECT Col24,Col1,Col2,Col3,Col4 WHERE Col1!=''");QUERY(importrange("spreadsheet2-ID", "'Sheet'!O:X"),"SELECT Col10,Col1,Col2,Col3,Col4 WHERE Col1!=''")}
To add an ID that does not exist in the sheets themselves, try this formula:
=ArrayFormula({IF(SIGN(row(INDIRECT("1:"&ROWS(QUERY(importrange("key1", "'Sheet'!A:D"),"WHERE Col1!=''"))))),"ID1",),QUERY(importrange("key1", "'Sheet'!A:D"),"WHERE Col1!=''");IF(SIGN(row(INDIRECT("1:"&ROWS(QUERY(importrange("key2", "'Sheet'!O:R"),"WHERE Col1!=''"))))),"ID2",),QUERY(importrange("key2", "'Sheet'!O:R"),"WHERE Col1!=''")})
You can see it working in this example sheet: https://docs.google.com/spreadsheets/d/1sSHP0sekUc5PxnubpnieWthD2H_9s4P2JWqmtxM906o/edit?usp=sharing
Upvotes: 3