I agree with Recode ... but there are other options depending on your usage:
1. A script with If-Then-Else statements ... so you would have If C1=="1" Then "Horse" and so on. Even for 31, that can get cumbersome ... but possible. I will typically only use this for max of ~6 items.
2. LinkID / LinkReference table. I use this a ton - we run loads of experiments in our development line (I am a happy/busy statistician :) ) with condition keys on the parts we generate done as letters A-Z, and so on. When setting things up I will always have a core table before randomization with the condition in a column and the conditions in other columns. The COndition is made a LinkID
Since we do many tests, in the results we only use the Condition ID (A-Z) and any specific test information (e.g. where on a part we take the data), and then use LinkReference on the Condition in the results table to go back to the Experimental Conditions table. Incredibly powerful!
In your case you could simply have a column with 1-31, and a second column with the values Horse, Cat, Dog, etc. Then use the LinkIDReference feature to get at the values.