Probleme mit Zugriff auf ein Excelfile über Visual C++



  • Hallo,

    ich habe ein Problem mit dem Zugriff und dem ändern eines Excelfiles und deren Inhalt.
    Ich versuche in eine Exceltabelle Daten einzutragen, was auch funktioniert. Nun ist das Problem, dass ich gerne die Zellengröße ändern würde. Manuell funktioniert das, also ich kann über C++ sagen, dass die Zellen Höhe den Wert x bekommen soll und die Zellenbreite den Wert y.
    Leider weiß ich im Voraus nicht, wie lang der Text ist und wieviel in so einer Zelle steht, damit müsste ich die Zellengröße variabel wählen.
    Im Makroteil von Excel habe ich herausgefunden, dass der Befehl Autofit heißt. Diesen gibt es auch in C++, doch er gibt mir immer den Fehler

    " Die AutofitMethode des Range-Objectes konnte nicht ausgeführt werden"

    aus.
    Aufgerufen wird das Ganze durch:

    Range range;
    
    // hier wird ein Tabellenblatt mit dem Namen "Protokoll" erstellt
    	m_ExcelFile.sheet = m_ExcelFile.sheets.GetItem(COleVariant("Protokoll"));
    	range = m_ExcelFile.sheet.GetRange(COleVariant("A1"), COleVariant("A1"));
    	range.AutoFit();
    

    Falls jmd. eine Idee hat, wäre ich sehr dankbar, wenn er mir helfen könnte.

    Ein zweites Problem habe ich noch mit dem Einfügen von Zeilen, aber da teste ich erst noch ein bischen, bevor ich mich verzweifelt wieder an euch wende 🙂

    MfG Thorsten



  • hmm versteh ich dich richtig du willst über ne variable Text in die exceldatei schreiben, und anhand der länge des textes gleich die spaltengröße setzen.

    versuch mal folgendes.

    CClientDC dc(this);
    CString sString = "Text der in die Tabele geschrieben wird";
    
    CSize size = dc.GetTextExtent(sString .GetBuffer(sString .GetLength()));//Gibt die Länge & Höhe der Schrift zurück
    //size.cx  <--gleich länge der Schrift
    //size.cy  <--gleich höher der Schrift
    

    ist allerdings ein bischen ungenau denn mit zunehmender länge des textes dichtet da GetTextExtent nochwas dazu.

    mfg
    LowFly



  • Hi,
    mein Problem war, dass ich eine Tabelle habe, in die ich Text eingefügt habe. Also es stehen in mehreren Zellen und Spalten Text in unterschiedlicher Länge und ganz zum Schluss, nachdem der ganze Text eingefügt wurde wollte ich durch Autofit das Ganze übersichtlich machen.

    Das hatte ich nicht hinbekommen, doch dann habe ich eine Lösung gefunden:

    Range range;
    	Range cols;
    		// Anpassen der Größen der Spalten
    	range = m_ExcelFile.sheet.GetRange(COleVariant("A1"), COleVariant("J1"));
    
      //AutoFit columns A:J.
    
         cols = range.GetEntireColumn();
         cols.AutoFit();
    

    und dann gleich zu meiner zweiten (noch nicht gestellten) Frage, wie man Zeilen einfügen kann:

    range.Insert(COleVariant((long)-4121));// to shift down
    

    Nur, falls es für irgendwen noch interessant sein könnte.

    Vielen Dank für deine Antwort!

    Gruß, Thorsten


Anmelden zum Antworten