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

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

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

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

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

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

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

1 ответ1

0

Вы можете использовать скрипт 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 через Win R » shell:sendto » Enter
  • Создайте новый ярлык с помощью правой кнопки мыши »Новый» Ярлык и вставьте эту строку. Не забудьте поменять путь на свой, куда вы положили свой скрипт

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

сравнение

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

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


замечания

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .