Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Dateieigenschaften nach Excel (.txt) Schreiben und wieder einlesen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
Planen, verwalten & Kosten optimieren: Effizienter Layoutentwurf Ihrer Industrieanlagen mit DraftSight®
Autor Thema:  Dateieigenschaften nach Excel (.txt) Schreiben und wieder einlesen (383 mal gelesen)
currie
Mitglied
Betriebsmittelkonstrukteur


Sehen Sie sich das Profil von currie an!   Senden Sie eine Private Message an currie  Schreiben Sie einen Gästebucheintrag für currie

Beiträge: 83
Registriert: 10.03.2005

WIN10 / SWX2020

erstellt am: 08. Nov. 2022 07:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo liebe Forenmitglieder

Ich habe folgendes vor, finde aber nicht den Richtigen Ansatz.

Ich möchte bestimmte Dateieigenschaften in eine Textfile oder Excel Schreiben und die Datei dann im dafür vorgesehenen Projektordner speichern.
Diese Datei soll dann via Makro wieder in das Jeweilige Formular eines neuen Bauteils oder Baugruppe eingelesen werden (Knopfdruck).

Warum: In den Dateieigenschaften sind Eigenschaften Hinterlegt wie, (Werk) (Abteilung) (Anlage) (Station) (Prozess) und einige mehr. Ich stelle mir vor die Dateieigenschaften beim Ersten Teil über ein Formular ein zu fügen, und bei allen kommenden Teilen oder Baugruppen die Eigenschaften aus einer aus dem ersten Teil exportierten Liste ein zu lesen. Diese Dateieigenschaften bleiben für alle Teile und Baugruppen innerhalb dieses Projektes gleich. Oder ich fülle die Excel oder Text Datei im Voraus aus und kann dann die Eigenschaften in jedes Teil einlesen.

Ich hänge momentan wie ich die Dateieigenschaften in einer Liste.txt oder Excel exportiere. Eventuell hat jemand einen Hinweis wie ich den Im/Export erzeugen kann.
Bis jetzt mache ich das so dass ich die Zeilen in der Liste der Dateieigenschaften Kopiere und im Neuen Teil einfüge.

Vielen Dank  Currie

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

riesi
Mitglied
CAD-Admin


Sehen Sie sich das Profil von riesi an!   Senden Sie eine Private Message an riesi  Schreiben Sie einen Gästebucheintrag für riesi

Beiträge: 1073
Registriert: 06.05.2002

SWX Premium 2020-Sp5

erstellt am: 08. Nov. 2022 08:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für currie 10 Unities + Antwort hilfreich

Wenn Du mit Visual Studio umgehen kannst, kann ich Dir eine gute Vorlage zur Anpassung geben. Habe ein Programm erstellt, welches die Ordner-Struktur der Schweiß-Konstruktionsprofile ausliest, sowie deren Eigenschaften und nach Excel schreibt. Da steckt alles drin, was Du für Deine Aufgabe benötigst.

Mein Programm benötigt ein Lizenz-Code für die Benutzung der Document-Manager-Api, welcher bei SolidWorks kostenlos beantragt werden kann. Weiterhin nutze ich zur Erzeugung der Excel-Liste den Document-Builder von OnlyOffice, ist OpenSource. Damit bekomme ich die Excel-Liste von unseren Profilen in ca. 10s ausgelesen.

Gruß, Klaus.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

currie
Mitglied
Betriebsmittelkonstrukteur


Sehen Sie sich das Profil von currie an!   Senden Sie eine Private Message an currie  Schreiben Sie einen Gästebucheintrag für currie

Beiträge: 83
Registriert: 10.03.2005

WIN10 / SWX2020

erstellt am: 08. Nov. 2022 09:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Klaus,

Ich bin froh dass ich mit VB einiger maßen was machen kann.
Visual Studio hab ich keine Ahnung von, trotzdem vielen Dank.

Danke Currie

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

TestMitglied
Mitglied



Sehen Sie sich das Profil von TestMitglied an!   Senden Sie eine Private Message an TestMitglied  Schreiben Sie einen Gästebucheintrag für TestMitglied

Beiträge: 82
Registriert: 15.06.2005

Nur so zum Test

erstellt am: 08. Nov. 2022 10:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für currie 10 Unities + Antwort hilfreich

Meinst Du so etwas?
Code:

Dim swApp As Object
    Sub main()
    Set swApp = Application.SldWorks
    DatenSchreiben
    DatenLesen
