it-swarm.com.de

Verhindert, dass Excel bestimmte Textwerte automatisch in Datumsangaben konvertiert

Weiß zufällig jemand, ob es ein Token gibt, das ich für ein bestimmtes Feld zu meiner CSV hinzufügen kann, damit Excel nicht versucht, es in ein Datum umzuwandeln?

Ich versuche, eine CSV-Datei aus meiner Anwendung zu schreiben, und einer der Werte sieht aus wie ein Datum, das Excel automatisch von Text in ein Datum konvertiert. Ich habe versucht, alle meine Textfelder (einschließlich desjenigen, das wie ein Datum aussieht) in doppelte Anführungszeichen zu setzen, aber das hat keine Wirkung.

488
user16324

Ich habe festgestellt, dass ein '=' vor den doppelten Anführungszeichen das bewirkt, was Sie wollen. Es erzwingt, dass die Daten Text sind.

z.B. = "2008-10-03", = "mehr Text"

EDIT (laut anderen Beiträgen) : wegen des von Jeffiekins gemeldeten Excel 2007-Fehlers sollte man das Lösungsvorschlag von Andrew : "=""2008-10-03"""

342
Jarod Elliott

Ich weiß, dass dies eine alte Frage ist, aber das Problem lässt nicht so schnell nach. CSV-Dateien lassen sich leicht aus den meisten Programmiersprachen generieren, sind eher klein, in kürzester Zeit mit einem einfachen Texteditor lesbar und allgegenwärtig.

Das Problem liegt nicht nur bei Datumsangaben in Textfeldern, sondern auch bei numerischen Angaben, die von Text in Zahlen umgewandelt werden. Einige Beispiele, bei denen dies problematisch ist:

  • Postleitzahlen
  • telefonnummern
  • regierungs-ID-Nummern

was manchmal kann mit einer oder mehreren Nullen (0) beginnen, die weggeworfen werden, wenn sie in numerische Werte umgewandelt werden. Oder der Wert enthält Zeichen, die mit mathematischen Operatoren verwechselt werden können (wie in Datumsangaben: /, -).

Zwei Fälle, bei denen ich mir vorstellen kann, dass die "prepending =" - Lösung, wie bereits erwähnt, möglicherweise nicht ideal ist

  • wo die Datei möglicherweise in ein anderes Programm als MS Excel importiert wird (mir fällt die Seriendruckfunktion von MS Word ein),
  • wo die Lesbarkeit wichtig sein könnte.

Mein Hack, um das zu umgehen

Wenn ein nicht numerisches und/oder nicht datiertes Zeichen im Wert vor-/angehängt wird, wird der Wert als Text erkannt und nicht konvertiert. Ein nicht druckbares Zeichen wäre gut, da es den angezeigten Wert nicht verändert. Das einfache alte Leerzeichen (\ s, ASCII 32) funktioniert jedoch nicht, da es von Excel abgeschnitten und der Wert dann immer noch konvertiert wird. Aber Es gibt verschiedene andere druckbare und nicht druckbare Leerzeichen, die gut funktionieren. Am einfachsten ist es jedoch, das einfache Tabulatorzeichen (\ t, ASCII 9) anzufügen (nachher einzufügen).

