Results 1 to 6 of 6

Thread: Excel grafieken kopiweren middels Delphi

  1. #1

    Excel grafieken kopiweren middels Delphi

    Middels Delphi dump ik een hoeveelheid data in een Excelsheet.
    Hierin zitten een aantal tabbladen die aan de hand van de gedumpte data een grafiek tonen
    Deze grafieken wordt daarna 1 voor 1 geselecteerd en via het klembord ineen Word document geplakt.

    Sinds wij over zijn gegaan naar office365 werkt echter het TexcelApplication object niet meer.
    Zodra je een office bestand opent krijg ik de error "Interface not supported".

    Als oplossing hiervoor maken we nu gebruik van de onderstaand aanroep voor onze Excelapplicatie
    Excel_app := CreateOleObject('Excel.Application');
    Hierbij is Excel_app een OleVariant

    Inmiddels is het grootste gedeelte van mijn code omgezet naar deze nieuwe methode
    Echter bij het werken met grafiektabbladen gaat het mis.
    Wel kan via Delphi de gewone tabbladen selecteren.

    Het gaat dus om de volgende code die omgezet moet worden naar het OleObject
    Code:
    var   graph           : Texcelchart;
            NameofChart:string;
    
    for i  := 1 to aantal do
    begin
       graph.ConnectTo(app.workbooks[1].charts[NameofChart] as _chart);
       graph.select;
       app.activechart.ChartArea[0].copy;
    end;

  2. #2
    Wat gaat er fout? En gaat het beter als je NameOfChart declareert als BSTR of WideString?
    1+1=b

  3. #3
    Tot nu toe probeer ik dus eerst het tabblad te benaderen waarop de grafiek staat
    Code:
     
      graph:= Excel_app.Worksheets.item[NameofChart];
    Wanneer ik voor de NameofChart een andere tabblad naam invul wordt dat tabblad mijn actieve blad.
    Wanneer ik de naam van het grafiekbald invul krijg ik een invalid index melding terug

    Kortom ik moet het grafiekblad op een andere manier activeren maar tot nu heb ik nog niks kunnen vinden

  4. #4
    Counting your refs Paul-Jan's Avatar
    Join Date
    Feb 2002
    Location
    Lage Zwaluwe
    Posts
    2,159
    Een grafiekblad in excel is geen worksheet (ze geven het toevallig zo weer in de tabs onderin, maar het is echt een ander ding), en zit dus ook niet in de collectie Worksheets. Het is een Chart Sheet, en zit in de collectie Workbook.Charts.

    Je ziet dit ook terug in de code in het fragment in je oorspronkelijke vraag, ik zou die als uitgangspunt nemen. Dat wordt dan iets als

    Code:
      graph := Excel_app.ActiveWorkbook.Charts.item[NameOfChart].
    Kom je dan verder?

  5. #5
    Yess dat is precies wat ik nodig had.
    Had ondertussen wel door dat het geen sheet was maar hoe ik het wel moest aanroepen kon ik nergens vinden.

    Met deze regel werkt alles weer zoals het zou moeten.

    Bedankt!

  6. #6
    Counting your refs Paul-Jan's Avatar
    Join Date
    Feb 2002
    Location
    Lage Zwaluwe
    Posts
    2,159
    Ah, heerlijk dat je 't zo vlak voor 't weekend nog even draaiend hebt gekregen!

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •