Во-первых, вы пишете данные в формате .csv (comma-separated values), а не .xls или .xlsx (это именно родные Excel-форматы, не CSV). Поэтому давайте имени файла расширение .csv.
Во-вторых, Excel (по крайней мере старые версии точно, старее 2015 или около того) читает CSV только в кодировке ОС, т.е. на русской Windows это CP1251 (как вы правильно заметили). Но! У CP1251 не может быть префикса BOM (EF BB BF) - это признак файла в кодировке UTF-8. Нельзя один файл кодировать одновременно как UTF-8 и CP1251. BOM в вашем случае нужно убрать, оставить только mb_convert_encoding().
Наконец, при записи данных полезно их оборачивать в кавычки, чтобы в результате было не имя;фамилия, а "имя";"фамилия" - это защитит их, если в значении будут спецсимволы. Хотя в вашем случае это точно не главная проблема, а проблема в расширении файла и кодировке.
хотя везде пишут что это проблема и нужны библиотеки специальные
Все правильно, пишут как раз про .xls/.xlsx, которые закрытые бинарные форматы от MS.
$text = '';
foreach ($arrayData as $key => $value) {
$text .= "\"$value\";\"$key\"\r\n"; // <<<
}
$files = fopen($_SERVER['DOCUMENT_ROOT']."/file_text.csv","w+b"); // <<<
//fwrite($files, "\xEF\xBB\xBF"); // <<<
$text = mb_convert_encoding($text,"windows-1251");
fwrite($files, $text);
fclose ($files);
Для примера код, где фамилия и имя разделены по столбцам и новая запись пишется в новой строке -
$text = '';
foreach ($arrayData as $key => $value) {
$text .= $value.'; '.$key.';'."\r\n";
}
$files = fopen($_SERVER['DOCUMENT_ROOT']."/file_text.xls","w+b");
fwrite($files, "\xEF\xBB\xBF");
$text = mb_convert_encoding($text,"windows-1251");
fwrite($files, $text);
fclose ($files);