Vorteile dieses Ansatzes:

  • Erhältlich über die Tastatur oder mit einem leicht zu merkenden ASCII Code (9).
  • Es stört den Import nicht,
  • Normalerweise stört keine Seriendruckergebnisse (abhängig vom Vorlagenlayout - normalerweise wird jedoch nur ein breites Leerzeichen am Ende einer Zeile eingefügt). (Wenn dies jedoch ein Problem ist, schauen Sie sich andere Zeichen an, z. B. das Leerzeichen mit der Breite Null (ZWSP, Unicode U + 200B).
  • ist kein großes Hindernis beim Anzeigen der CSV in Notepad (etc),
  • und kann durch Suchen/Ersetzen in Excel (oder Notepad usw.) entfernt werden.
  • Sie müssen die CSV nicht importieren , sondern können einfach per Doppelklick die CSV in Excel öffnen .

Wenn Sie die Registerkarte nicht verwenden möchten, suchen Sie in einer Unicode-Tabelle nach einem anderen geeigneten Element.

Andere Option

es könnte sein, XML-Dateien zu generieren, für die ein bestimmtes Format auch von neueren MS Excel-Versionen für den Import akzeptiert wird und die viel mehr Optionen ähnlich dem .XLS-Format zulassen, aber ich habe keine Erfahrung damit.

Es gibt also verschiedene Möglichkeiten. Abhängig von Ihren Anforderungen/Ihrer Anwendung ist eine möglicherweise besser als eine andere.


Zusatz

Es muss gesagt werden, dass neuere Versionen (2013+) von MS Excel die CSV nicht mehr im Tabellenformat öffnen - ein weiterer Geschwindigkeitsschub im Workflow macht Excel weniger nützlich ... Zumindest gibt es Anweisungen, um das Problem zu umgehen. Siehe z. this Stackoverflow: Wie werden CSV-Dateien in Excel 2013 korrekt angezeigt? .

141
fr13d

An der Lösung von Jarod und dem von Jeffiekins angesprochenen Problem könnten Sie Änderungen vornehmen

"May 16, 2011"

zu

"=""May 16, 2011"""
99
Andrew Ferk

Ich hatte ein ähnliches Problem und dies ist die Problemumgehung, die mir geholfen hat, ohne den Inhalt der CSV-Datei zu bearbeiten:

Wenn Sie die Flexibilität haben, der Datei einen anderen Namen als ".csv" zu geben, können Sie sie mit der Erweiterung ".txt" benennen, z. B. "Myfile.txt" oder "Myfile.csv.txt". Wenn Sie es dann in Excel öffnen (nicht per Drag & Drop, sondern über Datei-> Öffnen oder die Liste der zuletzt verwendeten Dateien), erhalten Sie von Excel einen "Textimport-Assistenten".

Wählen Sie auf der ersten Seite des Assistenten "Getrennt" für den Dateityp.

Wählen Sie auf der zweiten Seite des Assistenten "," als Trennzeichen und wählen Sie außerdem den Textqualifizierer, wenn Sie Ihre Werte in Anführungszeichen gesetzt haben

Wählen Sie auf der dritten Seite jede Spalte einzeln aus und weisen Sie jeder den Typ "Text" anstelle von "Allgemein" zu, um zu verhindern, dass Excel mit Ihren Daten in Konflikt gerät.

Hoffe das hilft dir oder jemandem mit einem ähnlichen Problem!

63
rainerbit

WARNUNG: Excel '07 hat (zumindest) den Fehler a(nother): Wenn der Inhalt eines Feldes ein Komma enthält, wird das Feld = "field, contents" nicht korrekt analysiert, sondern stattdessen gesetzt alles nach dem Komma in das folgende Feld, unabhängig von den Anführungszeichen.

Die einzige Problemumgehung, die ich gefunden habe, besteht darin, das = zu entfernen, wenn der Feldinhalt ein Komma enthält.

Dies kann bedeuten, dass es einige Felder gibt, die in Excel nicht genau "richtig" dargestellt werden können, aber ich vertraue darauf, dass niemand zu überrascht ist.

27
Jeffiekins

Beim Erstellen des Strings, der in meine CSV-Datei in C # geschrieben werden soll, musste ich ihn folgendermaßen formatieren:

"=\"" + myVariable + "\""
20
Colin Pear

Öffnen Sie in Excel 2010 ein neues Blatt. Klicken Sie in der Multifunktionsleiste auf "Externe Daten aus Text abrufen". Wählen Sie Ihre CSV-Datei aus und klicken Sie auf "Öffnen". Weiter klicken". Deaktivieren Sie "Tab", setzen Sie ein Häkchen neben "Komma" und klicken Sie auf "Weiter". Klicken Sie irgendwo auf die erste Spalte. Ziehen Sie bei gedrückter Umschalttaste den Schieberegler über das Feld, bis Sie in die letzte Spalte klicken können, und lassen Sie die Umschalttaste los. Klicken Sie auf das Optionsfeld "Text" und dann auf "Fertig stellen".

Alle Spalten werden wie in der CSV-Datei als Text importiert.

15
Rob Stockley

Immer noch ein Problem in der Microsoft Office 2016-Version, das für diejenigen von uns, die mit Gennamen wie MARC1, MARCH1, SEPT1 usw. arbeiten, eher störend ist. Die Lösung, die ich nach dem Generieren einer ".csv" -Datei in R für die praktischste befunden habe Das wird dann für Excel-Benutzer geöffnet/freigegeben:

  1. Öffne die CSV-Datei als Text (Editor)
  2. Kopieren Sie es (Strg + a, Strg + c).
  3. Einfügen in ein neues Excel-Arbeitsblatt - alles wird in einer Spalte als lange Textzeichenfolgen eingefügt.
  4. Wählen Sie diese Spalte aus.
  5. Gehen Sie zu Daten- "Text in Spalten ...", wählen Sie im geöffneten Fenster "Getrennt" (weiter). Vergewissern Sie sich, dass "Komma" markiert ist (Markierung zeigt bereits die Trennung der Daten in Spalten unten an) (Weiter). In diesem Fenster können Sie die gewünschte Spalte auswählen und als Text markieren (anstatt allgemein) (Fertig stellen).

HTH

Hier ist die einfache Methode, die wir hier verwenden, wenn wir die CSV-Datei generieren. Sie ändert die Werte ein wenig, sodass sie nicht für alle Anwendungen geeignet ist:

Stellen Sie allen Werten in der CSV ein Leerzeichen voran

Dieser Bereich wird von Excel von Zahlen wie "1", "2.3" und "-2.9e4" entfernt, bleibt jedoch an Daten wie "01/10/1993" und Booleschen Werten wie "TRUE" erhalten, sodass sie nicht mehr konvertiert werden Excel interne Datentypen.

Es verhindert auch, dass beim Einlesen doppelte Anführungszeichen in Anführungszeichen gesetzt werden. Eine narrensichere Möglichkeit, Text in einer CSV-Datei unverändert zu lassen, besteht darin, ihn mit doppelten Anführungszeichen zu umgeben UND der gesamten Zeichenfolge ein Leerzeichen voranzustellen. dh (mit einfachen Anführungszeichen, um zu zeigen, was Sie eingeben würden) "3.1415". Dann haben Sie in Excel immer die ursprüngliche Zeichenfolge, außer dass sie in doppelte Anführungszeichen eingeschlossen und mit einem Leerzeichen versehen ist, sodass Sie diese in Formeln usw. berücksichtigen müssen.

10
Dan

Dies ist eine einzige Möglichkeit, wie ich dies erreichen kann, ohne in der Datei selbst herumzuspielen. Wie bei Excel üblich, lernte ich dies, indem ich stundenlang meinen Kopf auf den Schreibtisch schlug.

Ändern Sie die CSV-Dateierweiterung in TXT. Dadurch wird Excel daran gehindert, die Datei beim Öffnen automatisch zu konvertieren. So geht's: Öffnen Sie Excel zu einem leeren Arbeitsblatt, schließen Sie das leere Blatt und wählen Sie dann Datei => Öffnen und Ihre Datei mit der Erweiterung .txt aus. Dadurch wird Excel gezwungen, den "Textimport-Assistenten" zu öffnen, in dem Sie gefragt werden, wie die Datei interpretiert werden soll. Zuerst wählen Sie Ihr Trennzeichen (Komma, Tab, usw.), dann (hier ist der wichtige Teil) wählen Sie eine Reihe von Spalten und wählen Sie die Formatierung. Wenn Sie genau wissen möchten, was in der Datei enthalten ist, wählen Sie "Text", und Excel zeigt nur den Abstand zwischen den Trennzeichen an.

8
Chris

(Angenommen, Excel 2003 ...)

Bei Verwendung der Option Text in Spalten Wizard können Sie in Schritt 3 den Datentyp für jede der Spalten festlegen. Klicken Sie in der Vorschau auf die Spalte und ändern Sie die Spalte "Allgemein" in "Text".

8
DocMax

2018

Die einzig richtige Lösung, die für mich funktioniert hat (und auch ohne die CSV zu verändern).

Excel 2010:

  1. Erstellen Sie eine neue Arbeitsmappe
  2. Daten> Aus Text> Wählen Sie Ihre CSV-Datei aus
  3. Wählen Sie im Popup das Optionsfeld "Getrennt" und klicken Sie auf "Weiter>".
  4. Kontrollkästchen für Trennzeichen: Aktivieren Sie nur "Komma" und deaktivieren Sie die anderen Optionen. Klicken Sie dann auf "Weiter>".
  5. Scrollen Sie in der "Datenvorschau" ganz nach rechts, halten Sie die Umschalttaste gedrückt und klicken Sie auf die letzte Spalte (dadurch werden alle Spalten ausgewählt). Wählen Sie nun im "Spaltendatenformat" das Optionsfeld "Text" und klicken Sie auf "Fertig stellen".

Excel office365: (Client-Version)

  1. Erstellen Sie eine neue Arbeitsmappe
  2. Daten> Aus Text/CSV> Wählen Sie Ihre CSV-Datei aus
  3. Datentyperkennung> nicht erkennen

Anmerkung: Excel office365 (Webversion), während ich dies schreibe, werden Sie das nicht können.

6
evilReiko

Keine der hier angebotenen Lösungen ist eine gute Lösung. Dies kann in Einzelfällen funktionieren, aber nur, wenn Sie die endgültige Anzeige steuern können. Nehmen Sie mein Beispiel: Aus meiner Arbeit geht eine Liste der Produkte hervor, die sie an den Einzelhandel verkaufen. Dies ist im CSV-Format und enthält Teilecodes, von denen einige mit Nullen beginnen, die vom Hersteller festgelegt wurden (nicht unter unserer Kontrolle). Wenn Sie die führenden Nullen entfernen, stimmen Sie möglicherweise mit einem anderen Produkt überein. Privatkunden möchten die Liste im CSV-Format, da Back-End-Verarbeitungsprogramme außerhalb unserer Kontrolle und je nach Kunde unterschiedlich sind. Daher können wir das Format der CSV-Dateien nicht ändern. Kein vorangestelltes '=' oder hinzugefügte Tabulatoren. Die Daten in den unformatierten CSV-Dateien sind korrekt. Wenn Kunden diese Dateien in Excel öffnen, beginnen die Probleme. Und viele Kunden sind nicht wirklich mit Computern vertraut. Sie können so gut wie einen E-Mail-Anhang öffnen und speichern. Wir denken darüber nach, die Daten in zwei leicht unterschiedlichen Formaten bereitzustellen: eines als Excel-freundlich (unter Verwendung der oben vorgeschlagenen Optionen durch Hinzufügen eines Tabulators, das andere als „Master“. Dies kann jedoch wünschenswert sein, da einige Kunden nicht verstehen, warum Wir müssen dies tun. In der Zwischenzeit werden wir weiterhin erklären, warum sie manchmal "falsche" Daten in ihren Arbeitsblättern sehen. Bis Microsoft eine ordnungsgemäße Änderung vornimmt, sehe ich keine ordnungsgemäße Lösung dafür, solange man keine Kontrolle darüber hat, wie Endbenutzer benutze die Dateien.

4
mljm

(Excel 2007 und höher)

So erzwingen Sie, dass Excel Datumsformate nicht "erkennt", ohne die Quelldatei zu bearbeiten

Entweder:

  • benennen Sie die Datei in .txt um
  • Wenn dies nicht möglich ist, erstellen Sie eine neue Arbeitsmappe, anstatt die CSV-Datei direkt in Excel zu öffnen, und gehen Sie zu
    Data > Get external data > From Text
    und wählen Sie Ihre CSV.

In beiden Fällen erhalten Sie Importoptionen. Wählen Sie einfach jede Spalte mit Datumsangaben aus und weisen Sie Excel an, als "Text" und nicht als "Allgemein" zu formatieren.

4
Some_Guy

Aus diesem Grund habe ich vor jedem CSV-Wert Folgendes hinzugefügt: "=" "und nach jedem CSV-Wert ein Anführungszeichen, bevor ich die Datei in Excel öffne. Nehmen Sie zum Beispiel die folgenden Werte:

012345,00198475

Diese sollten vor dem Öffnen in Excel folgendermaßen geändert werden:

"="""012345","="""00198475"

Anschließend wird jeder Zellenwert in Excel als Formel angezeigt und daher nicht als Zahl, Datum usw. formatiert. Der Wert 012345 lautet beispielsweise:

="012345"
3
ChrisB

Ich bin in dieser Woche auf diese Konvention gestoßen, die ein ausgezeichneter Ansatz zu sein scheint, aber ich kann sie nirgendwo finden, auf die verwiesen wird. Kennt sich jemand damit aus? Können Sie eine Quelle dafür angeben? Ich habe nicht stundenlang gesucht, aber ich hoffe, dass jemand diesen Ansatz erkennt.

Beispiel 1: = ("012345678905") wird als 12345678905 angezeigt

Beispiel 2: = ("1954-12-12") zeigt 1954-12-12 an, nicht 12/12/1954.

3
GW4

Hallo, ich habe das gleiche Problem,

Ich schreibe dieses vbscipt, um eine andere CSV-Datei zu erstellen. Die neue CSV-Datei enthält in jedem Feld ein Leerzeichen, sodass Excel es als Text versteht.

Also erstellen Sie eine .vbs-Datei mit dem folgenden Code (zum Beispiel Modify_CSV.vbs), speichern und schließen Sie sie. Drag and Drop Ihre Originaldatei in Ihre VBScript-Datei. Es wird eine neue Datei mit "SPACE_ADDED" zum Dateinamen am selben Ort erstellt.

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing
2
Harry Duong

Ohne Änderung Ihrer CSV-Datei können Sie:

  1. Ändern Sie die Option Excel Format Cells in "Text"
  2. Verwenden Sie dann den "Textimport-Assistenten", um die CSV-Zellen zu definieren.
  3. Einmal importiert, lösche diese Daten
  4. dann einfach als Klartext einfügen

Excel formatiert und trennt Ihre CSV-Zellen ordnungsgemäß als Text, wobei die automatischen Datumsformate ignoriert werden.

Ein bisschen albern, aber es ist besser, die CSV-Daten vor dem Import zu ändern. Andy Baird und Richard sind dieser Methode irgendwie entgangen, haben aber ein paar wichtige Schritte verpasst.

2
cliffclof

Es ist nicht das Excel. Windows erkennt die Formel, die Daten als Datum und korrigiert sie automatisch. Sie müssen die Windows-Einstellungen ändern.

"Systemsteuerung" (-> "Zur klassischen Ansicht wechseln") -> "Regions- und Sprachoptionen" -> Registerkarte "Regionsoptionen" -> "Anpassen ..." -> Registerkarte "Zahlen" -> Und dann die Symbole ändern nach dem was du willst.

http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

Es funktioniert auf Ihrem Computer. Wenn diese Einstellungen nicht geändert werden, z. B. auf dem Computer Ihrer Kunden, werden statt Daten Datumsangaben angezeigt.

2
syandras

Problemumgehung mit Google Drive (oder Numbers, wenn Sie einen Mac verwenden):

  1. Öffnen Sie die Daten in Excel
  2. Stellen Sie das Format der Spalte mit falschen Daten auf Text ein (Format> Zellen> Zahl> Text).
  3. Laden Sie die CSV-Datei in Google Drive und öffnen Sie sie mit Google Sheets
  4. Kopieren Sie die fehlerhafte Spalte
  5. Spalte als Text in Excel einfügen (Bearbeiten> Inhalte einfügen> Text)

Wenn Sie sich für Schritt 3 auf einem Mac befinden, können Sie die Daten auch in Numbers öffnen.

1
Derek Hill

(Excel 2016 und höher habe ich eigentlich in älteren Versionen nicht ausprobiert)

  1. Neue leere Seite öffnen
  2. Gehen Sie zum Tab "Daten"
  3. Klicken Sie auf "From Text/CSV" und wählen Sie Ihre CSV-Datei
  4. Überprüfen Sie in der Vorschau, ob Ihre Daten korrekt sind.
  5. Wenn eine Spalte in ein Datum konvertiert wird, klicken Sie auf "Bearbeiten" und wählen Sie den Typ "Text" aus, indem Sie auf "Kalender" im Kopf der Spalte klicken
  6. Klicken Sie auf "Schließen & Laden"
1
Roman Yakoviv

In meinem Fall wurde "Sept8" in einer mit R generierten CSV-Datei von Excel 2013 in "8-Sept" konvertiert. Das Problem wurde durch Verwendung der Funktion write.xlsx2 () im Paket xlsx zum Generieren der Ausgabedatei im Format xlsx behoben , die von Excel ohne unerwünschte Konvertierung geladen werden können. Wenn Sie also eine CSV-Datei erhalten, können Sie versuchen, diese in R zu laden und mit der Funktion write.xlsx2 () in xlsx zu konvertieren.

1
Dinghai Zheng

Ich weiß, dass dies ein alter Thread ist. Für diejenigen wie mich, die dieses Problem bei der Verwendung von Office 2013 über das Powershell-COM-Objekt noch haben, kann die Methode opentext verwendet werden. Das Problem ist, dass diese Methode viele Argumente hat, die sich manchmal gegenseitig ausschließen. Um dieses Problem zu beheben, können Sie die in dieser Beitrag eingeführte Methode invoke-namedparameter verwenden. Ein Beispiel wäre

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

Leider habe ich gerade herausgefunden, dass diese Methode die CSV-Analyse irgendwie unterbricht, wenn Zellen Zeilenumbrüche enthalten. Dies wird von csv unterstützt, aber die Implementierung von Microsoft scheint fehlerhaft zu sein. Auch deutsche Sonderzeichen wurden irgendwie nicht erkannt. Die richtige Kultur hat dieses Verhalten nicht verändert. Alle Dateien (CSV und Skript) werden mit UTF8-Codierung gespeichert. Zuerst habe ich den folgenden Code geschrieben, um die CSV-Datei Zelle für Zelle einzufügen.

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

Aber das ist extrem langsam, weshalb ich nach einer Alternative gesucht habe. Anscheinend können Sie in Excel die Werte eines Zellbereichs mit einer Matrix festlegen. Also habe ich den Algorithmus in diesem Blog verwendet, um die CSV in ein Multiarray umzuwandeln.

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true

    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

Sie können den obigen Code so verwenden, wie er alle CSVs in Excel konvertieren soll. Ändern Sie einfach den Pfad zur CSV und das Trennzeichen am unteren Rand.

1
flatbeat

Okay, ich habe eine einfache Möglichkeit gefunden, dies in Excel 2003 bis 2007 zu tun. Öffnen Sie eine leere xls-Arbeitsmappe. Gehen Sie dann zum Menü Daten, importieren Sie externe Daten. Wählen Sie Ihre CSV-Datei. Gehen Sie durch den Assistenten und wählen Sie dann unter "Spaltendatenformat" eine Spalte aus, für die "Text" erforderlich ist. Dadurch wird die gesamte Spalte als Textformat importiert, sodass Excel nicht versuchen kann, bestimmte Zellen als Datum zu behandeln.

0
Richard

EINFACHSTE LÖSUNG Ich habe das heute gerade herausgefunden.

  • In Word öffnen
  • Ersetzen Sie alle Bindestriche durch Bindestriche
  • Speichern und schließen
  • In Excel öffnen

Nachdem Sie die Bearbeitung abgeschlossen haben, können Sie sie jederzeit wieder in Word öffnen, um die Bindestriche wieder durch Bindestriche zu ersetzen.

0
Randy Hoffman

Tabelle in Word einfügen. Führen Sie ein Suchen/Ersetzen durch und ändern Sie alle - (Bindestriche) in - (Doppelstrich). Kopieren Sie sie und fügen Sie sie in Excel ein. Kann dasselbe für andere Symbole (/) usw. tun. Wenn Sie in Excel wieder zu einem Bindestrich wechseln müssen, formatieren Sie die Spalte einfach in Text und nehmen Sie die Änderung vor. Hoffe das hilft.

0
Guest

Dieses Problem ist in Mac Office 2011 und Office 2013 immer noch vorhanden. Ich kann dies nicht verhindern. Es scheint so eine grundlegende Sache.

In meinem Fall hatte ich Werte wie "1 - 2" & "7 - 12" in der CSV, die korrekt in Anführungszeichen eingeschlossen waren. Dies wird automatisch in ein Datum in Excel konvertiert, wenn Sie versuchen, es anschließend in einfachen Text umzuwandeln, den Sie erhalten würden eine Zahlendarstellung des Datums wie 43768. Außerdem werden große Zahlen in Barcodes und EAN-Nummern in 123E + -Nummern umformatiert, die nicht zurückkonvertiert werden können.

Ich habe festgestellt, dass Google Sheets von Google Drive die Zahlen nicht in Datumsangaben konvertiert. Die Barcodes enthalten alle 3 Zeichen Kommas, die sich jedoch leicht entfernen lassen. Es verarbeitet CSVs sehr gut, besonders wenn es sich um MAC/Windows-CSVs handelt.

Könnte irgendwann jemanden retten.

0
EricNo7

Ich mache das für Kreditkartennummern, die immer wieder in wissenschaftliche Notation umgewandelt werden: Ich importiere meine .csv-Datei in Google Sheets. Mit den Importoptionen können Sie jetzt die automatische Formatierung numerischer Werte deaktivieren. Ich setze alle vertraulichen Spalten auf Nur-Text und lade sie als xlsx herunter.

Es ist ein schrecklicher Workflow, aber zumindest bleiben meine Werte so, wie sie sein sollten.

0
Brendonwbrown

Ich habe dieses VBA-Makro erstellt, das im Grunde den Ausgabebereich als Text formatiert, bevor die Zahlen eingefügt werden. Funktioniert perfekt für mich, wenn ich Werte wie 8/11, 23/6, 1/3 usw. einfügen möchte, ohne dass Excel sie als Datum interpretiert.

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup

Columns(ActiveCell.Column).NumberFormat = "@"

Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

Ich bin sehr daran interessiert zu wissen, ob dies auch für andere Menschen funktioniert. Ich habe eine Weile nach einer Lösung für dieses Problem gesucht, aber ich habe noch nie eine schnelle VBA-Lösung dafür gesehen, bei der nicht 'vor dem Eingabetext eingefügt wurde. Dieser Code behält die Daten in ihrer ursprünglichen Form.

0
LarsS