Speichern in Excel Tabelle auf SD Karte

Hallo,

folgendes Problem.

Wenn ich mit dem Uno auf mein SD Karten Modul in eine Excel Tabelle schreibe, ändert er die Formatierung bei Temperaturen <10°C im Format auf ein Datum um. Ist die Temperatur >10°C wird der Wert korrekt mit einem Punkt und zwei Dezimalstellen abgespeichert.

Hat jemand eine Idee?
Hier mal ein Ausschnit aus meinem Code. Das Setup und eine die Funktion zum Messen der Temperatur habe ich mal für die Übersichtlichkeit weggelassen.

Im Serial Monitor sind die Temperaturen übrigens richtig dargestellt. Die Ausgabe des String Line ist auch korrekt.

line = "28.01.2020;16:42:00;23.50;3.25"

//RTC DS1307
#include "RTClib.h"
//TempSensor DS18B20
#include <OneWire.h> 
#include <DallasTemperature.h>
//SD SPI Modul 
#include <SD.h>
//OLED
#include <SPI.h>
#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiAvrI2c.h"
// 0X3C+SA0 - 0x3C or 0x3D
#define I2C_ADDRESS 0x3C
// Define proper RST_PIN if required.
#define RST_PIN -1
SSD1306AsciiAvrI2c oled;
   
RTC_DS1307 rtc;

const int chipSelect = 10;
 
#define ONE_WIRE_BUS 3
#define DS18B20_Aufloesung 11
DeviceAddress DS18B20_Adressen;
 
OneWire oneWire(ONE_WIRE_BUS); 
DallasTemperature myDS18B20(&oneWire); 
#define Anzahl_Sensoren_DS18B20  2 // Anzahl der angeschlossenen Sensoren - Mögliche Werte: '0','1','2'
 
const float No_Val = 999.99;
float Temperatur[2] = {No_Val,No_Val}; 

char rtctime[20];
char rtcdate[20];

unsigned long WRITE_INTERVAL = 0; // 5 Minuten
unsigned long lastWrite = WRITE_INTERVAL;
unsigned long lastWritesec = 9; //10 Sekunden


void saveToSD(String line) { 
  
          oled.setRow(3);
          oled.set1X();
          oled.println("write to SD");
            
          File dataFile = SD.open("datalog.csv", FILE_WRITE);
           
          //Schreibe Datum / Temp - Werte auf die SD Karte wenn Datei offen
          if (dataFile) {    
            Serial.println(line);
            dataFile.println(line);
            dataFile.close();
            Serial.println("SD beschrieben");
            oled.setRow(3);
            oled.set1X();
            oled.println("           ");
              }    
              else {
                Serial.println("error opening TempDataLog.csv");
                oled.setRow(3);
                oled.set1X();
                oled.println("Error TempDataLog.csv");                
              }
  }


void loop() {

      //RTC abrufen
      DateTime now = rtc.now();
      //String aus RTC Daten basteln   
      sprintf( rtcdate, "%02hhu.%02hhu.%04hhu", now.day(), now.month(), now.year() );
      sprintf( rtctime, "%02hhu:%02hhu:%02hhu", now.hour(), now.minute(), now.second() );
  
      // Ausgabe Uhrzeit auf OLED
      oled.setRow(0);
      oled.set1X();
      oled.print(rtcdate);
      oled.print("  ");
      oled.println(rtctime);
               
      // Aller 10sec die Temperatur messen
      if (now.second() - lastWritesec > 9) {
           lastWritesec = now.second();
           measureTemp();
       }

      // Aller 5 Minuten die Daten auf die SD Karte schreiben
      if (now.minute() - lastWrite > WRITE_INTERVAL) {
           String line = String(rtcdate) + ";" + String(rtctime) + ";" + String(Temperatur[0]) + ";" + String(Temperatur[1]);
           Serial.println(String(Temperatur[0]));
           Serial.println(String(Temperatur[1]));
           Serial.println(line);
           
           saveToSD(line);
           lastWrite = now.minute();
       }

}

Nicht der Arduni baut Mist, sondern dein Excel beim Import der Ta belle.

