SolidWorks專門論壇 SolidWorks forum

 找回密碼
 註冊
查看: 27150|回復: 13

批量輸出零件圖片,如何修改代碼以便兼顧到多組態零件?

[複製鏈接]
發表於 2017/6/28 16:13:46 | 顯示全部樓層 |閱讀模式
以下為等軸側視角批量輸出零件圖片的代碼(此代碼為網絡上大大分享的,在此謝謝原代碼作者):
  1. Sub ISOJPGSAVE()
  2. Dim swApp As Object
  3. Dim PathNames() As String
  4. Dim FileNames() As String
  5. HeaderRow = 2
  6. RowNumber = HeaderRow + 1
  7. Fcount = 0
  8. Set swApp = CreateObject("SldWorks.Application") '啟動SW
  9. Set Part = swApp.ActiveDoc
  10. If Not (Part Is Nothing) Then
  11.     YN = MsgBox("Some files are still opened in SolidWorks, It may cause errors." & Chr(13) & "Press 'Yes' to Continue or press 'No' to close files then run again.", vbYesNo)
  12.     If YN <> 6 Then
  13.         Exit Sub
  14.     End If
  15. End If
  16. PathName = Cells(RowNumber, 1)
  17. Filename = Cells(RowNumber, 2)
  18. While Not (PathName = "" Or PathName = 0 Or IsEmpty(PathName)) '直到讀完路徑欄

  19.     Set Part = swApp.OpenDoc(PathName & Filename, 1) '開啟零件

  20. Part.ShowNamedView2 "*Isometrisch", 7     '等轴测显示
  21. Part.ViewZoomtofit2                        '视角最大化

  22. sFilename = Left(Filename, Len(Filename) - 6)

  23. sFilename = sFilename + "png"

  24. longstatus = Part.SaveAs3(PathName & sFilename, 0, 0) '存为JPG文件

  25. Part.Save '保存
  26. Cells(RowNumber, 2).Interior.Color = RGB(255, 200, 200) '保存单元格变色

  27. swApp.CloseDoc (PartFileName) '關閉零件

  28.     Fcount = Fcount + 1
  29.     RowNumber = RowNumber + 1 '下一列
  30.     PathName = Cells(RowNumber, 1)
  31.     Filename = Cells(RowNumber, 2)
  32. Wend '回到>直到讀完路徑欄


  33. If Not swApp.Visible Then
  34.     swApp.ExitApp
  35. End If
  36. MsgBox "以最大化等轴测显示保存文件并另存为JPG文件完成"
  37. End Sub
複製代碼
但此代碼,只能讀取硬盤裡存儲的零件檔案,無法兼顧到多組態零件。希望其輸出的圖片名稱格式為“零件檔案名稱+配置名稱”。該如何修改代碼,以便其兼顧帶多組態的零件呢?



發表於 2017/6/29 10:34:52 | 顯示全部樓層
樓主不厚道啊~只貼出部份代碼~
發表於 2017/6/29 13:05:44 | 顯示全部樓層

點評

謝謝悶大給的鏈接。  詳情 回復 發表於 2017/6/30 13:20
發表於 2017/6/30 11:43:06 | 顯示全部樓層
我有一樣的要求,所以之前就有試著修改代碼並且成功,用的參考正是悶哥的連結。
請注意除樓主貼圖的Sub以外,其他的如Sub BrowseDialog、Sub ISOJPGNOSAVE、Sub 自動插入圖片...也需修改。
看了一下要改的地方還真不少!我拋個磚,看樓主是不是有興趣自行研究一下~

  1. Sub ISOJPGSAVE()
  2. Dim swApp As Object
  3. Dim PathNames() As String
  4. Dim FileNames() As String
  5. HeaderRow = 2
  6. RowNumber = HeaderRow + 1
  7. Fcount = 0
  8. Set swApp = CreateObject("SldWorks.Application") '啟動SW
  9. Set Part = swApp.ActiveDoc
  10. If Not (Part Is Nothing) Then
  11.     YN = MsgBox("Some files are still opened in SolidWorks, It may cause errors." & Chr(13) & "Press 'Yes' to Continue or press 'No' to close files then run again.", vbYesNo)
  12.     If YN <> 6 Then
  13.         Exit Sub
  14.     End If
  15. End If
  16. PathName = Cells(RowNumber, 1)
  17. Filename = Cells(RowNumber, 2)
  18. ConfigName = Cells(RowNumber, 3)
  19. While Not (PathName = "" Or PathName = 0 Or IsEmpty(PathName)) '直到讀完路徑欄
  20.     Set Part = swApp.OpenDoc(PathName & Filename, 1) '開啟零件
  21. Part.ShowNamedView2 "*Isometrisch", 7     '等軸測顯示
  22. Part.ViewZoomtofit2                        '視角最大化
  23. sFilename = Left(Filename, Len(Filename) - 7) + ConfigName + ".jpg"
  24. longstatus = Part.SaveAs3(PathName & sFilename, 0, 0) '存為JPG文件
  25. Cells(RowNumber, 4) = sFilename '填寫JPG檔案名稱
  26. Part.Save '保存
  27. Cells(RowNumber, 2).Interior.Color = RGB(255, 200, 200) '保存單元格變色

  28. swApp.CloseDoc (PartFileName) '關閉零件
  29.     Fcount = Fcount + 1
  30.     RowNumber = RowNumber + 1 '下一列
  31.     PathName = Cells(RowNumber, 1)
  32.     Filename = Cells(RowNumber, 2)
  33.     ConfigName = Cells(RowNumber, 3)
  34. Wend '回到>直到讀完路徑欄

  35. If Not swApp.Visible Then
  36.     swApp.ExitApp
  37. End If
  38. MsgBox "已完成" & Fcount & "個JPG文件"
  39. End Sub
