This "always returning 'A1' as the current cell" irked me for an entire day, until I found the solution within a different answer here:
Google App Script getActiveSheet returns leftmost sheet, not active sheet.
The key is here:
All previous calls to get objects must have used active. For eg, To get active range, You should have first got active spreadsheet => active sheet => active range(the chain of active objects). If any of the calls is not to the active object(say if you used getSheetByName() instead of getActiveSheet() in the middle step), the final call is likely to default to the default object(First sheet A1).
Hence the solution is to use this:
var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
NOT this:
var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
You're welcome.