You can generate these IDs using a virtual layer
Run the grid tool as you currently do.
Go the the menu layer / add layer / add-edit virtual layer and enter the following query.
select *, char(r+64) || ROW_NUMBER() OVER(PARTITION BY r) as newID
from (
SELECT *,DENSE_RANK() OVER (ORDER BY round( ST_minY(geometry)/0.02) desc) as r
FROM Grid
ORDER BY round(ST_minY(geometry)/0.02) DESC,
round( ST_minX(geometry)/0.02) ASC
)
you can replace the layer name (Grid) with the true name. If you don't want to have the old id field and the new newID field, replace * by the list of field name from Grid you want.
The idea would be to order the row by Y, then to compute the dense_rank according to this 1st sort (i.e. all rows having the same value gets the same rank) to get the row number, then to generate a new cell number for each row and at last to convert the row number to a letter.
Let's note that it is highly probable that the X and Y coordinates should not be used directly, but rather with a small tolerance (that is, 2 points that are a micro-meter away from each other should be considered the same). Even if the points where created by a script, the storage model (floating point) could add noise to the coordinates.
In the query above, I have used a tolerance of 0.02 degrees. You will have to adjust this value for your data.
