2011-07-05 00:01:28 +0000 2011-07-05 00:01:28 +0000
69
69

Wie kann ich Excel so einstellen, dass immer alle Spalten von CSV-Dateien als Text importiert werden?

Obwohl ich versuche, es zu vermeiden, muss ich gelegentlich eine CSV-Datei in Excel öffnen. Wenn ich das tue, formatiert es Spalten, die Zahlen enthalten, was sie für meine Zwecke unbrauchbar macht. Soweit ich weiß, ist die einzige Möglichkeit, dies beim Import zu verhindern, die Datei so umzubenennen, dass die Erweiterung nicht .csv lautet, und den Importassistenten zu verwenden, um das Format jeder Spalte einzeln festzulegen. Bei Dateien mit 50-60 Spalten ist dies nicht praktikabel.

Da jede Antwort auf diese oft gestellte Frage im Internet entweder eine Möglichkeit vorschlägt, die formatierten Zahlen zurück zu konvertieren, sobald die Datei geöffnet ist (was für mich nicht funktionieren wird - ich möchte das allgemeine Problem lösen, nicht ein paar spezielle Fälle) oder den Formattyp jeder Spalte manuell auszuwählen (was ich nicht tun möchte), suche ich nach einer Möglichkeit, eine globale Voreinstellung oder einen Stil zu setzen, so dass alle Spalten aller geöffneten CSV-Dateien immer als Text formatiert werden. Ich weiß auch, wie man die Zahlen mit Anführungszeichen “panzert”, aber die Dateien, die ich bekomme, kommen nicht so daher, und ich hatte gehofft, dass ich die Dateien nicht vorverarbeiten muss, damit Excel sie nicht versaut.

Gibt es eine Möglichkeit, speziell dies zu tun: Alle Spalten in geöffneten CSV-Dateien immer als Text zu formatieren, ohne jedes Mal beim Import jede Spalte manuell auszuwählen?

Ich verwende Excel 2003, aber ich nehme auch Antworten für 2007, wenn Sie das wissen.

Risposte (9)

73
73
73
2013-01-04 01:38:39 +0000

So öffnen Sie CSVs in Excel

Guter Weg

  • Excel → Daten → Externe Daten holen → Alle Spalten mit Shift markieren und Text wählen

Schlechter Weg

  • Öffnen Sie eine CSV mit Doppelklick oder dem Öffnen mit Dialog von Excel

Guter Weg (für VBA)

  • Verwenden Sie QueryTables (das VBA-Gegenstück zu Get external data) → Beispielcode

Schlechter Weg (für VBA)

Zusätzliche Methoden

  • Wenn Sie Zugriff auf die Quelle haben, die Ihre CSV erstellt, können Sie die CSV-Syntax ändern.
    Schließen Sie jeden Wert mit doppelten Anführungszeichen ein und stellen Sie ein Gleichheitszeichen voran wie ="00001" oder stellen Sie jedem Wert einen Tabulator voran. Beide Möglichkeiten zwingen Excel, den Wert als Text zu behandeln

  • Öffnen Sie die CSV in Notepad und fügen Sie alle Werte per Copy&Paste in Excel ein. Verwenden Sie dann Daten - Text in Spalten Downside: Text in Spalten zum Ändern von Spaltenformaten von allgemein zurück zu Text erzeugt inkonsistente Ergebnisse. Wenn ein Wert ein von Zeichen umgebenes - enthält (z. B. “=E1-S1”), versucht Excel, diesen Wert in mehrere Spalten aufzuteilen. Werte, die sich rechts von dieser Zelle befinden, werden möglicherweise überschrieben (Das Verhalten von Text in Spalten wurde irgendwo zwischen Excel 2007 und 2013 geändert, so dass es nicht mehr funktioniert)


Excel Add-In, um CSVs zu öffnen und alle Werte als Text zu importieren

