Autor
|
Thema: CAtDrawing Tabelle als XLS Datei (2943 mal gelesen)
|
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 24. Feb. 2015 10:04 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen Ich habe ein Makro gefunden, welsches jede Tabelle aus CATDrawing als separat XLS Datei speicherst. Der Kode unten. Mein problem ist, das ich will das machen nur fuer die Tabellen welche is zuerst zeige (anclicke). Ich weiss dass das ueber Selectelement3 geht. Kann mier jemand zeigen wie? Zweite Sache: meinschmal die Tabellen haben gleiche Name und/oder der Name enthält verbotene Zeichen: Code: < > ? [ ] : |
oder Code: *
Im diesem Fahl ich kann nicht der XLS-Datei mit solche Name speichern. Ich kann auch nicht mein Datei ueberspeichern Wie kann ich Die Zeichen mit z.B. Code: _
wechseln/ tauschen vor Datei Abspeicherung? Zweite Moeglischkeit ist, das drwtable.Name mit ein Tabelle-Index wechseln. Wie kann ich das machen? Der Kode: Code:
Sub CATMain() '\\Global Declarations Dim bigstring Dim totalrows Dim totalcolumns Dim drwdoc 'As Document Dim drwsheets 'As DrawingSheets Dim drwsheet 'As DrawingSheet Dim drwviews 'As DrawingViews Dim drwview 'As DrawingView Dim drwtables 'As DrawingTables Dim drwtable 'As DrawingTable Dim objExcel 'As Object Dim objWorkbook Dim objSheet Dim objCell Dim InputObjectType(0) Dim i, j, k, r, c Dim IsExcelRunning 'As BooleanSet drwdoc = CATIA.ActiveDocument If TypeName(drwdoc) <> "DrawingDocument" Then MsgBox "This macro can only be run with a drawing document.", vbInformation, "Document not a Drawing" Exit Sub End If Set drwsheets = drwdoc.Sheets 'Here I capture whether MS Excel is running already or not so we don't close it on the user On Error Resume Next Set objExcel = GetObject(, "Excel.Application") If objExcel Is Nothing Then IsExcelRunning = False 'false if user does not have excel running Err.Clear Else IsExcelRunning = True 'true if the user has excel running End If On Error GoTo 0 'run thru every sheet For i = 1 To drwsheets.Count Set drwsheet = drwsheets.Item(i) Set drwviews = drwsheet.Views 'run thru every drawing view For j = 1 To drwviews.Count Set drwview = drwviews.Item(j) Set drwtables = drwview.Tables 'run thru Tables If drwtables.Count > 0 Then For k = 1 To drwtables.Count Set drwtable = drwtables.Item(k) '--Define table and extract strings to array. totalrows = drwtable.NumberOfRows totalcolumns = drwtable.NumberOfColumns 'Dim table() Dim table ReDim table(totalrows, totalcolumns) For r = 1 To totalrows For c = 1 To totalcolumns table(r, c) = drwtable.GetCellString(r, c) Next Next '--Open Excel On Error Resume Next Set objExcel = GetObject(, "Excel.Application") If objExcel Is Nothing Then Set objExcel = CreateObject("Excel.Application") Err.Clear objExcel.Visible = False End If On Error GoTo 0 Dim myname 'myname = Left(drwdoc.FullName, Len(drwdoc.FullName) - 11) & "_" & drwsheet.Name & "_" & drwview.Name & "_" & drwtable.Name & ".xls" myname = Left(drwdoc.FullName, Len(drwdoc.FullName) - 11) & drwtable.Name & ".xls" Set objWorkbook = objExcel.Workbooks.Add() objWorkbook.Activate Set objSheet = objWorkbook.Worksheets.Item(1) '--Populate spreadsheet with values from array. For r = 1 To totalrows For c = 1 To totalcolumns objSheet.Cells(r, c) = table(r, c) Next Next objWorkbook.SaveAs myname 'ExcelWorksheet.SaveAs sFile objWorkbook.Close Next 'k ' table loop End If Next 'j ' view loop Next 'i ' Sheet loop If IsExcelRunning = False Then If objExcel Is Nothing Then MsgBox "There are no Drawing tables to export.", vbInformation, "No Tables to export" Exit Sub End If objExcel.Quit ' Close Excel with the Quit method on the Application object MsgBox "Your Catia drawing tables have been exported to Excel.", vbInformation, "Table Export Complete" End If End Sub
MfG Lukas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 24. Feb. 2015 12:25 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus Das Selektieren sollt am einfachsten über Selectelement2 gehen. (siehe Forensuche und Doku) Um "verboten Zeichen" zu entfernen könntest du über Zeichenketten-Methoden diese suchen und ersetzen (mehrfaches Replace mit allen "verbotenen Zeichen" siehe zB hier) Vor dem Speichern könntest du mit "FileExists" des FileSystem-Object prüfen ob es die Datei schon gibt, wenn ja den Dateinamen entsprechend anpassen. Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 322 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 24. Feb. 2015 13:17 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von bgrittmann: Servus Das Selektieren sollt am einfachsten über Selectelement2 gehen. (siehe Forensuche und Doku) Um "verboten Zeichen" zu entfernen könntest du über Zeichenketten-Methoden diese suchen und ersetzen (mehrfaches Replace mit allen "verbotenen Zeichen" siehe zB hier) Vor dem Speichern könntest du mit "FileExists" des FileSystem-Object prüfen ob es die Datei schon gibt, wenn ja den Dateinamen entsprechend anpassen.Gruß Bernd
Halo Bernd Ich habe Mal Zwischenzeit das Namen-Duplizierung Problem mit zusatzlische Index gelöst :)
Code:
myname = Left(drwdoc.FullName, Len(drwdoc.FullName) - 11) & "_" & drwsheet.Name & "_" & drwtable.Name & "_" & k & ".xlsx"
Ich will aber eine spezifische Tabellen aus "Collection" rausschmeißen :). Die Tabellen heissen immer Zitat: RevisionTable_Table
Code: drwtables.Remove "RevisionTable_Table"
loescht mir die Tabellen aus der Zeichnung statt aus der Selektion Ich muss auch der erste Blatt (Baugruppe Uebersicht)und der letzte Blatt (2D-Componente) aus drwsheets loeschen. Was interesiert mir noch, ist warum Code: drwsheets.item(2).name
gibts mir der Name von dem letzte Sheet from die Zeichnung... Und der Letzte: Wie kann ich die Tabellen zusammenfassen und nur ein Excel-Datei kriegen?
[Diese Nachricht wurde von Sylas am 24. Feb. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 24. Feb. 2015 20:28 <-- editieren / zitieren --> Unities abgeben: Nur für Sylas
Servus zu 1) Du musst auch die Selektion ansprechen und nicht die DrawingTabel-Collection. zB Code: oSelection.Remove(3)
zu 2) Die Reihenfolge der Sheets in der Sheets-Collection entspricht nicht immer der Reihenfolge wie in der Anzeige. ggf bekommst du das Sheet mit den 2D-Components am einfachsten über die Abfrage nach "IsDetail". Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|