複製代碼



點評

謝謝分享代碼。該代碼解決了圖片名稱的問題。目前遇到多組態零件時,還是只打開默認的一個組態。 如圖(零件兩個組態的圖片名稱雖不同,但內容實為相同): [attachimg]207355[/attachimg] 打開多組態零件  詳情 回復 發表於 2017/6/30 13:12
 樓主| 發表於 2017/6/30 13:12:56 | 顯示全部樓層
gt.adan 發表於 2017/6/30 11:43
我有一樣的要求,所以之前就有試著修改代碼,用的參考正是悶哥的連結。
請注意除樓主貼圖的Sub以外,其他的 ...

謝謝分享代碼。該代碼解決了圖片名稱的問題。目前遇到多組態零件時,還是只打開默認的一個組態。
如圖(零件兩個組態的圖片名稱雖不同,但內容實為相同):
捕获.PNG
打開多組態零件時,該如何自動遍歷打開每個零件的組態呢?
不知道該調用哪個API 函數?






點評

小提示。你必需"顯示當前組態",否則代碼只是讀取組態名稱,而不會激活該組態  詳情 回復 發表於 2017/6/30 14:25
 樓主| 發表於 2017/6/30 13:20:04 | 顯示全部樓層
Francis 發表於 2017/6/29 13:05
請參考:
http://www.solidworks.org.tw/forum.php?mod=viewthread&tid=26079&extra=&page=1
37樓

謝謝悶大給的鏈接。
發表於 2017/6/30 14:25:49 | 顯示全部樓層
benson2013 發表於 2017/6/30 13:12
謝謝分享代碼。該代碼解決了圖片名稱的問題。目前遇到多組態零件時,還是只打開默認的一個組態。 ...

小提示。你必需"顯示當前組態",否則代碼只是讀取組態名稱,而不會激活該組態。
2017063003.PNG

點評

非常感謝提供代碼。試用後保存圖片及插入圖片正常。 [attachimg]207364[/attachimg] 另外的就是獲取屬性名稱及刪除屬性的代碼需要調整啦。 只能一步步慢慢來啦。  詳情 回復 發表於 2017/6/30 15:58
 樓主| 發表於 2017/6/30 15:58:09 | 顯示全部樓層
gt.adan 發表於 2017/6/30 14:25
小提示。你必需"顯示當前組態",否則代碼只是讀取組態名稱,而不會激活該組態。

...

非常感謝提供代碼。試用後保存圖片及插入圖片正常。
捕获.PNG
另外的就是獲取屬性名稱及刪除屬性的代碼需要調整啦。

只能一步步慢慢來啦。

發表於 2017/6/30 21:57:40 | 顯示全部樓層
建議跟帖討論,像這樣另開主題發問,只會讓討論支離破碎,難以跟進。

點評

謝謝提醒。 馬上轉過去。  發表於 2017/6/30 22:10
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版上論壇|論壇來自幾何科技 論壇架構版次 20240312

GMT+8, 2024/4/26 19:43 , Processed in 0.290175 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回復 返回頂部 返回列表