Кодировка Microsoft Excel UTF-8 без импорта

1200
Nicolás Fernández Fioretti

Прежде чем вы скажете мне искать больше и посмотреть на вопросы других людей и их ответы, прочитайте мой точный вопрос.

Большинство других тем здесь посвящены тому, как сделать UTF-8 опцией по умолчанию в мастере импорта текста. Однако я бы хотел избежать использования мастера импорта текста вообще.

У меня есть файлы CSV, которые я хочу открыть двойным щелчком мыши. Excel открывает их автоматически, но даже если я использовал трюк regedit с использованием 65001 (UTF-8) в качестве кодировки по умолчанию, файлы по-прежнему отображаются неправильно.

Есть ли способ заставить эту кодировку открывать файл вместо того, чтобы импортировать его?

заранее спасибо

(при использовании Excel 2016 на американском английском, а моя региональная конфигурация Windows 7 установлена ​​на испанский (США), я не знаю, важно ли это, но на самом деле это было для работы с запятыми по умолчанию в качестве разделителей)

РЕДАКТИРОВАТЬ для пояснения: при открытии файла CSV акценты и символы других языков по-прежнему выглядят странными кодами после выполнения трюка regedit по форсированию utf-8 для импорта. Я не импортирую хотя (уловка работает как ожидалось там); Я открываю файл напрямую.

0

1 ответ на вопрос

0
nixda

Вы можете использовать скрипт PowerShell, чтобы открывать файлы CSV и автоматически передавать их в Excel. Скрипт молча использует метод импорта текста Excel, который обрабатывает кодировку UTF-8 и в качестве бонуса всегда рассматривает значения как текст

Поместите ярлык для этого скрипта в папку sendto, чтобы вы могли открыть все файлы CSV через Right click » SendTo » myScript(простой метод)

(или же)

Вы можете использовать PS2EXE для преобразования вашего скрипта в исполняемый файл (.exe). Теперь вы можете щелкнуть правой кнопкой мыши файл .csv и в разделе « Открыть с помощью » вы выбираете этот .exe в качестве программы по умолчанию для открытия файлов CSV (расширенный метод)

Что оно делает

  • Символы UTF-8 отображаются правильно
  • Можно открыть несколько файлов CSV. Сохраняет каждый CSV-контент как новый лист в той же книге
  • Все значения рассматриваются как чистый текст. Нет интерпретации от встроенного обработчика Excel CSV

    • то есть. 0001остается 0001и не конвертируется в1
    • то есть. -A122:23или =AZ1+32не интерпретируются как формула и остаются такими, какие они есть

Как пользоваться

  • Создайте новый текстовый файл и вставьте приведенный ниже скрипт. Комментируемую версию можно найти здесь
$CSVs = @() $args.ForEach({ If ((Test-Path $_) -and ($_ -Match ".csv$|.txt$")) { $CSVs += ,$_ }  })  if (-Not $null -eq $CSVs) {  $excel = New-Object -ComObject excel.application  $excel.visible = $true $excel.SheetsInNewWorkbook = $CSVs.Count  $workbook = $excel.Workbooks.Add()  for ($i=0; $i -lt $CSVs.Count; $i++){  $csv = Get-Item $CSVs[$i] $worksheet = $workbook.worksheets.Item($i + 1) $worksheet.Name = $csv.basename  $TxtConnector = ("TEXT;" + $csv.fullname) $Connector = $worksheet.QueryTables.add($TxtConnector,$worksheet.Range("A1")) $query = $worksheet.QueryTables.item($Connector.name) $query.TextFilePlatform = 65001 $query.TextFileTextQualifier = 1 $query.TextFileOtherDelimiter = $Excel.Application.International(5)  $query.TextFileParseType = 1 $arrFormats = ,2 * $worksheet.Cells.Columns.Count $query.TextFileColumnDataTypes = $arrFormats $query.AdjustColumnWidth = 1 $query.Refresh() $query.Delete() } } 

  • Сохраните это где-нибудь как C:\Tools\myScript.ps1. (Обратите внимание на расширение .ps1)
  • Откройте папку sendto через WinR» shell:sendto» Enter
  • Создайте новый ярлык с помощью правой кнопки мыши »Новый» Ярлык и вставьте эту строку. Не забудьте поменять путь на свой, куда вы положили свой скрипт

"% SystemRoot% \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe" -NoProfile -NonInteractive -WindowStyle Hidden -File "C: \ my \ folder \ myScript.ps1"

сравнение

  • Новый способ: открывается через скрипт (либо через sendto, либо через конвертируемый исполняемый файл PS2EXE)

enter image description here

  • Старый способ: открывается двойным щелчком

enter image description here


замечания

  • PS2EXE не работает в Windows 10, поскольку .NET версии 4.5 или выше не поддерживается в PS2EXE. Программа работает на Windows 7 с .NET 4.0

  • В моих первых тестах Excel показывал тарабарщину при попытке отобразить китайские символы UTF-8. Однако во время моих тестов это поведение переключилось, и теперь оба метода обрабатывают UTF-8 правильно. Я понятия не имею, что вызвало это

Спасибо @nixda Это выглядит потрясающе. Я не могу заставить это работать хотя. Я попробовал скрипт sendto, и хотя я следовал инструкциям, ничего не происходит. После того, как я щелкну правой кнопкой мыши -> sendto -> script, ничего не происходит. То, что кажется окном cmd, появляется на короткое время и исчезает, но Excel не запускается. Я также попробовал метод PS2EXE, но когда я запускаю сценарий, появляется сообщение «ВЕРСИЯ ПОЛОЖЕНИЯ НЕИЗВЕСТНА», которое, согласно файлу ps2exe.ps1 (открывается в блокноте), принадлежит `if ($ psversion -eq 0) Nicolás Fernández Fioretti 6 лет назад 0
@ NicolásFernándezFioretti [Может ли быть так, что вы не разрешили Windows выполнять скрипт Powershell?] (Https://superuser.com/questions/106360/how-to-enable-execution-of-powershell-scripts). Значение по умолчанию ограничено `. Проверьте это в PoewerShell с помощью `Get-ExecutionPolicy`. И при необходимости запустите PS как администратор и установите для него `set-executepolicy remotesigned` или` Set-ExecutionPolicy unrestricted` nixda 6 лет назад 0
Я использую корпоративный компьютер, поэтому у меня могут быть особые ограничения, о которых я не знаю. Я могу запустить powershell от имени администратора, и `get-executepolicy` возвращает` неограниченно`, но `set-executepolicy` говорит, что у меня нет доступа к изменению реестра. Я подозреваю, что даже если я щелкаю правой кнопкой мыши на PowerShell и выбираю «Запуск от имени администратора», я запускаю его как обычно, поскольку в строке заголовка окна PowerShell не отображается указание администратора. Nicolás Fernández Fioretti 6 лет назад 0
@ NicolásFernándezFioretti Чтобы увидеть, в чем проблема, попробуйте следующее: Откройте Powershell ISE (это редактор сборки) и вставьте в него вышеприведенный скрипт. Теперь добавьте в качестве первой строки этот `$ args =" C: \ my \ test.csv "`. Измените путь к существующему тестовому CSV на вашем диске. Это открывает Excel и импортирует CSV? nixda 6 лет назад 0
Оно работает! вставив скрипт в powershell и используя путь к файлу, открыл его с правильной обработкой для utf8. Я также снова попробовал метод «отправить», и он работал хорошо. Кажется, у меня проблемы с созданием .exe с помощью PS2EXE. Должен ли я обратиться за помощью в другом месте? Nicolás Fernández Fioretti 6 лет назад 0
@ NicolásFernándezFioretti Вполне возможно, что все исполняемые файлы, созданные с помощью PS2EXE, можно запускать только на компьютерах, где версия .NET не выше 4.0. Так что ошибка может быть не на вашей стороне nixda 6 лет назад 0
Что ж. Очень плохо. Просто из любопытства: почему так сложно сделать это с лучшим и самым популярным в мире редактором электронных таблиц? LibreOffice прекрасно справляется с CSV с UTF8 и не имеет проблем с точками с запятой и форматированием даты. Это не часто запрашиваемая функция? Nicolás Fernández Fioretti 6 лет назад 0
@ NicolásFernándezFioretti Да, это популярная функция - уже много лет. Посмотрите [этот старый, но популярный вопрос] (https://superuser.com/questions/307496/how-can-i-set-excel-to-always-import-all-columns-of-csv-files -по текст / 527894 # 527894) nixda 6 лет назад 0