UTF-8-Kodierung von Microsoft Excel ohne Import

1241
Nicolás Fernández Fioretti

Bevor Sie mir sagen, ich solle mehr suchen und die Fragen anderer Personen und ihre Antworten lesen, lesen Sie meine genaue Frage.

Die meisten anderen Themen hier behandeln, wie Sie UTF-8 als Standardoption im Textimport-Assistenten festlegen. Ich möchte jedoch unbedingt vermeiden, dass Sie den Textimport-Assistenten verwenden müssen.

Ich habe CSV-Dateien, die ich durch Doppelklick öffnen möchte. Excel öffnet sie automatisch, aber selbst wenn ich den Regedit-Trick der Verwendung von 65001 (UTF-8) als Standardcodierung durchgeführt habe, werden die Dateien immer noch nicht richtig angezeigt.

Gibt es eine Möglichkeit, diese Kodierung beim Öffnen einer Datei zu erzwingen, anstatt sie importieren zu müssen ?

Danke im Voraus

(Wenn Sie Excel 2016 in US-Englisch verwenden und die regionale Konfiguration von Windows 7 auf Spanisch (USA) gesetzt ist, weiß ich nicht, ob das wichtig ist, aber es war eigentlich für den Umgang mit Standardkommas als Trennzeichen gedacht.)

BEARBEITEN zur Verdeutlichung: Akzente und Zeichen aus anderen Sprachen erscheinen immer noch als seltsame Codes, wenn eine CSV-Datei geöffnet wird, nachdem der Regedit-Trick ausgeführt wurde, Utf-8 für den Import zu erzwingen. Ich importiere zwar nicht (der Trick funktioniert dort wie erwartet); Ich öffne die Datei direkt.

0

1 Antwort auf die Frage

0
nixda

Sie können ein PowerShell-Skript verwenden, um CSV-Dateien zu öffnen und automatisch an Excel zu übergeben. Das Skript verwendet im Hintergrund die Textimportmethode von Excel, die die UTF-8-Codierung behandelt und als Bonus Werte immer als Text behandelt

Fügen Sie eine Verknüpfung zu diesem Skript in Ihren sendto- Ordner ein, damit Sie alle CSV-Dateien über die Right click » SendTo » myScript(einfache Methode) öffnen können.

(oder)

Sie können PS2EXE verwenden, um Ihr Skript in eine ausführbare Datei (.exe) zu konvertieren. Jetzt können Sie mit der rechten Maustaste auf eine CSV-Datei klicken und unter " Öffnen mit " diese EXE-Datei als Standardprogramm zum Öffnen von CSV-Dateien auswählen (erweiterte Methode).

Was es macht

  • UTF-8-Zeichen werden korrekt angezeigt
  • Kann mehrere CSV-Dateien öffnen. Speichert jeden CSV-Inhalt als neues Arbeitsblatt in derselben Arbeitsmappe
  • Alle Werte werden als reiner Text behandelt. Keine Interpretation des Excel-Buildin-CSV-Handlers

    • dh. 0001bleibt 0001und wird nicht in konvertiert1
    • dh. -A122:23oder =AZ1+32werden nicht als Formel interpretiert und bleiben so wie sie sind

Wie benutzt man

  • Erstellen Sie eine neue Textdatei und fügen Sie das folgende Skript ein. Eine kommentierte Version finden Sie hier
$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() } } 

  • Speichern Sie es irgendwo C:\Tools\myScript.ps1. (Beachten Sie die Erweiterung .ps1)
  • Öffnen Sie Ihren sendto-Ordner über WinR» shell:sendto» Enter
  • Erstellen Sie eine neue Verknüpfung mit Rechtsklick »Neu» Verknüpfung und fügen Sie diese Zeile ein. Vergessen Sie nicht, den Pfad zu Ihrem eigenen Pfad zu ändern, in den Sie Ihr Skript gestellt haben

"% SystemRoot% \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe" -NoProfile -NonInteractive -WindowStyle Hidden-Datei "C: \ mein \ Ordner \ myScript.ps1"

Vergleich

  • Neuer Weg: Über Skript geöffnet (entweder über sendto oder PS2EXE-konvertierte ausführbare Datei)

enter image description here

  • Alte Art: Über Doppelklick geöffnet

enter image description here