End Sub
Private Sub DatenSchreiben()
    'Wird hier in zwei Excel-Zellen geschrieben
    Dim xlApp As Excel.Application
    Dim xlWorkbook As Excel.Workbook
    Dim xlWorksheet As Object
    'Excel öffnen
    Set xlApp = CreateObject("Excel.Application")
    'Excel unsichtbar machen
    xlApp.Visible = False
    Set xlWorkbook = xlApp.Workbooks.Open("c:\temp\Daten.xlsx")
    Set xlWorksheet = xlWorkbook.Worksheets("Tabelle1")
    'Füllvorgang: Daten in Excel Zellen schreiben
    xlApp.ActiveSheet.Cells(1, 1) = "Test Zelle1"
    xlApp.ActiveSheet.Cells(2, 1) = "Test Zelle2"
    xlApp.ActiveWorkbook.Close savechanges:=True
    xlApp.Quit
End Sub
Private Sub DatenLesen()
    'Wird hier aus zwei Excel-Zellen gelesen
    Dim xlApp As Excel.Application
    Dim xlWorkbook As Excel.Workbook
    Dim xlWorksheet As Object
    Dim Zelle1 As String
    Dim Zelle2 As String
    'Excel öffnen
    Set xlApp = CreateObject("Excel.Application")
    'Excel unsichtbar machen
    xlApp.Visible = False
    Set xlWorkbook = xlApp.Workbooks.Open("c:\temp\Daten.xlsx")
    Set xlWorksheet = xlWorkbook.Worksheets("Tabelle1")
    'Auslesevorgang: Zellinhalt in String schreiben
    Zelle1 = xlApp.ActiveSheet.Cells(1, 1).Value
    'Welcher Inhalt wurde gelesen?
    Debug.Print Zelle1
    Zelle2 = xlApp.ActiveSheet.Cells(2, 1).Value
    'Welcher Inhalt wurde gelesen?
    Debug.Print Zelle2
    xlApp.ActiveWorkbook.Close savechanges:=True
    xlApp.Quit
End Sub


...die Excel-Tabelle Daten.xlsx ist im Verzeichnis c:\temp vorhanden und natürlich musst Du den Verweis auf das Excel setzten.

------------------

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HenryV
Mitglied
Konstrukteur, Engineering


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

Beiträge: 813
Registriert: 18.05.2005

SolidWorks 2022 x64 SP5.0
Dell Precision 5820
Intel Xeon W-2125 4x4GHz
NVIDIA Quadro P2000 5GB
32GB RAM
2x Dell U2412M, 24" TFT
Windows 10 Enterprise x64 22H2
Microsoft 365 E5
Microsoft Visual Studio Enterprise 2022

erstellt am: 08. Nov. 2022 11:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für currie 10 Unities + Antwort hilfreich

Hallo Currie

Link SOLIDWORKS custom properties from text file

Beispiel-Datei:

Code:
Company,Xarial Pty Limited
Material,"""SW-Material"""
Mass,"""SW-Mass"""
Makro:
Code:
'**********************
'Copyright(C) 2022 Xarial Pty Limited
'Reference: https://www.codestack.net/solidworks-api/data-storage/custom-properties/link-to-file/
'License: https://www.codestack.net/license/
'**********************
Const CLEAR_PROPERTIES As Boolean = False
Sub main()
    Dim swApp As SldWorks.SldWorks
    Set swApp = Application.SldWorks
    Dim swModel As SldWorks.ModelDoc2
try_:
    On Error GoTo catch_
    Dim csvFilePath As String
    Dim confSpecific As Boolean
    If GetParameters(swApp, swModel, csvFilePath, confSpecific) Then
        If Not swModel Is Nothing Then
            WritePropertiesFromFile swModel, csvFilePath, IIf(CBool(confSpecific), swModel.ConfigurationManager.ActiveConfiguration, Nothing)
        Else
            Err.Raise vbError, "", "Please open model"
        End If
    End If
    GoTo finally_
catch_:
    swmRebuild = Err.Description
