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

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);

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).

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

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