Excel

Tous sujets concernant le développement spécifique de TopSolid avec l'interface COM, le langage LIP, la programmation de l'API en VB...

Modérateurs : remi77, D@vid, Alexis GERARD

Répondre
belgarath31
Caporal-chef
Caporal-chef
Messages : 36
Enregistré le : 16 juin 2016, 21:54
Version TopSolid : 7.5
Module TopSolid : TopSolid'Cam
Localisation : Toulouse

Excel

Message non lu par belgarath31 »

Est-ce que quelqu'un aurait un bout de code vba ou c# qui exporte des informations de topsolid (genre vitesse de coupe, machine utilisé dans un cam) dans un fichiers excel choisi ou crée. un bout de code aussi pour sélectionner un fichier ,avec le pdm, dans l’arborescence d'un projet.
D'avance merci cela m'aiderait bien pour commencer à coder et à comprendre le manuel d'automation qui manque cruellement d'exemples c'est dommage.
belgarath31
Avatar du membre
JuP
Général de brigade
Général de brigade
Messages : 6866
Enregistré le : 18 févr. 2013, 10:26
Réponses : 142
Version TopSolid : 7.17
Module TopSolid : TopSolid'Steel
Localisation : Lyon (France)

Re: Excel

Message non lu par JuP »

Bonjour,

Je ne peux pas trop d'aider pour le cam mais si tu comprends la philosophie de l'API tu trouveras vite ton bonheur.

Tu veux le sélectionner comment ton fichier dans le PDM?
Julien POIROT
Responsable produit TopSolid'Steel
Youtube (tuto etc)
GrabCad
Groupe Facebook TopSolid'Steel

Postez ici vos idées!:
TopSolid'Steel
TopSolid'Design
belgarath31
Caporal-chef
Caporal-chef
Messages : 36
Enregistré le : 16 juin 2016, 21:54
Version TopSolid : 7.5
Module TopSolid : TopSolid'Cam
Localisation : Toulouse

Re: Excel

Message non lu par belgarath31 »

c'est justement la où le bas blesse, j'aimerais avoir un exemple pour saisir la philosophie de l'api.
Même si c'est pas pour un fichier cam, mais par exemple récupérer la matière ou l'auteur dans une mise en plan.
Merci
Avatar du membre
JuP
Général de brigade
Général de brigade
Messages : 6866
Enregistré le : 18 févr. 2013, 10:26
Réponses : 142
Version TopSolid : 7.17
Module TopSolid : TopSolid'Steel
Localisation : Lyon (France)

Re: Excel

Message non lu par JuP »

J'ai mis d'autre morceaux de code un peu partout, en voici quelques uns qui pourraient t’intéresser.
Voici la base, pour se connecter à TopSolid, à mettre dans un module:

Code : Tout sélectionner

Module ProcéduresTS

    Public docId As DocumentId

    Public Function Connection2TS() 'Connection à TopSolid
        TopSolidHost.Connect()  'Connection à TopSolid
        TopSolidDesignHost.Connect()    'Connection à TopSolid
        docId = TopSolidHost.Documents.EditedDocument     'Récupération ID document
        Dim TSConnected As Boolean = TopSolidDesignHost.IsConnected
        If TSConnected = False Then MsgBox("Non connecté")

        Return docId
    End Function
Pour lancer la procédure de connexion:

Code : Tout sélectionner

 'Connection à TS  +  récupération du DocumentId
        Try
            Dim DocId As DocumentId
            ProgressBarDoubleForm.Label2.Text = "Connection à TopSolid"
            TopSolidHost.Connect()  'Connection à TopSolid
            TopSolidDesignHost.Connect()    'Connection à TopSolid
            DocId = Connection2TS()
        Catch
            MsgBox("Erreur de connection à TopSolid, vérifier qu'un document est actif")
            Exit Function
        End Try
Pour récupérer quelques info projet, pièce etc:

Code : Tout sélectionner

             Dim ObjectId As PdmObjectId
            ObjectId = TopSolidHost.Documents.GetPdmObject(DocId)

            'Récupération du nom du document
            NomDoc = TopSolidHost.Documents.GetName(DocId)
            'TextBoxDocumentName.Text = NomDoc

            'Récupération projet actif
            Dim ActiveProjectID As PdmObjectId
            ActiveProjectID = TopSolidHost.Pdm.GetProject(ObjectId)

            'Récupération nom projet
            Dim ActiveProjectName As String
            ActiveProjectName = TopSolidHost.Pdm.GetName(ActiveProjectID)
Julien POIROT
Responsable produit TopSolid'Steel
Youtube (tuto etc)
GrabCad
Groupe Facebook TopSolid'Steel

Postez ici vos idées!:
TopSolid'Steel
TopSolid'Design
Avatar du membre
JuP
Général de brigade
Général de brigade
Messages : 6866
Enregistré le : 18 févr. 2013, 10:26
Réponses : 142
Version TopSolid : 7.17
Module TopSolid : TopSolid'Steel
Localisation : Lyon (France)

Re: Excel

Message non lu par JuP »

Un exemple de macro pour afficher la mise en plan d'un assemblage ou d'une pièce:
A mettre dans un module:

Code : Tout sélectionner

Module ProcéduresTS

    Public docId As DocumentId

    Public Function Connection2TS() 'Connection à TopSolid
        TopSolidHost.Connect()  'Connection à TopSolid
        TopSolidDesignHost.Connect()    'Connection à TopSolid
        docId = TopSolidHost.Documents.EditedDocument     'Récupération ID document
        Dim TSConnected As Boolean = TopSolidDesignHost.IsConnected
        If TSConnected = False Then MsgBox("Non connecté")

        Return docId
    End Function
    Public Sub Deconnection2TS()   'Deconnection à TopSolid
        TopSolidDesignHost.Disconnect()
        TopSolidHost.Disconnect()
        Dim TSConnected As Boolean = TopSolidDesignHost.IsConnected
        If TSConnected = True Then MsgBox("Déconnection Impossible")
    End Sub
    Public Function StartModification(ByRef DocId As DocumentId, ByVal ModificationName As String, ByVal ActivRollBack As Boolean) 'StartModification + EnsureIsDirty
        TopSolidHost.Application.StartModification(ModificationName, ActivRollBack)
        TopSolidHost.Documents.EnsureIsDirty(DocId)

        Return (DocId)
    End Function

    Public Sub EndModification(ByVal Alert As Boolean, ByRef Save As Boolean)
        TopSolidHost.Application.EndModification(Alert, Save)
    End Sub

End Module
A mettre dans ta form:

Code : Tout sélectionner

Public Class Accueil
    Public ActiveDocumentDocId As DocumentId
    Public ActiveDocumentObjId As PdmObjectId
    Public ActiveDocumentName As String
    Public ActiveDocumentType As String = ""


    Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Connection à TS  +  récupération du DocumentId
        ActiveDocumentDocId = Connection2TS()

        Try
            'Récupération le l'ObjectId du document
            ActiveDocumentObjId = TopSolidHost.Documents.GetPdmObject(ActiveDocumentDocId)

            'Récupération du nom du document
            ActiveDocumentName = TopSolidHost.Documents.GetName(docId)
            TextBoxDocumentName.Text = ActiveDocumentName

            'Récupération du type de document
            TopSolidHost.Pdm.GetType(ActiveDocumentObjId, ActiveDocumentType)

            'Vérification du type de document
            VerificationDocumentType(ActiveDocumentType)

            'Récupération du projet
            Dim ActiveProjectObjId As PdmObjectId
            ActiveProjectObjId = TopSolidHost.Pdm.GetProject(ActiveDocumentObjId)

            'Récupération révision majeur
            Dim ActiveDocumentLastMajorRevision As PdmMajorRevisionId
            ActiveDocumentLastMajorRevision = TopSolidHost.Pdm.GetLastMajorRevision(ActiveDocumentObjId)

            'Récupération révision mineur
            Dim ActiveDocumentLastMinorRevision As PdmMinorRevisionId
            ActiveDocumentLastMinorRevision = TopSolidHost.Pdm.GetLastMinorRevision(ActiveDocumentLastMajorRevision)

            'Recherche des cas d'emploi
            Dim BackReferencesMinorRevisionList As New List(Of PdmMinorRevisionId)
            'BackReferencesMinorRevisionList = TopSolidHost.Pdm.SearchMinorRevisionBackReferences(ActiveProjectObjId, ActiveDocumentLastMinorRevision)
            BackReferencesMinorRevisionList = TopSolidHost.Pdm.SearchMajorRevisionBackReferences(ActiveProjectObjId, ActiveDocumentLastMajorRevision)


            'Recherche Mise en plan
            Dim DraftObjId As PdmObjectId

            For Each BackReferenceMinorRevision In BackReferencesMinorRevisionList

                'Récupération Révision majeur
                Dim BackReferenceMajorRevision As PdmMajorRevisionId
                BackReferenceMajorRevision = TopSolidHost.Pdm.GetMajorRevision(BackReferenceMinorRevision)

                'Récupération Object Id
                Dim BackReferenceObjId As PdmObjectId
                BackReferenceObjId = TopSolidHost.Pdm.GetPdmObject(BackReferenceMajorRevision)

                'Récupération du type de document
                Dim BackReferenceType As String = ""
                TopSolidHost.Pdm.GetType(BackReferenceObjId, BackReferenceType)

                If BackReferenceType = ".TopDft" Then
                    DraftObjId = BackReferenceObjId
                End If

            Next

            'Si pas de mise en plan
            If DraftObjId.IsEmpty Then
                MsgBox("Le document ne possède pas de mise en plan")
                Me.Close()
            Else
                TopSolidHost.Documents.Open(TopSolidHost.Documents.GetDocument(DraftObjId))
            End If

            Me.Close()
        Catch ex As Exception
            MsgBox("Erreur lor de l'exécution du programme" + vbNewLine + ex.Message)
            Me.Close()
        End Try

    End Sub

    Private Sub VerificationDocumentType(ByVal ObjectType As String)
        Select Case ObjectType
            Case ".TopPrt"
                TextBoxDocumentType.Text = "Pièce"
            Case ".TopAsm"
                TextBoxDocumentType.Text = "Assemblage"
            Case Else
                MsgBox("Le document n'est ni une Pièce ni Assemblage, Merci d'ouvrir un document valide et de relancer la fonction")
                Me.Close()
                Return
        End Select
    End Sub

    Private Sub Accueil_Activated(sender As Object, e As EventArgs) Handles MyBase.Activated

    End Sub
End Class
Julien POIROT
Responsable produit TopSolid'Steel
Youtube (tuto etc)
GrabCad
Groupe Facebook TopSolid'Steel

Postez ici vos idées!:
TopSolid'Steel
TopSolid'Design
Avatar du membre
JuP
Général de brigade
Général de brigade
Messages : 6866
Enregistré le : 18 févr. 2013, 10:26
Réponses : 142
Version TopSolid : 7.17
Module TopSolid : TopSolid'Steel
Localisation : Lyon (France)

Re: Excel

Message non lu par JuP »

bon je ne suis pas développeur donc c'est loin d'être dans "les rêgles de l'art" mais ça a le mérite de parfaitement fonctionner :-)
Julien POIROT
Responsable produit TopSolid'Steel
Youtube (tuto etc)
GrabCad
Groupe Facebook TopSolid'Steel

Postez ici vos idées!:
TopSolid'Steel
TopSolid'Design
belgarath31
Caporal-chef
Caporal-chef
Messages : 36
Enregistré le : 16 juin 2016, 21:54
Version TopSolid : 7.5
Module TopSolid : TopSolid'Cam
Localisation : Toulouse

Re: Excel

Message non lu par belgarath31 »

Un grand merci, je teste et je te dis si cela fonctionne. en tout cas un grand merci encore.
Avatar du membre
Mykhaylo
Caporal-chef
Caporal-chef
Messages : 33
Enregistré le : 08 juil. 2019, 09:50
Version TopSolid : 7.7
Module TopSolid : TopSolid'Design

Re: Excel

Message non lu par Mykhaylo »

Bonjour Julien
Quelles sont les références VBA EXCEL à activer pour exécuter tes codes? :?:
Merci
Mykhaylo 40 :arrow:
Avatar du membre
JuP
Général de brigade
Général de brigade
Messages : 6866
Enregistré le : 18 févr. 2013, 10:26
Réponses : 142
Version TopSolid : 7.17
Module TopSolid : TopSolid'Steel
Localisation : Lyon (France)

Re: Excel

Message non lu par JuP »

Bonjour Myklaylo,

En VBA ça m'étonnerait que ça marche mais on ne sait jamais.
Tu as besoin des DLL suivantes:
2019-08-28_17-01-00.png
Plus d'info dans l'aide de l'API:
2019-08-28_17-01-19.png
Dans les prochains mois on devrait publier un cours en e-learning sur l'utilisation de l'API.

@+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Julien POIROT
Responsable produit TopSolid'Steel
Youtube (tuto etc)
GrabCad
Groupe Facebook TopSolid'Steel

Postez ici vos idées!:
TopSolid'Steel
TopSolid'Design
Répondre