Dies ist ein Excel Plug-In, um CSV-Import-Aktionen zu vereinfachen.
Der Hauptvorteil: Es ist eine Ein-Klick-Lösung und verwendet QueryTables, die gleiche kugelsichere Methode hinter Get external data

  • Es fügt einen neuen Menübefehl zu Excel hinzu, mit dem Sie CSV- und TXT-Dateien importieren können. Alle Werte werden in das aktive Blatt importiert, beginnend bei der aktuell ausgewählten Zelle
  • Das Excel-Add-In ist für alle Office-Versionen unter Windows und Mac verfügbar
  • Das gesamte Add-In besteht aus nur 35 Zeilen Code. Schauen Sie sich den kommentierten Quellcode an, wenn Sie neugierig sind
  • Das verwendete CSV-Listen-Trennzeichen (Komma oder Semikolon) wird von Ihren lokalen Excel-Einstellungen übernommen
  • Die Kodierung ist auf UTF-8 eingestellt

Installation

  1. Laden Sie das Add-In herunter und speichern Sie es in Ihrem Add-Ins Ordner: %appdata%\Microsoft\AddIns
  2. Öffnen Sie Excel und aktivieren Sie das Add-In: File tab → Options → Add-Ins → Go To und wählen Sie ImportCSV.xla
  3. Aktivieren Sie VBA-Makros: File tab → Options → Trust Center → Trust Center Settings → Macro Settings → Enable all macros
  4. Starten Sie Excel neu

Sie werden einen neuen Menüleisteneintrag namens “Add-Ins” bemerken, und Sie können diese Schaltfläche verwenden, um Ihre CSV-Dateien schnell zu öffnen, ohne das Dialogfeld “Importieren” zu öffnen


PowerShell-Skript zum Öffnen von CSVs direkt aus Windows Explorer

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

  1. 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()
    }
}
  1. Speichern Sie es irgendwo wie C:\my\folder\myScript.ps1. (Beachten Sie die Erweiterung .ps1)
  2. Öffnen Sie Ihren sendto-Ordner über WinR “ shell:sendto ” Geben Sie
  3. Erstellen Sie eine neue Verknüpfung über Rechtsklick “ Neu ” Verknüpfung und fügen Sie diese Zeile ein. Vergessen Sie nicht, den Pfad zu ändern, in dem Sie Ihr Skript abgelegt haben. Benennen Sie die Verknüpfung, z. B. Excel

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

Jetzt können Sie (mehrere) CSVs auswählen und in Excel über Right-click » SendTo » Excel öffnen

7
7
7
2011-07-06 19:13:20 +0000

Dies funktioniert:

Sub OpenCsvAsText(ByVal strFilepath As String)

    Dim intFileNo As Integer
    Dim iCol As Long
    Dim nCol As Long
    Dim strLine As String
    Dim varColumnFormat As Variant
    Dim varTemp As Variant

    '// Read first line of file to figure out how many columns there are
    intFileNo = FreeFile()
    Open strFilepath For Input As #intFileNo
    Line Input #intFileNo, strLine
    Close #intFileNo
    varTemp = Split(strLine, ",")
    nCol = UBound(varTemp) + 1

    '// Prepare description of column format
    ReDim varColumnFormat(0 To nCol - 1)
    For iCol = 1 To nCol
        varColumnFormat(iCol - 1) = Array(iCol, xlTextFormat)
        ' What's this? See VBA help for OpenText method (FieldInfo argument).
    Next iCol

    '// Open the file using the specified column formats
    Workbooks.OpenText _
            Filename:=strFilepath, _
            DataType:=xlDelimited, _
            ConsecutiveDelimiter:=False, Comma:=True, _
            FieldInfo:=varColumnFormat

End Sub

Verwendung:

OpenCsvAsText "C:\MyDir\MyFile.txt"

Komma-getrennte Datei ist jetzt als Excel-Tabelle geöffnet, wobei alle Spalten als Text formatiert sind.

Beachten Sie, dass @Wetmelons Assistentenlösung sehr gut funktioniert, aber wenn Sie viele Dateien öffnen, werden Sie vielleicht, wie ich, müde, jedes Mal zur Spalte 60 zu scrollen, um sie mit Shift-Klick zu öffnen.

EDIT @GSerg schreibt im Kommentar unten, dass dies “nicht funktioniert” und “Leerzeichen und führende Nullen frisst”. Ich zitiere einfach den Kommentar zur Frage, der anschaulicher ist:

Aus unbekannten Gründen ignoriert Excel es, selbst wenn Sie in VBA explizit Formate für alle Spalten angeben, wenn die Dateierweiterung CSV ist. Sobald Sie die Erweiterung ändern, liefert derselbe Code die richtigen Ergebnisse.

Der obige Code “funktioniert” also, wird aber von diesem lächerlichen Excel-Verhalten erschlagen. Wie auch immer Sie es anstellen, Sie müssen die Erweiterung in etwas anderes als “.csv” ändern, sorry! Danach sind Sie wieder frei.

4
4
4
2013-01-03 22:42:44 +0000

Der Vorschlag von Wetmelon funktioniert (auch mit .CSV), wenn Sie Folgendes tun:

  1. Öffnen Sie Excel in einer leeren Arbeitsmappe oder einem leeren Arbeitsblatt
  2. Klicken Sie auf Daten > [Externe Daten holen] aus Text
  3. Verwenden Sie den “Textimport-Assistenten”, wie von Wetmelon beschrieben (Komma getrennt, erste Spalte auswählen, SHIFT+CLICK auf die letzte Spalte, alles auf Text setzen).

Ich weiß, es sind mehr Schritte, aber zumindest kann ich auf diese Weise CSVs öffnen, ohne die Erweiterung ändern zu müssen

2
2
2
2015-12-02 14:21:59 +0000

Achtung!

Bei Verwendung der manuellen Methode “Excel → Daten → Externe Daten holen → Alle Spalten markieren und Text wählen”……

Dadurch werden nur die Spalten auf Text gesetzt, “die Daten in der ersten Zeile haben” (typischerweise eine Kopfzeile). Dieser Assistent zeigt Ihnen nicht die Spalten weiter rechts an, die weiter unten, aber nicht in der ersten Zeile, Daten haben könnten. Beispiel:

Zeile1Zeile1, Zeile1Zeile2, Zeile1Zeile3

Zeile2Zeile1, Zeile2Zeile2, Zeile2Zeile3, Zeile2Zeile4

Sie werden Spalte 4 im Import-Assistenten nie sehen, sodass Sie nicht die Möglichkeit haben, sie vor dem Importieren vom allgemeinen Format in das Textformat zu ändern!!!!

1
1
1
2015-12-04 09:21:54 +0000

Hier ist die alternative Prozedur zum oben geposteten Code von Jean-François Corbett

Diese Prozedur importiert eine csv-Datei in Excel mit allen Spalten als Text formatiert

Public Sub ImportCSVAsText()
    Dim TempWorkbook As Workbook
    Dim TempWorksheet As Worksheet
    Dim ColumnCount As Integer
    Dim FileName As Variant
    Dim ColumnArray() As Integer

    'Get the file name
    FileName = Application.GetOpenFilename(FileFilter:="All Files (*.*),*.*", FilterIndex:=1, Title:="Select the CSV file", MultiSelect:=False)

    If FileName = False Then Exit Sub

    Application.ScreenUpdating = False

    'Open the file temporarily to get the count of columns
    Set TempWorkbook = Workbooks.Open(FileName)
    ColumnCount = TempWorkbook.Sheets(1).Range("A1").SpecialCells(xlCellTypeLastCell).Column
    TempWorkbook.Close SaveChanges:=False

    'Resize the array to number of columns
    ReDim ColumnArray(1 To ColumnCount)

    For i = 1 To ColumnCount
        ColumnArray(i) = xlTextFormat
    Next i

    Set TempWorkbook = Workbooks.Add
    Set TempWorksheet = TempWorkbook.Sheets(1)

    Application.DisplayAlerts = False
    TempWorkbook.Sheets(2).Delete
    TempWorkbook.Sheets(2).Delete
    Application.DisplayAlerts = True

    With TempWorksheet.QueryTables.Add("TEXT;" & FileName, TempWorksheet.Cells(1, 1))
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1251
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = ColumnArray
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With