zwieblum:
Nicht der Arduni baut Mist, sondern dein Excel beim Import der Ta belle.

Wie soll ich es denn öffnen bzw. die Daten importieren? Würde ungern mit einer txt arbeiten.

Wie sieht denn eine Zeile aus, die in Excel falsch dargestellt wird?

Gruß Tommy

das CSV nicht mit einem Doppelklick öffnen sondern
in einem Leeren Excel-Sheet - auf Daten - Aus Text -
getrennt
Semikolon (oder was auch immer)

und dann bei der betreffenden Spalte festlegen das Zahlen sind (und nicht ein Datum).

Tommy56:
Wie sieht denn eine Zeile aus, die in Excel falsch dargestellt wird?

Gruß Tommy

zwieblum:
Nicht der Arduni baut Mist, sondern dein Excel beim Import der Ta belle.

Du hast Recht. Öffne ich die csv mit dem texteditor sind die Werte richtig gespeichert. Gibt es jetzt allerdings eine Möglichkeit, dass ich die Werte ohne diesen Umweg in Excel öffnen kann?

Format im Textedit: 28.01.2020;16:39:42;23.63;3.25
Format im Excel: 28.01.20 16:39:42 23.63 Mär 25

noiasca:
das CSV nicht mit einem Doppelklick öffnen sondern
in einem Leeren Excel-Sheet - auf Daten - Aus Text -
getrennt
Semikolon (oder was auch immer)

und dann bei der betreffenden Spalte festlegen das Zahlen sind (und nicht ein Datum).

Das hatte ich versucht. Ich habe eine Excel Tabelle auf der SD erstellt und die entsprechenden Temp. Spalten in das Format Zahl mit 2 Dezimalstellen gebracht. Leider hat er es dann trotzdem immer wieder in ein Datum formatiert. Wahrscheinlich muss ich wirklich die Datei, wie von dir beschrieben, über Datei öffnen und dann als csv importieren. Dann kann ich doch beim speichern aber auch gleich das txt Format verwenden oder nicht?

csv ist eine Textdatei.

Gruß Tommy

Tommy56:
csv ist eine Textdatei.

Gruß Tommy

Danke für den Hinweis :slight_smile: Das stimmt, dann gibt es wohl keinen trivialen Weg außer den von noiasca beschriebenen.

Doch. Ich habe es gerade mit Libreoffice versucht, da funktioniert es.

Gruß Tommy

Oder du schreibst dir dafür ein Makro in Excel.

So wie die ganzen aktuellen Schadprogramme in die Systeme kommen, würde ich keine Macros in MS-Office aktivieren wollen.

Gruß Tommy

Tommy56:
So wie die ganzen aktuellen Schadprogramme in die Systeme kommen, würde ich keine Macros in MS-Office aktivieren wollen.

Gruß Tommy

Naja.....das kann man so oder so sehen.
Ich habe Jahrelang für meinen Brötchengeber Makros in Word und Excel geschrieben und auf den Rechnern gab es nie Probleme.
Dafür gab es Probleme an anderen Rechnern, die keine Makros drauf hatten.

Meist sitzen die "Probleme" vor den Rechnern.

Hi

Das Problem sind nicht die Makros, Die von Dir kommen - das Problem sind auch nicht direkt die fremden Makros - nur Das, was diese Makros dann anstellen, ist vll. weniger so erwünscht, wie bei Deinen.

Das Problem ist (wie überall), wenn fremder Code OHNE PRÜFUNG/PARSEN ausgeführt wird.
Und wenn ich das fremde Makro erst analysieren will, kann ich's mir auch gerade selber zusammen tippen und weiß, was ich habe.
Dann ist's aber blöd, mit fremden Sachen.
Trotzdem hat Es durchaus Seine Berechtigung, User-Eingaben (was hier fremdem Code entspricht) NIE UND NIMMER direkt auszuführen.

MfG

Genau und deshalb sollte man Macros erst mal generell nicht aktivieren.
Es gibt ja gangbare Lösungen ohne Macros für das Problem des TO: Libreoffice oder gezielter Import.

Gruß Tommy