finally_:
End Sub
Function GetParameters(app As SldWorks.SldWorks, ByRef model As SldWorks.ModelDoc2, ByRef csvFilePath As String, ByRef confSpecific As Boolean) As Boolean
Dim confSpecArgsParsed As Boolean
    If Trim(csvFilePath) = "" Then
        csvFilePath = app.GetOpenFileName("Custom Properties Template File", "", "CSV Files (*.csv)|*.csv|Text Files (*.txt)|*.txt|All Files (*.*)|*.*|", 0, "", "")
    End If
    If model Is Nothing Then
        Set model = app.ActiveDoc
    End If
    If csvFilePath <> "" Then
        If Not confSpecArgsParsed Then
            confSpecific = app.SendMsgToUser2("Link to configuration specific properties (Yes) or File Specific (No)?", swMessageBoxIcon_e.swMbQuestion, swMessageBoxBtn_e.swMbYesNo) = swMessageBoxResult_e.swMbHitYes
        End If
        GetParameters = True
    Else
        GetParameters = False
    End If
End Function
Function GetArrayFromCsv(filePath As String) As Variant
    Dim fileNo As Integer
    fileNo = FreeFile
    Dim rows As Collection
    Set rows = New Collection
    Open filePath For Input As #fileNo
    Do While Not EOF(fileNo)
        Dim tableRow As String
        Line Input #fileNo, tableRow
        Dim vCells As Variant
        vCells = Split(tableRow, ",")
        rows.Add vCells
    Loop
    Close #fileNo
    Dim tableData() As String
    Dim rowCount As Integer
    Dim columnCount As Integer
    rowCount = rows.Count
    columnCount = UBound(rows(1)) + 1
    Dim rowIndex As Integer
    Dim columnIndex As Integer
    ReDim tableData(rowCount - 1, columnCount - 1)
    For rowIndex = 1 To rowCount
        Dim vRow As Variant
        vRow = rows.Item(rowIndex)
        For columnIndex = 1 To columnCount
            Dim cellVal As String
            cellVal = vRow(columnIndex - 1)
            If Left(cellVal, 2) = """""" And Right(cellVal, 2) = """""" Then
                cellVal = Mid(cellVal, 3, Len(cellVal) - 4)
            End If
            tableData(rowIndex - 1, columnIndex - 1) = cellVal
        Next
    Next
    GetArrayFromCsv = tableData
End Function
Sub WritePropertiesFromFile(model As SldWorks.ModelDoc2, csvFilePath As String, conf As SldWorks.Configuration)
    If Dir(csvFilePath) = "" Then
        Err.Raise "Linked CSV file is missing: " & csvFilePath
    End If
    Dim vTable As Variant
    vTable = GetArrayFromCsv(csvFilePath)
    Dim i As Integer
    Dim confName As String
    If conf Is Nothing Then
        confName = ""
    Else
        confName = conf.Name
    End If
    Dim swCustPrpMgr As SldWorks.CustomPropertyManager
    Set swCustPrpMgr = model.Extension.CustomPropertyManager(confName)
    If UBound(vTable, 2) <> 1 Then
        Err.Raise vbError, "", "There must be only 2 columns in the CSV file"
    End If
    If CLEAR_PROPERTIES Then
        ClearProperties swCustPrpMgr
    End If
    For i = 0 To UBound(vTable, 1)
        Dim prpName As String
        prpName = CStr(vTable(i, 0))
        Dim prpVal As String
        prpVal = CStr(vTable(i, 1))
        If swCustPrpMgr.Add3(prpName, swCustomInfoType_e.swCustomInfoText, prpVal, swCustomPropertyAddOption_e.swCustomPropertyReplaceValue) <> swCustomInfoAddResult_e.swCustomInfoAddResult_AddedOrChanged Then
            Err.Raise vbError, "", "Failed to add property '" & prpName & "'"
        End If
    Next
End Sub
Sub ClearProperties(custPrpMgr As SldWorks.CustomPropertyManager)
    Dim vPrpNames As Variant
    vPrpNames = custPrpMgr.GetNames
    If Not IsEmpty(vPrpNames) Then
        Dim i As Integer
        For i = 0 To UBound(vPrpNames)
            custPrpMgr.Delete2 CStr(vPrpNames(i))
        Next
    End If
End Sub


Gruss Andreas

------------------
21 ist nur die halbe Antwort.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

currie
Mitglied
Betriebsmittelkonstrukteur


Sehen Sie sich das Profil von currie an!   Senden Sie eine Private Message an currie  Schreiben Sie einen Gästebucheintrag für currie

Beiträge: 83
Registriert: 10.03.2005

WIN10 / SWX2020

erstellt am: 08. Nov. 2022 12:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo

Jetzt hab ich ja genug Material zum ausprobieren erstmal vielen Dan

Currie

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz