Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Daten nach Excel

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.12.2005, 13:20 Uhr
~Icho Tolot
Gast


Hallo Leute
Ich habe nach dem Muster von Uwe eine Anwendung programmiert,
um Werte in einer Excel-Mappe zu übertragen.
Das ganze klappt ganz gut.
Es gibt aber ein Problem mit der Excel-Mappe.
Die Werte die in der Excel-Mappe gespeichert werden, sind alle
mit einem Apostroph vorangestellt. z. B.('125)
Mit diesen Werten kann mein Anwender keine Diagramme in Excel erstellen.
Kann man dieses Apostroph irgentwie verhindern?
Zur Zeit speicher ich die Werte in einer Textdatei und importiere
diese Textdatei nacher in die leere Excel-Mappe.
Da klappt es dann wie gewünscht mit den Diagrammen.
Ist halt für den Anwender sehr umständlich.

Danke im voraus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.12.2005, 13:22 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du hast die wahrscheinlich als text in die zellen geschrieben, dann macht excel ein ' davor (kommentarzeichen) wenn du als zahl in die zellen schreibst, sollten ganz normal zahlen drin stehen (ohne ')
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.12.2005, 18:29 Uhr
~Icho Tolot
Gast


OK
Stimmt.

Werde meinen Code umschreiben.

Habe noch eine andere Frage.

Ist es möglich, für ein Dialogfeld mehrere Konfigurationen zu erstellen?
Die ich dann per Knopfdruck im Dialogfeld verändern kann.
Z.B. Verschiedene Eingabemasken.
Geht das, oder muss für jede Maske ein eigenes Dialogfeld erstellt werden?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.12.2005, 20:16 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
wenn sich nicht gerade mal z.B. die Formularüberschrift ändert, bist Du meist besser dran ein neues Formular zu gestalten.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.12.2005, 14:22 Uhr
~Icho Tolot
Gast


Hallo,
Für das Excel speichern habe ich den Code umgeschrieben.
Ich möchte im wechsel einmal Text und einal Zahlen speichern.
Geht das so im Wechsel?

C++:
void CAuswertung::ExcelDateiSchreiben(CString DateiPfad)
{
    CDatabase database;
    CString Treiber = "MICROSOFT EXCEL DRIVER (*.XLS)";
    CString Sql;
    CString FrBoTitel;
    CString Wert1,Wert2;
    CString Dummy = "";
    CString Fragen = "Frage1";
    int iWert1,iWert2;
    FrBoTitel = "Titel";
    
    TRY
    {
        Sql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s", Treiber,DateiPfad,DateiPfad);
        if( database.OpenEx(Sql,CDatabase::noOdbcDialog) )
        {
            
            Sql = "CREATE TABLE Beispiel2 (Fragebogentitel Text,Fragen Text,Wert1 Text,Wert2 Text)";
            database.ExecuteSQL(Sql);
            
            Sql.Format("INSERT INTO Beispiel2 (Fragebogentitel,Fragen,Wert1,Wert2) VALUES ('%s','%s','%s','%s');","" ,Dummy , Dummy, Dummy );
            database.ExecuteSQL(Sql);

            Sql.Format("INSERT INTO Beispiel2 (Fragebogentitel,Fragen,Wert1,Wert2) VALUES ('%s','%s','%s','%s');", FrBoTitel, "", "","" );
            database.ExecuteSQL(Sql);

            //ab hier soll in Number umgestellt werden
            //aber hier springt das Programm in den catch Teil
            Sql = "CREATE TABLE Beispiel2 (Fragebogentitel Text,Fragen Text,IWert1 Number,IWert2 Number)";
            database.ExecuteSQL(Sql);
            Sql.Format("INSERT INTO Beispiel2 (Fragebogentitel,Fragen,IWert1,IWert2) VALUES ('%s','%s','%d','%d');", "", Fragen, iWert1,iWert2);
            database.ExecuteSQL(Sql);

        }      
        database.Close();
    }
    CATCH_ALL(e)
    {
        TRACE1("Treiber nicht installiert: %s",Treiber);
    }
    END_CATCH_ALL;
}


Wenn nicht, ist auch nicht schlimm.
Speicher dann das Ganze wie in einer Textdatei, aber mit der Endung .xls
Dann wird beim öffnen in Excel automatisch eine Konfertierung vorgenommen.

Gruss Tolotos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.12.2005, 15:51 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
ohne Prüfung:
Sql = "CREATE TABLE Beispiel2 ...
"es kann nur eine(n) geben", sprich Beispiel2 2 existiert schon. Ich denke mal das dann bei .ExecuteSql(...) der Fehler geworfen wird.
Dann durfte es noch "scheppern" weil iWert1 und iWert2 mit keinem Wert belegt ist.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 21.12.2005 um 15:59 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.12.2005, 18:13 Uhr
~Icho Tolot
Gast


Hallo,
Habe CREATE TABLE Beispiel3 zusätzlich definiert.

C++:
void CAuswertung::ExcelDateiSchreiben(CString DateiPfad)
{
    CDatabase database;
    CString Treiber = "MICROSOFT EXCEL DRIVER (*.XLS)";
    CString Sql;
    CString FrBoTitel;
    CString Wert1,Wert2;
    CString Dummy = "";
    CString Fragen = "Frage1";
    int iWert1 = 1,iWert2 = 2;
    FrBoTitel = "Titel";
    
    TRY
    {
        Sql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s", Treiber,DateiPfad,DateiPfad);
        if( database.OpenEx(Sql,CDatabase::noOdbcDialog) )
        {

            
            Sql = "CREATE TABLE Beispiel2 (Fragebogentitel Text,Fragen Text,Wert1 Text,Wert2 Text)";
            database.ExecuteSQL(Sql);
            
            Sql.Format("INSERT INTO Beispiel2 (Fragebogentitel,Fragen,Wert1,Wert2) VALUES ('%s','%s','%s','%s');","" ,Dummy , Dummy, Dummy );
            database.ExecuteSQL(Sql);

            Sql.Format("INSERT INTO Beispiel2 (Fragebogentitel,Fragen,Wert1,Wert2) VALUES ('%s','%s','%s','%s');", FrBoTitel, "", "","" );
            database.ExecuteSQL(Sql);
            // Daten sind in Excel angekommen
            //ab hier soll in Number umgestellt werden
            //Programm läuft so korrekt weiter, aber es kommt in Excel nichts an
            Sql = "CREATE TABLE Beispiel3 (Fragebogentitel Text,Fragen Text,IWert1 Number,IWert2 Number)";
            database.ExecuteSQL(Sql);
            Sql.Format("INSERT INTO Beispiel3 (Fragebogentitel,Fragen,Wert1,Wert2) VALUES ('%s','%s','%d','%d');", "", Fragen, iWert1,iWert2);
            database.ExecuteSQL(Sql);

        }      
        database.Close();
    }
    CATCH_ALL(e)
    {
        TRACE1("Treiber nicht installiert: %s",Treiber);
    }
    END_CATCH_ALL;
}


Sieht so aus als wenn die Spalten nur einmal definiert werden können,
so wie in einer Datenbanktabelle. Da müssen die Spalten auch vordefiniert werden.

Wenn ich den Code für CREATE TABLE Beispiel2 auskommentiere, dann wird der untere
Teil in Excel gespeichert.

Gruss Tolotos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
22.12.2005, 07:58 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
das kann auch nicht funktionieren da, wie Du bereits geschrieben hast, die Felder doppelt vorkommen würden. "ALTER TABLE myTable MODIFY ...." greift hier auch nicht:

Zitat von M$:

ALTER TABLE Statement
When the Microsoft Access, dBASE, or Paradox driver is used, the ALTER TABLE statement is supported with add and drop table constraint definition clauses. (ALTER TABLE statements are not supported for the Microsoft Excel or Text drivers.)
....


Ein Feld in einer DB-Tabelle (etwas anderes ist in dem Fall das Excelsheet nicht) kann nicht mit 2 Datentypen belegt sein. Überdenk da nochmals die Struktur Deiner Tabelle. Alles andere ist nur ein Versuch Designfehler zu umgehen.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 22.12.2005 um 08:06 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
22.12.2005, 13:53 Uhr
~Icho Tolot
Gast


Hallo Uwe
Danke für die Info.
Habe es mir gedacht, dass das so nicht geht.
Könnte die Tabelle auch anders gestalten, aber dann geht halt das nicht.

+++ ++ + - -- ---
Frage1 2 4 1 5 6 2
Frage2 3 1 4 2 1 1

Das Ganze ist eine Auswertung von einem Fragebogen und soll so in Excel gespeichert werden.
Wenn ich die Spalten als Text definiere, dann funktioniert es gut,
aber dann stöhrt das Kommentarzeichen und die Zahlen können so nicht verwendet werden.
Es sei denn, man könnte das Kommentarzeichen umgehen.
Geht das?

Gruss Tolotos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: