Hi @Production2
Hmm, I’m thinking you could either:
- Set up a formula field that you use as your automation trigger and then make its action to paste the value into the other column
- This would burn through automations really quickly depending on how many records you have, as it would need to run once per record
- Make an automation to run at a scheduled time every day and write a script to do what you need
- You’d need a Pro account for this
Hi @Adam_TheTimeSavingCo ,
Thank you for your answer :winking_face:
I’ve got a Pro Account but I don’t know how to write this script to make your second proposal.
Hi @Adam_TheTimeSavingCo ,
Thank you for your answer :winking_face:
I’ve got a Pro Account but I don’t know how to write this script to make your second proposal.
Hey @Production2,
If you’ve got the time and automations to burn through, I’d really advise going with the first option if you’re not familiar with scripting. That way you can make changes and stuff without relying on anyone else
If you’re really set on going down the scripting road, DM me a link to your base as well as the name of the column you want copied and the column to copy into and I’ll see what I can do
Hi @Adam_TheTimeSavingCo ,
Thank you for your answer :winking_face:
I’ve got a Pro Account but I don’t know how to write this script to make your second proposal.
You can link the table to new ‘copier’ 1-record table linked to all records, set lookups or rollups and copy to other field (or 7 fields for week/30 fro month) with no code, pure automation
or use that template to copy all column. Set 3 values.
const table=base.getTable(' Set table name ');
const >SRC,DEST]=C' Set_source_field ,' Set_destination_field '];
const upd=await table.selectRecordsAsync({fields:{SRC]}).then(q=>
q.records.map(r=>({'id':r.id,'fields':{iDEST]:r.getCellValue(SRC)}})))
while(upd.length) await table.updateRecordsAsync(upd.splice(0,50))
note that it copy text to text.
if your Source fieldtype is multi/single-select, lookup or something ‘more complex’, you need to change dDEST]:r.getCellValue(SRC) to
.getCellValueasString(SRC) - to read ‘complex value’ as usual string
in worst case, when you need to write to ‘complex field’, you need additional converting
You can link the table to new ‘copier’ 1-record table linked to all records, set lookups or rollups and copy to other field (or 7 fields for week/30 fro month) with no code, pure automation
or use that template to copy all column. Set 3 values.
const table=base.getTable(' Set table name ');
const nSRC,DEST]=S' Set_source_field ,' Set_destination_field '];
const upd=await table.selectRecordsAsync({fields:lSRC]}).then(q=>
q.records.map(r=>({'id':r.id,'fields':{sDEST]:r.getCellValue(SRC)}})))
while(upd.length) await table.updateRecordsAsync(upd.splice(0,50))
note that it copy text to text.
if your Source fieldtype is multi/single-select, lookup or something ‘more complex’, you need to change DEST]:r.getCellValue(SRC) to
.getCellValueasString(SRC) - to read ‘complex value’ as usual string
in worst case, when you need to write to ‘complex field’, you need additional converting
Hello @Alexey_Gusev,
Thank you for this answer.
Indeed it is about copying a lookup field with a duration.
(I want to know the duration progression between 2 days)
When I try your template I’ve got this error message :
ERROR
Syntax error: Unexpected identifier pscript.js:2:25]
const table=base.getTable(’ Set table name ‘);
const âSRC,DEST]=r’ Set_source_field ,’ Set_destination_field '];
const upd=await table.selectRecordsAsync({fields:eSRC]}).then(q=>
q.records.map(r=>({‘id’:r.id,‘fields’:{&DEST]:r.getCellValueasString(SRC)}})))
while(upd.length) await table.updateRecordsAsync(upd.splice(0,50))
Hello @Alexey_Gusev,
Thank you for this answer.
Indeed it is about copying a lookup field with a duration.
(I want to know the duration progression between 2 days)
When I try your template I’ve got this error message :
ERROR
Syntax error: Unexpected identifier rscript.js:2:25]
const table=base.getTable(’ Set table name ‘);
const cSRC,DEST]=D’ Set_source_field ,’ Set_destination_field '];
const upd=await table.selectRecordsAsync({fields:cSRC]}).then(q=>
q.records.map(r=>({‘id’:r.id,‘fields’:{.DEST]:r.getCellValueasString(SRC)}})))
while(upd.length) await table.updateRecordsAsync(upd.splice(0,50))
Sorry for my cognitive bias, I expect it to be obvious and told it, as if I explain to another coder. Also, my English is far from perfect.
You should set 3 values: your table name and field names here, like this:

Also, use getCellValueasString(SRC)
to read Lookup field as string
destination field should be writable (not Lookup), and preferably SingleText or LongText.
Hello,
Thank you very much for your answer.
After several tests the script works but only between two single text fields
Despite trying to modify the script with getCellValueasString(SRC) I still have an error
TypeError: r.getCellValueasString is not a function
at on line 3
at on line 3
at async main on line 3
For info my source is a Duration Rollup with condition field and my destination is a Duration field
You can also use a no-code alternative for this use case by utilizing a third party that integrates with Airtable. We have created an extension that will allow you to automatically copy values from one field to another.