I have 2 datatable both have unique columns so there’s no common column between them. i want to merge the 2 datatable having columns side by side like lets say dt1 has 3 columns and dt2 has 2 columns, so merged data should look like columnA, B, C, D, E.
- Read Range (File path for dt1) // Output: dt1
- Read Range (File path for dt2) // Output: dt2
- Merge Data Table:
- DataTable1: dt1
- DataTable2: dt2
- Join Type: Full Outer
// Output: mergedDataTable
- For each column (column) in dt1
If Not mergedDataTable.Columns.Contains(column.ColumnName)
Add Data Column:
- DataTable: mergedDataTable
- Column Name: column.ColumnName
- DataType: column.DataType - For each column (column) in dt2
If Not mergedDataTable.Columns.Contains(column.ColumnName)
Add Data Column:
- DataTable: mergedDataTable
- Column Name: column.ColumnName
- DataType: column.DataType - Reorder Columns:
- DataTable: mergedDataTable
- Order: {columnA, columnB, columnC, columnD, columnE}
- Write Range (Output file path) // Input: mergedDataTable
Hi @SunnyJha
You can use the Join datatable activity, if there is any column which will be same in both datatables then this activity will works.
→ Drag and drop the Join Datatable activity.
→ Click on Join Wizard button, Pass the DT1 Variable in Input Data Table 1 and DT2 Variable in Input Data Table 2 field.
→ In the Column Table 1 and Column Table 2 give the column names which are common in both datatables.
→ In the Operation dropdown select the = option.
→ In the Join Type select the Inner option.
Check the below image for better understanding,
Hope it helps!!
As I mentioned there is no common column so Join datatable or merge datatable activity is not working.
I saw this on chatgpt, was a bit confusing so asked here. I will try this out though, thanks!
If possible share the Input data and expected output, then we can easily understand and provide the solution for your query… @SunnyJha
Hope you understand!!
Hi @SunnyJha ,
you can use LINQ to join two tables which have no common column.
->First read the excels to data tables ,dt1 & dt2
->Can use linq to add the joined data table value to data table dt3 using assign activity
(From row1 In dt1.AsEnumerable()
From row2 In dt2.AsEnumerable()
Select dt3.Rows.Add(row1.ItemArray.Concat(row2.ItemArray).ToArray())).CopyToDataTable()
From row1 In dt1.AsEnumerable()
: This part iterates over each row indt1
.From row2 In dt2.AsEnumerable()
: This part iterates over each row indt2
. Since it’s nested within the previous loop, it means that for each row indt1
, all rows indt2
are traversed.Select dt3.Rows.Add(row1.ItemArray.Concat(row2.ItemArray).ToArray())
: For each combination of rows fromdt1
anddt2
, this part creates a new row indt3
. It concatenates the values of the current rows (row1
androw2
) into a single array, and then adds this array as a new row todt3
.CopyToDataTable()
: This method converts the result of the LINQ query (which is an IEnumerable) to a DataTable (dt3
).
Okay @SunnyJha
You can try the below steps,
→ Use Read range workbook activity to read the dt1 sheet and store in a datatable called DT1.
→ Use Write range workbook activity to write the DT1 to merge sheet in same excel.
→ Use another Read range workbook activity to read the dt2 sheet and store in a datatable called DT2.
→ Use another write range workbook activity to write the DT2 to merge sheet, in the cell field give the C1
Check the below image for better understanding,
dt1 -
dt2 -
Merge -
Hope it helps!!
Hi @SunnyJha
Input:-
dt1:-
dt2:-
Output:-
dt1-
Xaml file:-
merge dt side by side forum.zip (3.7 KB)
If this works for you, please mark this as a solution, so others can refer the same.
Thanks
I am getting object reference not set to an instance of an object error in the assign activity where linq query is written. All 3 datatables used are defined, what should I check for?
Need to initialize the data table dt3.
Hi sneha,
Thanks for responding!
The example that I showed is much simpler than the usecase I am figuring out.
I have a file in which I am picking up some columns and then merging them as a single datatable.
I would need the solution to be more scalable and dynamic rather than doing a build datatable(which I figured out that I was missing the column names).
The column names needs to be picked from the dt1 and dt2 and should be a part of dt3.
->can use invoke code to add columns from dt1 and dt2 to dt3
Assign: dt3 = New DataTable()
For Each col1 In dt1.Columns.Cast(Of DataColumn)()
dt3.Columns.Add(New DataColumn(col1.ColumnName, col1.DataType))
Next
For Each col2 In dt2.Columns.Cast(Of DataColumn)()
If Not dt3.Columns.Contains(col2.ColumnName) Then
dt3.Columns.Add(New DataColumn(col2.ColumnName, col2.DataType))
End If
Next
->then can use linq to join
or we just do it on excel base with a range offset
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.