在您告诉我进行更多搜索并查看其他人的问题及其答案之前,请先阅读我的具体问题。
此处的大多数其他主题都涉及如何将 UTF-8 设为文本导入向导中的默认选项。但是,我完全不想使用文本导入向导。
我有 CSV 文件,想通过双击打开它们。Excel 会自动打开它们,但即使我使用 regedit 技巧使用 65001 (UTF-8) 作为默认编码,文件仍然无法正确显示。
有什么方法可以强制进行这种编码开幕一个文件,而不必进口它?
提前致谢
(使用美国英语的 Excel 2016,并且我的 Windows 7 区域配置设置为西班牙语(美国),我不知道这是否重要,但它实际上是为了处理默认逗号作为分隔符)
编辑以澄清:在执行注册表技巧强制使用 utf-8 进行导入后,打开 CSV 文件时其他语言的重音符号和字符仍会显示为奇怪的代码。但我没有导入(这个技巧在那里按预期工作);我直接打开文件。
答案1
您可以使用 PowerShell 脚本打开 CSV 文件并自动将其传递给 Excel。该脚本会默默使用 Excel 的文本导入方法,该方法可处理 UTF-8 编码,并且作为奖励,它始终将值视为文本
将此脚本的快捷方式放在您的发给Right click » SendTo » myScript
文件夹,以便您可以通过(简单方法)打开所有 CSV 文件
(或者)
您可以使用执行程序将脚本转换为可执行文件 (.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
) - 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 上运行,因为 PS2EXE 不支持 .NET 4.5 或更高版本。该程序可在装有 .NET 4.0 的 Windows 7 上运行
在我的第一次测试中,Excel 在尝试显示中文 UTF-8 字符时确实显示乱码。然而,在我的测试过程中,这种行为发生了变化,现在两种方法都可以正确处理 UTF-8。我不知道是什么原因造成的