Corrected length of the character fields like this:
Dbf1.FieldDefs.Add('ot', ftString, 45);
DBF works incorrectly with UTF8 so I added the line to set LanguageID to Russian:
And changed case like this (also added LazUTF8 in uses):
case cell^.ContentType of
cctUTF8String: f.AsString := UTF8ToWinCP(cell^.UTF8StringValue);
cctNumber: f.AsFloat := cell^.NumberValue;
cctDateTime: f.AsDateTime := cell^.DateTimeValue;
else f.AsString := UTF8ToWinCP(AWorksheet.ReadAsText(cell));
end;
As a result DBGrid show database incorrectly but now I can open the file in LibreOffice, FoxPro and other dbf viewers.