Thank you for your comments.
I think I found at least a workaround to make it work. And this applies also to writing (Set Collection Field) as well.
Expanding my example below, let me specify more fields (ie. columns) like fTest, fTest1, fTest2, fTest3. Now, if I try to read a value from let's say (column) fTest2, row index 1, I get the error message as above, stating that a field named as the value in the first row (=index 0) in fTest2 does not exist.
Then the workaround:
In Initial values I add a row and type the field names as values like this:
(field name) fTest - fTest1 - fTest2 - fTest3
(1st row values) fTest - fTest1 - fTest2 - fTest3
And it works! Just as the error message said. Now the method can find the correct ""field name"". I tried to look at the actual code inside the method, but could not figure out why it's looking for the field name from the first (index=0) row, instead of the real field name above the data rows.