| | | 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
Beiträge: 83 Registriert: 10.03.2005 WIN10 / SWX2020
|
erstellt am: 08. Nov. 2022 07:53 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 1073 Registriert: 06.05.2002 SWX Premium 2020-Sp5
|
erstellt am: 08. Nov. 2022 08:32 <-- editieren / zitieren --> Unities abgeben: Nur für currie
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
Beiträge: 83 Registriert: 10.03.2005 WIN10 / SWX2020
|
erstellt am: 08. Nov. 2022 09:08 <-- editieren / zitieren --> Unities abgeben:
|
TestMitglied Mitglied
Beiträge: 82 Registriert: 15.06.2005 Nur so zum Test
|
erstellt am: 08. Nov. 2022 10:47 <-- editieren / zitieren --> Unities abgeben: Nur für currie
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
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 / zitieren --> Unities abgeben: Nur für currie
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
Beiträge: 83 Registriert: 10.03.2005 WIN10 / SWX2020
|
erstellt am: 08. Nov. 2022 12:35 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|