DB or from Excel
If it is from DB then we can achieve this using query in the database itself.
If it is from Excel, then append the excel before reading it for the third column then read it.
Don’t go for excel or DB , I want this manipulation on DataTable only.
Hi,
Check this link, they tried the similar stuff only.
The expected result is single column table with same three rows but two column merged into single column like (A1-b1, a2-b2, a3-b3)
Here is the solution:
Use Invoke method activity, assume my DT column names are ‘Entity’ and ‘AccountId’.
TargetObject: DT.Columns.Add(“FORMULA”, GetType(String), “[Entity]+[AccountId]”)
MethodName: SetOrdinal (Need to pass the ordinal value using argument)
Where FORMULA- my new column name(Concatenated columns)
SetOrdinal- new column ordinal position
Hi @VasuNaidu Thank you so much for taking the time sharing your solution. I was able to implement this.
P.S. Sorry I deleted my previous entry because I implemented it with a loop, but Invoke Method was so much better(performance wise).
Hi vasu…your solution worked if I build a data table set a variable and pass it…but if I read from excel store it in a data table and pass that…the columns are getting added …for example columnA:12001 columnB:1 my desired output is column C:120011 but IAM getting columnC:12002…please help…
In case someone is still interested. There is an easier way to achieve this.
Create a new variable “FORMULA” of type “System.Data.DataColumn” and use assign activity.
Formula = DT.Columns.Add(“FORMULA”, GetType(String), “[Entity]+[AccountId]”)
while we are resurecting posts, I’ll add that if the column already exists you can achieve the same result with:
DT.Columns("Formula").Expression = "`Entity` + `AccountId`"
but the original post asked for a new column
Hi @VasuNaidu
I used this method and everything is working fine but expression also added in the formula column name which only “Formula” name supposed to display.
Concatenating 2 columns A and B and saving it in Formula but it appears Formula+A+B
How to make sure only the column name “Formula” appears
This is Target Object = dt.columns.add(“Formula”, GetType(String), “[A]+[B]”)
Passing 2 as in argument for SetOrdinal method
Hi,
Actually, the DataColumn’s ColumnName
or Caption
are not changed but the write range activity seems to rely on DataColumn’s ToString
method to ouput its header and this will take first the DataColumn’s Expression
property if defined.
If you use the Output Data Table you’ll see different headers.
Use Log Message with the following, you’ll see:
DT.Columns(“Formula”).ToString
DT.Columns(“Formula”).Caption
DT.Columns(“Formula”).ColumnName
I don’t know if you can override the DataColumn’s ToString method in VB as a workaround. You might have to handle your headers by your own means.
I’m asking for a change in the post below: you should “vote” if this matter to you.
what if the column already exist? The column Formula?
How to do this?
Hello, sorry, I don’t understand your question. What are trying to do?
“How to concatenate two columns in datatable without looping and keep concatinated data in new column?” is the original question. Are you asking to apply the concatenation to an already existing column?
Hi @Caithlyn_Saturos ,
You could use the following:
With an Assign
activity, with DT
as your DataTable and "Formula"
as your DataColumn’s name. If you don’t have the DataColumn’s name, you might give its index as Integer instead. Entity
and AccountId
are the concatenated column names.
Hello @ValeriiaProtsko ,
I am trying to understand and implement this.
FORMULA is Column Variable I understand.
what is Formula? is that pointing to same Column Name?
ALso I needed a space in between the Entity and AccountId. How to achieve this?
thanks for that link but i need to add a space in between. How to do that?
dt1.Columns(“Name”).Expression = “[First Name] +”" “”+ [Last Name]"
Above gives error: Assign: Exception has been thrown by the target of an invocation.