Excel Bearbeitung



  • 1. bitte benutz die Code-Tags
    2. willst du die Daten in Excel reinschreiben oder daraus lesen?
    -> Range.OlePropertyGet gibt etwas
    -> Range.OlePropertySet setzt etwas
    3. wie kommst du auf "Item"?
    4. der Fehler kommt durch die Übergabe des Strings, hier mußt du char übergeben -> siehe c_str()



  • Hallo,

    beim auslesen der Daten in Query->Fields->Fields[iCol]->AsString kommt der Variablentyp Fehler.
    Da meine Datenbank verschiedene Feldtypen aufweist ist iCol mal Integer und mal String. Gibt es hier eine universalFormel oder wie kann ich das regeln ????

    Rest funktioniert.

    mfg
    Traugott



  • Hallo,

    In TField::DataType steht der Typ drin. Wenn du den also nicht vorher weißt mache damit ein switch.



  • Hallo,

    habe ein switch gemacht.
    Boolean, DateTime und Integer liest er aus nur meine String Werte nicht.

    Warum nicht ???????

    Query1->First();
    
            for (int iRow=0; iRow <= Query1->RecordCount; iRow++)
            {
                for (int iCol = 0; iCol < Query1->Fields->Count; iCol++)
                {
                    Variant Range = WorkSheet.OlePropertyGet("Cells", iRow+1, iCol+1); // 1.Zeile / 1.Spalte
    
                    switch (iCol)
                    {
                    case 0:
                    case 14:
                    case 15:
                    case 16:
                    case 30:
                    case 31:
                    //case 149:
                    //case 150:
                      {
    
                      Range.OlePropertySet("Value", Query1->Fields->Fields[iCol]->AsInteger);
    
                      break;
                      }
    
                    case 11:
                    case 23:
                    case 24:
                    case 149:
                    case 151:
    
                      {
    
                      Range.OlePropertySet("Value", Query1->Fields->Fields[iCol]->AsDateTime);
    
                      break;
    
                      }
    
                    case 139:
                    case 140:
                    case 141:
                    case 142:
                    case 143:
                    case 144:
                    case 145:
                    case 146:
                    case 147:
                    case 160:
                    case 161:
                    case 162:
                    case 163:
                    case 164:
    
                      {
    
                      Range.OlePropertySet("Value", Query1->Fields->Fields[iCol]->AsBoolean);
    
                      break;
    
                      }
    
                      default:
                      {
    
                      Range.OlePropertySet("Value", Query1->Fields->Fields[iCol]->AsString);
    
                      break;
                      }
                    }
                    //Range.OlePropertySet("Value", Query1->Fields->Fields[iCol]->AsVariant);
                }
                Query1->Next();
            }
    
            ActiveWorkBook.OleFunction("SaveAs", "D:\\Temp\\QueryResult.xls");
        }
        catch(...)
        {
    
        }
    
        //Excel.OleFunction("Quit");
    
        Excel = Unassigned;
    

    mfg
    Traugott

    /Edit Bitte beachten : sfds



  • Linnea schrieb:

    4. der Fehler kommt durch die Übergabe des Strings, hier mußt du char übergeben -> siehe c_str()

    ich glaube Braunstein meinte nicht einen switch über die Spalten, sondern über den Datentyp der Feldwerte



  • Genau das meinte ich. 🙂



  • Hallo,

    mit dem Char geht es. (schwere Geburt)
    Was Kollege Braunstein allerdings mit dem switch über den Datentyp der Feldwerte meint wäre intesressant zu wissen.

    mfg
    traugott



  • Hallo,

    hab ja ganz vergessen mich ganz herzlich zu bedanken.
    Nochmals Vielen Dank !!!!!

    mfg
    Traugott



  • Funktionieren diese ganzen Ole-Methoden auch für Openoffice Calc?

    Und was ist eigentlich Query1?



  • @Traugott
    schau dir mal das Beispiel "ParamCount, DataType, StrToIntDef, AsXXX (Beispiel)" in der BCB-Hilfe an, dort wird switch über den DataType verwendet



  • Tobi3000 schrieb:

    Und was ist eigentlich Query1?

    Der Quelltext stammt doch von dir. Du solltest schon selber wissen wo das herkommt.
    Du hast wohl ein TQuery-Objekt auf deine Form platziert.



  • Das ist so nicht richtig.

    Ich will verstehen, wie dieses exportieren nach Excel funktioniert und hab im FAQ das eine Beispiel gefunden.
    Auch in diesem Thread ist recht detailiert erklärt wie das funktioniert.

    Nur ich hab in den Beispielen nie verstanden, was Query1 ist. ~~



  • dann tipp das Wort im BCB mal ein und drück F1, oder schau in der BCB-Hilfe nach TQuery



  • Hallo,
    nach meinem langen Hin und Her funktioniert ja jetzt mein Export.
    Beim Formatieren hätte ich noch eine Frage:

    die Druckvorschau rufe ich wie folgt auf:
    WorkSheet.OleFunction("PrintPreview");

    funktioniert.

    alle Spalten auf automatische Breite stellen (AutoFit) hab ich mein Problem:
    in Excel selbst gehts so: Format, Autoformat, Optionen, Breite/Höhe, OK
    habs mit

    WorkSheet.OleFunction("Columns"), OlePropertySet("AutoFit", true);
    versucht, will er nicht

    WorkSheet.OlePropertyGet("Columns", "A"), OlePropertySet("AutoFit", true);
    will er auch nicht

    in der Borland Hilfe findet man nichts, im Internet ists auch recht schwierig.
    wer kann mir mit meinem Problem helfen ????

    mfg
    Traugott



  • tja, man muß halt nur wissen nach was man sucht und sollte russische oder asiatische Seiten nicht ignorieren, da der Quellcode immer in Englich ist...

    versuch mal folgendes:

    ExcelColumns=UsedRange.OlePropertyGet("Columns");
    ColumnsCount=ExcelColumns.OlePropertyGet("Count");
    for(int i=0; i<ColumnsCount; i++) 
        {
        Variant Column;
        Variant EntireColumn;
        Column = ExcelColumns.OlePropertyGet("Item", i+1);
        EntireColumn = Column.OlePropertyGet("EntireColumn");
        EntireColumn.OleFunction("Autofit");
        //oder
        //EntireColumn.OlePropertySet("optimalWidth", true); 
        }
    


  • Der Beitrag war mir eine große Hilfe, Danke!


Anmelden zum Antworten