Прежде чем вы скажете мне поискать еще и посмотреть вопросы и ответы других людей, прочтите мой точный вопрос.
Большинство других тем здесь посвящены тому, как сделать 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 правильно. Я понятия не имею, что вызвало это