The first thing to do is to see if there is another separator in there: it sound like you have 27 elements separated by "!", then an second set also separated by "!", then a third.
It would be normal under these circumstances to have a second separator to delimit each set:
1A!1B!...!1Z!1ZA|2A!2B!...
(often it's a newline to make it humanly readable.) So start by looking at your data and checking that. If you do, then it's simple: spilt it into each row via teh second separator, then split each row and add that:
string[] rows = ast.Split('|');
foreach (string row in rows)
{
string cells = row.Split('!');
}