Вы можете использовать скрипт 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)
- Старый способ: открывается двойным щелчком
замечания
PS2EXE не работает в Windows 10, поскольку .NET версии 4.5 или выше не поддерживается в PS2EXE. Программа работает на Windows 7 с .NET 4.0
В моих первых тестах Excel показывал тарабарщину при попытке отобразить китайские символы UTF-8. Однако во время моих тестов это поведение переключилось, и теперь оба метода обрабатывают UTF-8 правильно. Я понятия не имею, что вызвало это