none
Excel 2010 Automation in C/C++ - ChartObjects Methode RRS feed

  • Frage

  • Guten Morgen,

    ich habe wie in der Anleitung http://support.microsoft.com/kb/216686/en-us?fr=1 eine Automation geschrieben, bei der aus verschiedenen .xls-Dateien Werte ausgelesen und diese dann in eine neue Datei geschrieben werden sollen. Wenn alle Werte kopiert und eingefügt wurden, soll daraus dann ein Diagramm erstellt werden. Dies funktioniert einwandfrei mit Excel 2003, allerdings hat Excel 2010 mit der Methode ChartObjects Probleme.

    Ich habe gelesen, dass diese Methode unter Excel 2003 keine Parameter benötigt, da diese optional sind. Bei Excel 2010 sind diese allerdings erforderlich. Hier also der Code der 2003er-Version:

     

           AutoWrap(DISPATCH_PROPERTYGET, &result, instanz.pXlSheet, L"ChartObjects", 0); //Excel 2003, ohne Parameter                                                                             
           instanz.pXlChartObjects = result.pdispVal; 
    

     

    Ich nehme an, dass für Excel 2010 noch ein Parameter übergeben werden muss - nur bin ich mir nicht sicher, wie. Vielleicht so:

           AutoWrap(DISPATCH_PROPERTYGET, &result, instanz.pXlSheet, L"ChartObjects", 1, parameter); //Excel 2010, mit Parameter                                                                             
           instanz.pXlChartObjects = result.pdispVal; 
    

    Ich habe auch schon einige verschiedene Werte (Zahlen, Strings, ...) probiert - leider ohne Erfolg. Ich habe parameter als VARIANT deklariert. Nun meine Frage: Was ist an der Stelle einzutragen? Welche Werte kann ich parameter zuweisen? Kann das überhaupt so funktionieren?

    Ich hoffe, ich bin im richtigen Forum gelandet. :)

    Vielen Dank im Voraus!

     

    Montag, 14. November 2011 09:19

Alle Antworten

  • Hallo declaya,

    Ich habe hier (How To Use Visual C++ to Access DocumentProperties with Automation) ein Beispiel gefunden, wie kann man ein String Parameter übergeben:

          // Get "Subject" from BuiltInDocumentProperties.Item("Subject")

          IDispatch *pPropSubject;

          {

                VARIANT result;

                VariantInit(&result);

                VARIANT x;

                x.vt = VT_BSTR;

                x.bstrVal = ::SysAllocString(L"Subject");

                AutoWrap(DISPATCH_PROPERTYGET, &result, pProps, L"Item", 1, x);

                pPropSubject = result.pdispVal;

                SysFreeString(x.bstrVal);

          }

     

    Viele Grüße,

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Donnerstag, 17. November 2011 11:09
  • Hallo declaya

    Hast Du geschafft, die ChartObjects Variable zu instanziieren?

    Viele Grüße,

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Montag, 21. November 2011 11:57
  • Hallo Bogdan,

    erst einmal vielen Dank für Deine Antwort. Allerdings weiß ich natürlich, wie ich einen String als Parameter übergeben kann (ist dort auch nicht die erste Stelle, an der ich das mache).

    Ist "Subject" aus Item der Wert, den ich übergeben muss? Ich werde es heute gleich ausprobieren und sage Dir dann, ob es funktioniert hat. Ich habe mich sowieso schon gewundert, was die Item-Methode eigentlich so richtig macht.

    Viele Grüße! (Und viele, vielen Dank, falls das mein Stolperstein gewesen sein sollte. :)

    Dienstag, 22. November 2011 06:41
  • Hallo declaya,

    Vielen Dank erst mal für Deine Antwort.

    Das mit Item war natürlich nur ein Beispiel, das ich gefunden habe, wie man einen Parameter weitergeben kann. Hat mit ChartObjects nicht zu tun. Ich konnte leider selber keine Teste machen, weil ich mich mit C++ nicht auskenne :-(

    Ich hoffe auch, dass meine Nachfragen nicht unangenehm ankommen. Ich Frage Leute nach Feedback zurück, weil eigentlich so meine Vorgabe lauten, um Forendynamik hoch zu halten.

    Danke fürs Verstehen.

    Viele Grüße,

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Dienstag, 22. November 2011 08:20