Documentbeheer gebruiken

Hallo

Ik begin documentbeheer te gebruiken om mijn solidworks-eigenschappen op mijn Excel-bestand op te halen.
Ik heb op dit moment te maken met 2 problemen.
Ik wil graag een aantal eigenschappen in letterlijk schrift hebben, anders dan de naam van het onroerend goed
voorbeeld hier, ik zou graag een waarde in kg of g willen hebben, hetzelfde voor eigenschappen zoals " bestandsnaam " enz
image

En ik zou ook graag een vervolgkeuzemenu willen hebben zonder mijn formule te overschrijven
Voorbeeld: Ik zou een revisie-index kunnen bijwerken met een drop-down menu. Ik weet dat het mogelijk is om met de vervangende opdracht te kopiëren en plakken om de waarden bij te werken, maar dat is alles.
image

Als iemand suggesties heeft, ben ik er helemaal voor.

U moet de geschatte waarde van het onroerend goed terugvorderen, niet de waarde van het onroerend goed

2 likes

Hallo

Dank u voor uw antwoord, heeft u meer details over hoe verder te gaan?

Bedankt.

Plaats uw code (uiteraard zonder de sleutel) of het betreffende deel van de code.
Persoonlijk ken ik de documentbeheerder niet, maar de geëvalueerde waarde of waardefout is hetzelfde in de SW API. Afhankelijk van uw code zullen wij u adviseren.

'**********************
'Auteursrecht(C) 2022 Xarial Pty Limited
'Referentie: Excel-macro om aangepaste eigenschappen in SOLIDWORKS-bestanden te beheren
"Licentie: Licentie
'**********************

Const SW_DM_KEY As String = "KEY"

Sub hoofd()
Einde Sub

Functie ConnectToDm() als SwDocumentMgr.SwDMApplication

Dim swDmClassFactory As SwDocumentMgr.swDmClassFactory
Dim swDmApp As SwDocumentMgr.SwDMApplication

Set swDmClassFactory = CreateObject("SwDocumentMgr.SwDMClassFactory")
    
If Not swDmClassFactory Is Nothing Then
    Set swDmApp = swDmClassFactory.GetApplication(SW_DM_KEY)
    Set ConnectToDm = swDmApp
Else
    Err.Raise vbError, "", "Document Manager SDK is not installed"
End If

Functie beëindigen

Functie OpenDocument(swDmApp As SwDocumentMgr.SwDMApplication, path As String, readOnly As Booleaans) As SwDocumentMgr.SwDMDocument10

Dim ext As String
ext = LCase(Right(path, Len(path) - InStrRev(path, ".")))

Dim docType As SwDmDocumentType

Select Case ext
    Case "sldlfp"
        docType = swDmDocumentPart
    Case "sldprt"
        docType = swDmDocumentPart
    Case "sldasm"
        docType = swDmDocumentAssembly
    Case "slddrw"
        docType = swDmDocumentDrawing
    Case Else
        Err.Raise vbError, "", "Unsupported file type: " & ext
End Select

Dim swDmDoc As SwDocumentMgr.SwDMDocument10
Dim openDocErr As SwDmDocumentOpenError
Set swDmDoc = swDmApp.GetDocument(path, docType, readOnly, openDocErr)

If swDmDoc Is Nothing Then
    Err.Raise vbError, "", "Failed to open document: '" & path & "'. Error Code: " & openDocErr
End If

Set OpenDocument = swDmDoc

Functie beëindigen

Openbare functie GETSWPRP(fileName As String, prpNames As Variant, Optional confName As String = "") Als variant

Dim swDmApp As SwDocumentMgr.SwDMApplication
Dim swDmDoc As SwDocumentMgr.SwDMDocument10

proberen_:
Bij fout GoTo catch_

Dim vNames As Variant
        
If TypeName(prpNames) = "Range" Then
    vNames = RangeToArray(prpNames)
Else
    vNames = Array(CStr(prpNames))
End If

Set swDmApp = ConnectToDm()
Set swDmDoc = OpenDocument(swDmApp, fileName, True)

Dim res() As String
Dim i As Integer
ReDim res(UBound(vNames))

Dim prpType As SwDmCustomInfoType

If confName = "" Then
    For i = 0 To UBound(vNames)
        res(i) = swDmDoc.GetCustomProperty(CStr(vNames(i)), prpType)
    Next
Else
    Dim swDmConf As SwDocumentMgr.SwDMConfiguration10
    Set swDmConf = swDmDoc.ConfigurationManager.GetConfigurationByName(confName)
    If Not swDmConf Is Nothing Then
        For i = 0 To UBound(vNames)
            res(i) = swDmConf.GetCustomProperty(CStr(vNames(i)), prpType)
        Next
    Else
        Err.Raise vbError, "", "Failed to get configuration '" & confName & "' from '" & fileName & "'"
    End If
End If

GETSWPRP = res

GoTo finally_

worstelen_:
Debug.Print Err.Description
Err.Raise Err.Number, Err.Source, Err.Description
eindelijk_:
Zo niet, dan is swDmdoc niets
swDmDoc.CloseDoc
Einde als

Functie beëindigen

Publieke functie SETSWPRP(bestandsnaam als tekenreeks, prpNames als variant, prpVals als variant, optionele confName als tekenreeks = "")

Dim swDmApp As SwDocumentMgr.SwDMApplication
Dim swDmDoc As SwDocumentMgr.SwDMDocument10

proberen_:
Bij fout GoTo catch_

If TypeName(prpNames) <> TypeName(prpVals) Then
    Err.Raise vbError, "", "Property name and value must be of the same type, e.g. either range or cell"
End If

Dim vNames As Variant
Dim vVals As Variant
    
If TypeName(prpNames) = "Range" Then
    
    vNames = RangeToArray(prpNames)
    
    vVals = RangeToArray(prpVals)
    
    If UBound(vNames) <> UBound(vVals) Then
        Err.Raise vbError, "", "Number of cells in the name and value are not equal"
    End If
Else
    vNames = Array(CStr(prpNames))
    vVals = Array(CStr(prpVals))
End If

Set swDmApp = ConnectToDm()
Set swDmDoc = OpenDocument(swDmApp, fileName, False)

Dim i As Integer

If confName = "" Then
    For i = 0 To UBound(vNames)
        swDmDoc.AddCustomProperty CStr(vNames(i)), swDmCustomInfoText, CStr(vVals(i))
        swDmDoc.SetCustomProperty CStr(vNames(i)), CStr(vVals(i))
    Next
Else
    Dim swDmConf As SwDocumentMgr.SwDMConfiguration10
    Set swDmConf = swDmDoc.ConfigurationManager.GetConfigurationByName(confName)
    
    If Not swDmConf Is Nothing Then
        For i = 0 To UBound(vNames)
            swDmConf.AddCustomProperty CStr(vNames(i)), swDmCustomInfoText, CStr(vVals(i))
            swDmConf.SetCustomProperty CStr(vNames(i)), CStr(vVals(i))
        Next
    Else
        Err.Raise vbError, "", "Failed to get configuration '" & confName & "' from '" & fileName & "'"
    End If
End If

swDmDoc.Save

SETSWPRP = "OK"

GoTo finally_

worstelen_:
Debug.Print Err.Description
Err.Raise Err.Number, Err.Source, Err.Description
eindelijk_:
Zo niet, dan is swDmdoc niets
swDmDoc.CloseDoc
Einde als

Functie beëindigen

Private Function RangeToArray (vRange als variant) als variant

If TypeName(vRange) = "Range" Then
    Dim excelRange As Range
    Set excelRange = vRange
    
    Dim i As Integer
    
    Dim valsArr() As String
    ReDim valsArr(excelRange.Cells.Count - 1)
    
    i = 0
    
    For Each cell In excelRange.Cells
        valsArr(i) = cell.Value
        i = i + 1
    Next
    
    RangeToArray = valsArr
    
Else
    Err.Raise vbError, "", "Value is not a Range"
End If

Functie beëindigen

Sorry, ik weet niet veel over documentbeheer en ik kan het antwoord niet vinden. Aan de andere kant, voor de anderen, denkt hij dat het onderwerp is opgelost omdat je mij als het beste antwoord hebt gekozen, dus er is weinig kans dat je nog een antwoord over dit onderwerp hebt.

1 like

Hallo
Ik gebruik deze documentmanager niet, maar ik heb misschien een Track, dus na het aanmaken van deze massa-eigenschap, het reconstrueren en opslaan van het onderdeel,

Als het nog steeds niet werkt, staat er deze opmerking in uw referentie


Misschien niet mogelijk met de gebruikte functies!
Met (GetMassProperties Method (ISwDMConfiguration)) is het mogelijk

De functie die problematisch is, is GETSWPRP en meer in het bijzonder als ik me niet vergis:
swDmConf.GetCustomProperty
Zorg ervoor dat u het vervangt door:
GetAllCustomPropertyNamesAndValues-methode (ISwDMConfiguration4)
Zie hier de kenmerken:
https://help.solidworks.com/2021/english/api/swdocmgrapi/SolidWorks.Interop.swdocumentmgr~SolidWorks.Interop.swdocumentmgr.ISwDMConfiguration4~GetAllCustomPropertyNamesAndValues.html
of op de opname waar ik het deel voor de geëvalueerde waarde heb gemarkeerd: