You probably don't want to create a 3D array or list: the output data isn't "3D" from what you show, so probably you just want a 2D array, or (maybe better) a List of Lists (possibly a List of Dictionaries would be better.)
Create the header "row" separately - it's the "total list" of all columns from all sheets - just check and add to that as new items come up.
The data itself:
List<Dictionary<string, YourDataType>> sheets = new List<Dictionary<string, YourDataType>> ();
For each sheet, create a new Dictionary:
Dictionary<string, YourDataType> sheet = new Dictionary<string, YourDataType>();
Add your sheet data to that (adding new columns to the header as required) and add the
sheet
to the
sheets
collection.
To create the output, iterate through the
sheets
and check each header: if it's in the
sheet
Diction, use the value, otherwise use "None".
Make sense?