Bemerkungen

  • PS2EXE wird nicht unter Windows 10 ausgeführt, da .NET Version 4.5 oder höher von PS2EXE nicht unterstützt wird. Das Programm arbeitet unter Windows 7 mit .NET 4.0

  • In meinen ersten Tests zeigte Excel bei dem Versuch, chinesische UTF-8-Zeichen anzuzeigen, Kauderwelsch. Während meines Tests hat sich dieses Verhalten jedoch geändert, und beide Methoden behandeln UTF-8 nun korrekt. Ich habe keine Ahnung, was das verursacht hat

Danke @nixda Das sieht nach einem erstaunlichen aus. Ich kann es aber nicht zum Laufen bringen. Ich habe das sendto-Skript ausprobiert, und obwohl ich die Anweisungen befolgt habe, passiert nichts. Nachdem ich mit der rechten Maustaste auf -> sendto -> script geklickt habe, passiert nichts. Was als Cmd-Fenster erscheint, erscheint sehr kurz und verschwindet, aber Excel läuft nicht. Ich habe auch die PS2EXE-Methode ausprobiert, aber als ich das Skript ausführte, erscheint die Meldung "THE POWERSHELL VERSION IS UNKNOWN", die laut der Datei ps2exe.ps1 (geöffnet im Editor) `if ($ psversion -eq 0) ` Nicolás Fernández Fioretti vor 6 Jahren 0
@ NicolásFernándezFioretti [Könnte es sein, dass Windows das Powershell-Skript nicht ausgeführt hat?] (Https://superuser.com/questions/106360/how-to-enable-execution-of-powershell-scripts) Der Standard ist eingeschränkt `. Überprüfen Sie es in PoewerShell mit "Get-ExecutionPolicy". Falls erforderlich, starten Sie PS als Administrator und setzen Sie es auf set-executionpolicy remotesigned oder Set-ExecutionPolicy unrestricted nixda vor 6 Jahren 0
Ich verwende einen Firmencomputer, daher kann ich besondere Einschränkungen haben, die mir nicht bekannt sind. Ich kann Powershell als Administrator ausführen, und "get-executionpolicy" gibt "unrestricted" zurück, aber "set-executionpolicy" gibt an, dass ich keinen Zugriff auf die Registrierung habe. Ich vermute, auch wenn ich mit der rechten Maustaste auf Powershell klicke und "Als Administrator ausführen" auswähle, wird es normal ausgeführt, da sich auf der Titelleiste des Powershell-Fensters keine Administratoranzeige befindet. Nicolás Fernández Fioretti vor 6 Jahren 0
@ NicolásFernándezFioretti Um herauszufinden, wo das Problem liegt, versuchen Sie Folgendes: Öffnen Sie Powershell ISE (das ist der Build-Editor) und fügen Sie das obige Skript ein. Fügen Sie nun als erste Zeile dieses $ args = "C: \ my \ test.csv" ein. Ändern Sie den Pfad zu einem vorhandenen Test-CSV auf Ihrer Festplatte. Öffnet es Excel und importiert das CSV? nixda vor 6 Jahren 0
Es klappt! Wenn Sie das Skript in Powershell einfügen und den Pfad zur Datei verwenden, wurde es mit der korrekten Behandlung für utf8 geöffnet. Ich habe auch wieder die "send to" -Methode ausprobiert, und es hat gut funktioniert. Ich habe Probleme, eine .exe mit PS2EXE zu erstellen. Soll ich anderswo um Hilfe bitten? Nicolás Fernández Fioretti vor 6 Jahren 0
@ NicolásFernándezFioretti Es kann sein, dass alle über PS2EXE erstellten ausführbaren Dateien nur auf Computern ausgeführt werden können, auf denen die .NET-Version nicht höher als 4.0 ist. Der Fehler liegt also vielleicht nicht auf Ihrer Seite nixda vor 6 Jahren 0
Gut. Schade. Nur aus Neugier: Warum ist es so schwer, dies mit dem besten und beliebtesten Tabelleneditor der Welt zu tun? LibreOffice verarbeitet CSV mit UTF8 perfekt und hat keine Probleme mit der Trennung von Semikola oder Datumsformatierung. Ist dies nicht eine häufig angeforderte Funktion? Nicolás Fernández Fioretti vor 6 Jahren 0
@ NicolásFernándezFioretti Ja, das ist schon seit vielen Jahren eine sehr gefragte Funktion. Schauen Sie sich diese alte, aber beliebte Frage an (https://superuser.com/questions/307496/how-can-i-set-excel-to-always-import-all-columns-of-csv-files) -als-text / 527894 # 527894) nixda vor 6 Jahren 0