Poser votre question
1

Cherche à obtenir la cellule sélectionner dans calc via programme en C++

posée 2018-11-30 00:21:05 +0200

Image Gravatar de Willi

updated 2018-11-30 13:16:06 +0200

Je programme en C++ sur windows 10 avec libreoffice calc Version: 6.1.3.2 (x64). Comment peut-on obtenir la sélection actuelle d'un fichier calc ouvert par un programme en C++. Je suis arrivé à obtenir "Any aCol" et "Any aRow" (voir une partie du programme ci-dessous). Peux-t-on de ces variables extraire l'adresse sous forme "A1" ou indexCol=0 indexRow=0, ou pouvez-vous m'indiquer une autre manier d'obtenir cette sélection.

Reference<XSelectionSupplier> xSelectionSupplier(xController, UNO_QUERY);
xSelectionSupplier->getSelection() >>= xRange;
Reference< XCell > cCell = xRange->getCellByPosition(0,0);
Reference< XColumnRowRange > xColRows(cCell,UNO_QUERY);
Any aCol = xColRows->getColumns()->getByIndex(0);
Any aRow = xColRows->getRows()->getByIndex(0);
éditer requalifier signaler fermer fusionner supprimer

Commentaires

SVP, consultez ces recommandations et et éditez (n'utilisez pas une réponse) votre question pour donner plus d'explications. Modifiez en particulier votre titre afin qu'il soit succinct (quelques mots pertinents et "percutants", tout le reste doit aller dans le développement, là où vous avez transcrit votre code).

Image Gravatar de ajlittozajlittoz ( 2018-11-30 09:22:51 +0200 )éditer

2Réponses

1

répondue 2018-12-01 21:15:28 +0200

Image Gravatar de Willi

Merci pour ta réponse qui me bien mis sur la piste. J'ai vue le terme "cellAddressable" et j'ai cherche la définition l'équivalent en c++. En incluent un fichier supplémentaire j'ai la solution suivant:

    #include <com/sun/star/sheet/XCellAddressable.hpp>

    Reference<XModel> xModel(xMainComponent, UNO_QUERY);
    Reference<XController> xController = xModel->getCurrentController();
    Reference<XSelectionSupplier> xSelectionSupplier(xController, UNO_QUERY);
    Reference< XCellRange > xRange;
    xSelectionSupplier->getSelection()>>=xRange;
    Reference<XCell> xCell = xRange->getCellByPosition(0,0);

    Reference<XCellAddressable> aCell(xCell,UNO_QUERY);
    int iSheet=aCell->getCellAddress().Sheet;
    int iColumn=aCell->getCellAddress().Column;
    int iRow=aCell->getCellAddress().Row;

Encore un fois merci

éditer signaler supprimer permalien plus
1

répondue 2018-12-01 09:53:14 +0200

Image Gravatar de pierre-yves samyn

Bonjour

Je ne programme pas en C++ mais au cas où cela pourrait te mettre sur la piste, voici comment je procède en java:

  • accès à la feuille active (myDoc contient naturellement le document ouvert au préalable) et affichage de son nom
  • accès direct via le modèle à la sélection courante puis à ses propriétés d'adresse (on suppose que la sélection est une cellule)
  • accès à la propriété AbsoluteName

        XModel xDocModel = UnoRuntime.queryInterface(XModel.class, myDoc );               
        XModel xSpreadsheetModel = UnoRuntime.queryInterface(XModel.class, xDocModel);
        XController xSpreadsheetController = xSpreadsheetModel.getCurrentController();
        XSpreadsheetView xSpreadsheetView = UnoRuntime.queryInterface(XSpreadsheetView.class, xSpreadsheetController);
        XSpreadsheet activeSheet=xSpreadsheetView.getActiveSheet();
        XNamed xNamed = UnoRuntime.queryInterface(XNamed.class, activeSheet);           
    
        System.out.println("Feuille: " + xNamed.getName());
    
        XCellAddressable cellAddressable = UnoRuntime.queryInterface(XCellAddressable.class, xSpreadsheetModel.getCurrentSelection());        
    CellAddress cellAddress = cellAddressable.getCellAddress(); 
    
    System.out.println("Sheet: " + cellAddress.Sheet + ":" + cellAddress.Column + ":"  + cellAddress.Row) ;
    
    XPropertySet xPropertySet = UnoRuntime.queryInterface(XPropertySet.class, cellAddressable);
    
        try {
            System.out.println(xPropertySet.getPropertyValue("AbsoluteName"));
        } catch (UnknownPropertyException e1) {
            e1.printStackTrace();
        } catch (WrappedTargetException e1) {
            e1.printStackTrace();
        }
    

Cordialement

éditer signaler supprimer permalien plus
S'identifier/S'inscrire pour répondre

Outils de question

1 suiveurs

Stats

Posée: 2018-11-30 00:21:05 +0200

Consultée: 36 fois

Mise à jour: Dec 01 '18