Hi,
The cast from char to byte keeps the low part. That is, if your number is $ABCD, byte($ABCD) will return $CD. The UTF16 used in Delphi is Little-endian, so casting the char to a byte will work, as long as the characters are <= 127. For bigger characters, the only way is to use TEncoding since you can't cast an UTF16 char to a Windows 1252 ansi byte.
About the persistence I am not sure I understood exactly what you are doing. Can you post a more complete example? There should be no need to close and reopen the same file.
I've attached a simple example here:
As you can see, you can press the "open" button, then click many times in "read" and each read will read a new value from a new row. When you press close (or when you close the app) the XlsFile is destroyed.
About RTF, Excel has very basic RTF support: basically what you can do is to change the font of part of the cell. The simplest way to access it is with GetHtmlFromCell and SetCellFromHtml, if you can work with html. For example:
xlsin.SetCellFromHtml(row, col, 'Hello <b>world</b>');
Will enter the text "Hello world" into the cell at row, col.
If you can't use html, then FlexCel will return TRichStrings and you can set a TRcihString into a cell too. TRichStrings are strings with information for the font of the different sections on it.