End Sub
0
0
0
2011-07-05 01:20:26 +0000

Wenn Sie immer die gleichen Daten importieren (konstantes Datensatzformat, Layout usw.), können Sie ein Access-Makro mit einer Import-Spezifikation schreiben und die Daten dann wieder in Excel ausgeben. Das habe ich schon einige Male gemacht. Der andere Weg, den ich beschritten habe, ist die Verwendung von VBA und das Einlesen der Daten in das Arbeitsblatt, einen Datensatz nach dem anderen, und das Parsen der Daten beim Lesen. Soweit ich weiß, gibt es keine Möglichkeit, ein Standardformat während des Imports in Excel einzustellen, und selbst wenn man es könnte, würde es Probleme mit dem nächsten Dateityp verursachen, den man versucht zu analysieren.

0
0
0
2011-07-05 17:29:47 +0000

Wie gewünscht, reiche ich meinen Kommentar als Antwort ein (mit ein paar zusätzlichen Informationen):

Hey Scripting Guy hat einen Blogartikel über CSV in Excel importieren geschrieben, der einige nützliche Informationen für Sie enthalten könnte. Wenn Sie mit dem Datenobjekt in der Powershell spielen, können Sie möglicherweise erreichen, was Sie wollen.

Obwohl der Artikel ausdrücklich nur das Importieren der Daten in die Zellen erwähnt, was das Zahlenformat belassen kann, kann es möglich sein, mit einigen der Excel-ComObject-Eigenschaften und -Methoden herumzuspielen, um die Daten zu zwingen, die Zellen stattdessen als Rohtext einzugeben (oder die Formatierung der Zellen in Text vor oder nach dem Import zu erzwingen).

0
0
0
2011-07-06 19:45:53 +0000

Aus unbekannten Gründen, auch wenn Sie explizit Formate für alle Spalten angeben, ignoriert Excel diese, wenn die Dateierweiterung CSV lautet.

Einige Optionen:

  • Erstellen Sie eine Abfrage, um die Daten zu importieren, wie Wetmelon vorschlägt .
    Nachteil: Auf einem 64-Bit-Rechner fehlen Ihnen möglicherweise CSV-Datenbanktreiber.

  • Verwenden Sie Jeans Code , aber beziehen Sie das Kopieren der Datei in einen temporären Ordner und das Ändern der Erweiterung der Kopie ein.
    Nachteil: Keine Verknüpfung mit der Originaldatei (beim Speichern wird die Kopie überschrieben); Sie müssen die Kopie anschließend manuell löschen. Sie können jedoch manuell über die Original-CSV speichern.

  • Öffnen Sie die CSV in Notepad, Strg+A, Strg+C, einfügen in Excel, dann Daten - Text in Spalten, dann kommt der übliche Assistent, wo Sie alle Spalten in einem Rutsch auf Text setzen können. Das ist ein anderer Geschmack als die vorherige Option, weil es auch die wertvolle Erweiterung von Excel versteckt.
    Nachteil: manuell.

  • Sie haben eine sehr einfache VBA-Schleife, die die gesamte Datei in den Speicher einliest und zellenweise in das Blatt einfügt.
    Nachteil: langsamer, hässlich.

-2
-2
-2
2013-03-12 21:37:27 +0000

Wenn ich die Frage richtig verstehe, ist dies leicht mit der Option Transponieren in Paste-Special zu lösen, wie hier beschrieben.