Seite 1 von 1

LibXL und Bilder einfügen

Verfasst: Do, 18. Aug 2016 10:22
von Rudolf
Hallo,
mit LibXL lassen sich auch Bilder einfügen, finde in HBLIBXL aber keine Methode für addPicture(cFil). Habe versucht die Methode zu ergänzen, bekomme aber immer eine Fehler
oError:description : Function is not declared
oError:filename :
oError:genCode : 21
oError:operation : FPQCALL
Stimmt vielleicht was mit dem Aufruf nicht ?

Grüße
Rudolf

Code: Alles auswählen

METHOD xlSheet:SheetAddPicture( cFilename )
   LOCAL uRet := nil
   cFilename := ::ForceAnsi(cFilename)
   uRet := FpQCall( {'LibXL','xlSheetAddPictureA'},'__sl__sl__pt',::hHandle,cFilename)
RETURN uRet

Re: LibXL und Bilder einfügen

Verfasst: Do, 18. Aug 2016 12:51
von brandelh
die Funktion muss neu sein, hast du die in deiner DLL denn drinn ?

In diesen Fällen gehe ich hin, öffne die DLL im HEX Modus mit MED und suche nach ascii ...

Die Funktion heißt: xlBookAddPictureA

Re: LibXL und Bilder einfügen

Verfasst: Do, 18. Aug 2016 13:04
von Rudolf
Hallo Hubert,
laut Doku :
http://www.libxl.com/workbook.html#addPicture
Interessanterweise sind die Methoden für Book in Deiner Lib vorhanden, aber nicht für Sheet. Habe es wie Du siehst versucht die Methode einzubauen, aber geht nicht.
Grüße
Rudolf

Re: LibXL und Bilder einfügen

Verfasst: Do, 18. Aug 2016 13:09
von Rudolf
Hallo,
habs übrigends auch so versucht:

Code: Alles auswählen

 nBmp := oBook:BookAddpicture(PDFEXPORT_IMG_ALTER)
     if nBmp = -1
          toastmsg("Image " + PDFEXPORT_IMG_ALTER + " not found !")
     else
          oSheet:SheetSetPicture(30,0,nBmp)
     endif
geht trotzudem nicht, laut Beispiel
http://www.libxl.com/place-picture-excel.html
sollte es aber funktionieren
Grüße
Rudolf

Re: LibXL und Bilder einfügen

Verfasst: Do, 18. Aug 2016 13:32
von Rudolf
Hallo,
es kommt doch etwas mit

Code: Alles auswählen

 nBmp := oBook:BookAddpicture(PDFEXPORT_IMG_ALTER)
     if nBmp = -1
          toastmsg("Image " + PDFEXPORT_IMG_ALTER + " not found !")
     else
          oSheet:SheetSetPicture(30,0,nBmp,50,50)
     endif
Laut Doku sollte die Grafik 50 x 50 sein, ist aber nur ganz schmal und geht bis ca. Zeile 1500. Auch wenn ich nur oSheet:SheetSetPicture(30,0,nBmp,50) verwende.
Grüße
Rudolf

Re: LibXL und Bilder einfügen

Verfasst: Do, 18. Aug 2016 13:45
von brandelh
Also wenn in der Hilfe "Book class reference" steht, dann ist es eine xlBook... Funktion, keine sheet ;-) (bei uns Methode)
Vermutlich wird das Bild - wie bei einer PDF - einmal in das Dokument (book) geladen und auf dem Sheet dann nur positioniert.

Wie man sowas macht, weiß ich aber leider nicht, da ich sowas nicht brauche.
Eventuell mal den Support fragen wie es mit Bilder einfügen geht (welche Funktionen man wie aufrufen muss)

Re: LibXL und Bilder einfügen

Verfasst: Do, 18. Aug 2016 13:49
von Rudolf
Hallo Hubert,
Danke, werde mal den Support kontaktieren. Aber im Link siehst Du dass es die Sheet Klassen Refernz ist. Hier ist genauso wie in der Book die setpicture Methode vorhanden. Aber egal, wenn es mit Book auch geht ist es kein Problem. Kann nur eine Kleinigkeit fehlen für die richtige Anzeige.
Grüße
Rudolf

Re: LibXL und Bilder einfügen

Verfasst: Do, 18. Aug 2016 14:06
von brandelh
Rudolf hat geschrieben:Aber im Link siehst Du dass es die Sheet Klassen Refernz ist.
Da hast du falsch gelesen, denn mit deinem Link komme ich auf dieses Beispiel:

Code: Alles auswählen

Placing pictures
This example shows how to insert a picture into an Excel sheet. 
Note that picture is shared for all sheets in workbook. 
LibXL supports PNG, JPG and WMF picture formats.

#include <iostream>
#include "libxl.h"
using namespace libxl;
int main() 
{         
    Book* book = xlCreateBook();
    if(book)
    {
        int id = book->addPicture(L"picture.jpg");
        if(id == -1)
        {
            std::cout << "picture not found" << std::endl;
            return -1;
        }
        Sheet* sheet = book->addSheet(L"Sheet1");
        if(sheet)
        {
            sheet->setPicture(10, 1, id);
        }
        book->save(L"out.xls");
        book->release();
    }
    return 0;
}
da siehst du, dass die genannte Funktion eine vom book ist:

int id = book->addPicture(L"picture.jpg");

nach der Funktion wird dann die Bildreferenz ID verwendet um es auf ein Sheet zu setzen:

sheet->setPicture(10, 1, id);

Die Erklärung sagt genau das was ich vermutet hatte:

Note that picture is shared for all sheets in workbook

ein Bild wird einmalig im BOOK gespeichert und über seine ID auf die Seiten per Referenz angezeigt.

PS: da auch eine Dokumentation falsch sein kann, suche ich ja in der DLL nach dem Namen,
wenn es dort keine SheetAddPicture(A) gibt, dann gibt es sie tatsächlich nicht. :wink:

Re: LibXL und Bilder einfügen

Verfasst: Do, 18. Aug 2016 16:51
von Rudolf
Hallo Hubert,
danke für die Info, ich habe unter diesen Link
http://www.libxl.com/spreadsheet.html
welcher sich auf sheet bezieht die Methoden in der Online Doku. Aber das Beispiel ist eindeutig, also vorher dem book zuordnen und nicht dem sheet.
Grüße
Rudolf

Re: LibXL und Bilder einfügen

Verfasst: Do, 18. Aug 2016 20:17
von brandelh
Du verwechselst SetPicture() von der Funktion mit AddPicture(), beides wird im Ausschnitt erwähnt.

Re: LibXL und Bilder einfügen

Verfasst: Fr, 19. Aug 2016 9:26
von Rudolf
Hallo Hubert,
hast recht, bei Sheet ist gar keine addpicture() Methode, hab ich total übersehen.
Grüße
Rudolf