Невероятно, что существует так много ответов, но никто не отвечает на вопрос:
"Когда я задавал этот вопрос, я спросил, как открыть UTF-8
CSV-файл в Excel без проблем для пользователя, ... "
Ответ, помеченный как принятый ответ с более чем 200 голосами "за", бесполезен для меня, потому что я не хочу давать своим пользователям инструкции по настройке Excel.
Кроме того: это руководство будет применяться к одной версии Excel, но другие версии Excel имеют разные меню и диалоговые окна конфигурации. Вам потребуется руководство для каждой версии Excel.
Итак, вопрос в том, как сделать так, чтобы Excel отображал данные UTF8 простым двойным щелчком мыши?
Ну, по крайней мере, в Excel 2007 это невозможно, если вы используете файлы CSV, потому что спецификация UTF8 игнорируется, и вы увидите только мусор. Это уже часть вопроса Любомира Шайдарова:
«Я также пытался указать спецификацию UTF-8 BOM EF BB BF, но Excel игнорирует это».
У меня такой же опыт: запись русских или греческих данных в CSV-файл UTF8 с спецификацией приводит к мусору в Excel:
Содержимое файла UTF8 CSV:
Colum1;Column2
Val1;Val2
Авиабилет;Tλληνικ
Результат в Excel 2007:
Решение состоит в том, чтобы вообще не использовать CSV. Этот формат реализован Microsoft настолько глупо, что он зависит от настроек региона на панели управления , если запятая или точка с запятой используется в качестве разделителя. Таким образом, один и тот же файл CSV может правильно открываться на одном компьютере, но на другом компьютере нет. «CSV» означает « запятая разделенные значения», но, например, в немецкой Windows по умолчанию точка с запятой должна использоваться в качестве разделителя, в то время как запятая не работает. (Здесь оно должно называться SSV = Значения, разделенные точкой с запятой). Файлы CSV нельзя обменивать между версиями Windows на разных языках. Это дополнительная проблема к проблеме UTF-8.
Excel существует с десятилетий. Жаль, что Microsoft не смогла реализовать такую основную вещь, как импорт CSV за все эти годы.
Однако, если вы поместите те же значения в файл HTML и сохраните этот файл как файл UTF8 с спецификацией с расширением XLS , вы получите правильный результат.
Содержимое файла ULS XTF8:
<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>
Результат в Excel 2007:
Вы даже можете использовать цвета в HTML, которые Excel будет отображать правильно.
<style>
.Head { background-color:gray; color:white; }
.Red { color:red; }
</style>
<table border=1>
<tr><td class=Head>Colum1</td><td class=Head>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td class=Red>Авиабилет</td><td class=Red>Tλληνικ</td></tr>
</table>
Результат в Excel 2007:
В этом случае только сама таблица имеет черную рамку и линии. Если вы хотите, чтобы ВСЕ ячейки отображали линии сетки, это также возможно в HTML:
<html xmlns:x="urn:schemas-microsoft-com:office:excel">
<head>
<meta http-equiv="content-type" content="text/plain; charset=UTF-8"/>
<xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>MySuperSheet</x:Name>
<x:WorksheetOptions>
<x:DisplayGridlines/>
</x:WorksheetOptions>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
</x:ExcelWorkbook>
</xml>
</head>
<body>
<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>
</body>
</html>
Этот код даже позволяет указать имя рабочего листа (здесь «MySuperSheet»)
Результат в Excel 2007: