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

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

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

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

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

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

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

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

EDIT для уточнения: акценты и символы из других языков по-прежнему отображаются как странные коды при открытии файла CSV после выполнения трюка с regedit по принудительному использованию utf-8 для импорта. Я не импортирую (там трюк работает, как и ожидалось); я открываю файл напрямую.

решение1

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

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

(или)

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

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

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

    • т.е. 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:\моя\папка\мойScript.ps1"

Сравнение

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

введите описание изображения здесь

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

введите описание изображения здесь


Замечания

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

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

Связанный контент