Deaktivieren Sie die automatische Konvertierung in Datum

8

In einer Arbeitsmappe (von jemand anderem), die ich analysieren muss, verwenden sie eine Formel, um eine Liste von Strings zu erstellen: 04-09-01 , 04-09-02 , 04-09-03 usw., die general als Format haben. In einem Teil meines Codes muss ich diese Werte an anderer Stelle kopieren. Da diese Werte jedoch sehr speziell sind, werden sie automatisch als Date betrachtet (obwohl sie eindeutig keine Daten für Benutzer sind) und in 09/04/2001 , 09/04/2002 , 09/04/2003 usw. umgewandelt. Als Konsequenz die Werte werden vollständig geändert, und die Berechnung aufgrund dieser eingefügten Werte führt zu Fehlern.

Hier ist ein Testcode:

%Vor%

Das Ergebnis in der Konsole zeigt, dass die Werte vollständig geändert wurden:

Und in Excel zeigt es:

Beachten Sie, dass Excel selbst diese Werte NICHT systematisch in Daten umwandelt. Zum Beispiel, wenn wir Wert-kopieren nur 04-09-01 auf eine andere Zelle. Excel löst eine Warnung aus und schlägt vor, es in ein Datum zu konvertieren, aber Benutzer könnten diese Warnung ignorieren und 04-09-01 so beibehalten, wie sie ist:

Meine Frage ist also, gibt es eine Möglichkeit oder einen Workaround, um diese automatische Konvertierung in JavaScript-API zu deaktivieren, damit wir Werte treu kopieren können?

Bearbeiten 1:

Ich habe versucht, numberFormat zu verwenden, um die ursprünglichen Formate eines Bereichs beizubehalten. Zuerst setze ich A2:A0 wie folgt mit General als Format.

Dann führe ich den folgenden Code aus:

%Vor%

Das Ergebnis stellte sich wie folgt heraus und hat Date als Format.

Also hilft die Wiederherstellung von numberFormat nicht?

Bearbeiten 2: Ich habe ein Beispiel erstellt, das einen Bereich in einen anderen kopiert. Ich möchte r1 genau das gleiche Zahlenformat und Werte wie r0 haben. Aber das Ergebnis zeigt, dass 04-09-01 als general in r0 04/09/2001 als Date in r1 erzeugt. Das Problem ist also das gleiche wie im vorherigen Beispiel: numberFormat kann nicht originalgetreu kopiert oder wiederhergestellt werden.

%Vor%     
SoftTimur 06.07.2016, 13:18
quelle

2 Antworten

0

Sie können das Zahlenformat nachher kopieren, also vielleicht so etwas wie:

%Vor%     
Slai 08.07.2016, 22:08
quelle
4

Sie sollten in der Lage sein, eines von zwei Dingen zu tun:

1) Wenn Sie das Zahlenformat des Bereichs auf Text ("@") einstellen, BEVOR Sie die Werte anwenden, sollten die Werte unverändert bleiben.

2) Sie können auch ein Apostroph (') an den Anfang des Textes voranstellen, um Excel zu zwingen, es als einfachen Text zu behandeln, unabhängig davon, wie die interne Engine es normalerweise behandeln würde.

AKTUALISIEREN

Tatsächlich stehen hier zwei Dinge auf dem Spiel. Es gibt den angezeigten Text im Vergleich zum zugrunde liegenden Wert.

Um den Text zu erhalten, greifen Sie auf die Eigenschaft range.text (2D-Array) zu. Dies ist der Text, der in der Benutzeroberfläche angezeigt wird. Um den zugrunde liegenden Wert zu erhalten, greifen Sie auf die Eigenschaft range.values ​​(ebenfalls ein 2D-Array) zu

Wenn Sie Werte von einem Ort zu einem anderen kopieren oder speichern und dann wiederherstellen, müssen Sie sowohl range.numberFormat als auch range.values speichern. Und dann stellen Sie sie mit .numberFormat zuerst wieder her.

UPDATE 2

Siehe den Screenshot unten. Der Code funktioniert wie erwartet.

~ Michael Zlatkovsky, Entwickler auf Office Extensibility Platform, MSFT

    
quelle

Tags und Links