SOLIDWORKS 專門論壇 SolidWorks forum

 找回密碼
 註冊
查看: 42964|回復: 204
收起左側

利用 Excel 批量修改SW檔案屬性 (無需 SWDM-API 許可號碼)

  [複製鏈接]
發表於 2014/10/20 18:31:57 | 顯示全部樓層 |閱讀模式
詳見6樓

利用 Excel 批量修改SW檔案自訂屬性及模型組態指定 (無需 SWDM-API 許可號碼)
clx.gif
發表於 2014/10/21 09:20:52 | 顯示全部樓層
悶大早安。這個無需許可號的 SW-API 也的確好使的~
有一個大問題想請教悶大:
它是否也能像 SWDM 一樣,在讀取和寫入屬性時,整合檔案類型呢?
(下面貼個圖,是我自己用悶大的代碼亂搞的,結果竟然可以用!但就是多了幾個鈕…)

2014-10-21 上午 09-11-32.png
發表於 2014/10/21 10:17:48 | 顯示全部樓層
這個也是速度飛快阿~~~謝謝悶大 emo_003.gif

悶大這代碼有用上之前提過的"以顏色顯示檔案是否已經被處理"對嗎? 這樣真方便ㄟ emo_009.gif


晚點應該可以試用"
http://www.solidworks.org.tw/for ... 9&fromuid=26509
提取工程圖內的零組件屬性",試用完再來向您報告。
發表於 2014/10/21 22:37:06 | 顯示全部樓層
Francis 發表於 2014/10/21 17:37
是不是丹哥自行成功修改程式碼整合了檔案的不同類型呀?

可知道悶人還沒成功整合檔案類型, 因為零件和組 ...

回覆悶哥~

這3段代碼我有測試成功~
只是我少用工程圖屬性,我比較需要零件的屬性

真的很想整合檔案不同類型~
但是VBA 近期才知道它(因為悶哥這2篇教學)~VBA真的很不熟~也不懂
所以只能用悶哥給的代碼跟中文意思
去試試看~不過還是失敗~

寫入屬性的程式碼.txt

2.79 KB, 下載次數: 443

選擇檔案的程式碼.txt

2.27 KB, 下載次數: 284

讀取屬性的程式碼.txt

1.07 KB, 下載次數: 383

發表於 2014/10/22 01:21:43 | 顯示全部樓層
Francis 發表於 2014/10/21 17:37
是不是丹哥自行成功修改程式碼整合了檔案的不同類型呀?

可知道悶人還沒成功整合檔案類型, 因為零件和組 ...

回悶大,謝謝您還在幫大家思考更深入的使用方式。
您一定一眼就看出阿丹就是依您的代碼更改打開的類型而已…實屬瞎整的,
不敢說有方向…更遑論說「已解決」呀!!!
期待大家更進一步的討論和悶大的教程!
 樓主| 發表於 2014/10/28 18:36:46 | 顯示全部樓層
阿丹曾經要求過整合類型及配置(模型組態),經過一番努力後,找到了笨拙的對應方法。

因為自訂屬性和組態指定都有人採用,是必須顧及的,所以分為5種類型,分別是零件、零件含組態、組合件、組合件含組態和工程圖,如下圖:
2.png
模型組態方面的難處是,組態屬於每個檔案的分支,而Excel的表單是二維的,要在同一表單同時處理三類的資料(檔案名稱、組態名稱及屬性),原則上是不可能的,
唯有把檔案名稱和組態名稱合二為一,每一個模型組態當成是獨立的檔案來看待,這樣就可以套用於二維的Excel表單上了,如下圖:
1.png

Excel檔案的說明:
1. 首列是用來安放按鈕,第二列是正式表頭,第三列起是資料內容。
2. 除了首三個欄位(路徑、檔案名稱及組態名稱),之後的都是屬性名稱,可隨意修改或添加,沒有上限的。
3. 選擇檔案時可以同時選擇多個檔案,點選後再次點選的話,就會往下繼續添加,注意是不會過濾重複檔案的。
4. 可以利用Excel本身功能快速清空表單,例如框選後按Delete鍵。
5. 在還未熟練前,不要直接以有用資料來做實驗,可以複製到別處試驗,以免因失誤搞壞資料。
SW-API.rar (15.1 KB, 下載次數: 2683)
發表於 2014/10/28 18:57:52 | 顯示全部樓層
Francis 發表於 2014/10/28 18:36
阿丹曾經要求過整合類型及配置(模型組態),經過一番努力後,找到了笨拙的對應方法。

因為自訂屬性和組態 ...

悶大辛苦的成果,我不客氣收下了。

謝謝悶大無私分享寶貴作品。 emo_016.gif

雖然說悶大有設定解壓縮密碼,但是被我誤打誤撞矇到了。可以勞煩悶大公佈給其他人嗎?或者是讓我代其勞?
 樓主| 發表於 2014/10/28 21:25:37 | 顯示全部樓層
臭臉翔 發表於 2014/10/28 18:57
悶大辛苦的成果,我不客氣收下了。

謝謝悶大無私分享寶貴作品。

謝臭弟及梧桐提醒,已經加上提示字句。(按Ctrl+A看密碼)

發表於 2014/10/31 16:58:23 | 顯示全部樓層
这个适用于2015版

能不能做成SWDM-API 的样式
(很贪婪)
發表於 2014/10/31 17:18:42 | 顯示全部樓層
wutong490 發表於 2014/10/31 16:58
这个适用于2015版

能不能做成SWDM-API 的样式

原因好像是出在"許可碼"
 樓主| 發表於 2014/10/31 22:20:18 | 顯示全部樓層
wutong490 發表於 2014/10/31 16:58
这个适用于2015版

能不能做成SWDM-API 的样式

可以的,現在開始修改,改好後會連同代碼一起貼出來。
(注意:這是慢速版本啊)

如有2015的許可號碼,可自行製作快速版本,詳見連接:
http://www.solidworks.org.tw/for ... =210422&fromuid=151
 樓主| 發表於 2014/11/14 14:42:17 | 顯示全部樓層
臭臉翔 發表於 2014/10/31 17:18
原因好像是出在"許可碼"

臭弟誤會了梧桐兄的意思了。


完整句子是:
試過这个無需 SWDM-API 許可號碼的程序适用于2015版

能不能改良一下這個程序做成與需要SWDM-API許可號碼那個程序 的样式一樣呢?
我是不是很贪婪呀?


先要向可能會產生Hard Feeling的臭弟說句不好意思,不是在挑剔臭弟,而是犧牲臭弟頂出糗例子,希望可以提倡互相體諒的意識,可讓往後討論更為暢順。

另外,正在歸納臭弟的『從總組件開啟往下所有相關工程圖的巨集』,看看能否與這一個程序融合,還在努力中,請臭弟稍等。
發表於 2014/11/14 14:59:49 | 顯示全部樓層
Francis 發表於 2014/11/14 14:42
臭弟誤會了梧桐兄的意思了。


完整句子是:

原來是這樣阿

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

悶哥放心,我習慣從錯誤中學習

真的麻煩你了,一直記得我的需求與學習。

我正在加緊工作進度,想早點把"推車"給完成 emo_058.gif
發表於 2015/11/27 16:07:53 | 顯示全部樓層
愚鈍的肉腳此篇花了許久的時間研究
終於理解如何使用
由衷的感謝悶哥無私分享與教導後輩
也感謝其他參與討論的前輩 , 讓此程式碼更完整
肉腳底子不夠厚實 , 看起程式碼頗為吃力
實在不敢任意參與討論 , 請見諒
此工具搭配隨身攜帶整套,零件,組件,工程圖
事半功倍 , 相當好用

批量修改工程圖屬性.gif
發表於 2015/11/27 16:46:28 | 顯示全部樓層
提供一下么感激不尽,我在好多论坛里求助都没找到,终于找到了,我有急用
發表於 2015/11/27 17:23:47 | 顯示全部樓層
哈哈谢谢分享,试用了一下非,常好用,要是能改“配置特定”就更完美啦
發表於 2015/12/26 22:25:26 | 顯示全部樓層
利用 Excel 批量修改SW檔案屬性 (無需 SWDM-API 許可號碼)
今天来学习,明天来回报
發表於 2015/12/31 10:06:39 | 顯示全部樓層
新人學習ING 以往公司不需要 可是新公司以前的設計都是外包
現在要收回來 圖面 圖號 圖名 各種雜亂
發表於 2016/1/25 10:35:01 | 顯示全部樓層
我在找2016版本的
發表於 2016/1/25 10:58:36 | 顯示全部樓層
Francis 發表於 2014/10/28 18:36
阿丹曾經要求過整合類型及配置(模型組態),經過一番努力後,找到了笨拙的對應方法。

因為自訂屬性和組態 ...


太感謝.....最近正頭疼這事呢!   
發表於 2016/4/16 20:25:04 | 顯示全部樓層
最近做一个小项目需要经常参考前期的图纸。改名和改属性成了我头痛的问题现在找到组织了。都是大神啊
發表於 2016/4/16 20:26:03 | 顯示全部樓層
Francis 發表於 2014/10/28 18:36
阿丹曾經要求過整合類型及配置(模型組態),經過一番努力後,找到了笨拙的對應方法。

因為自訂屬性和組態 ...

最近做一个项目需要经常参考前期的图纸。改名和改属性成了我头痛的问题。现在找到组织了。
 樓主| 發表於 2016/4/22 17:42:47 | 顯示全部樓層
看到通知有人回帖,回顧一下,發現還未改善當超過20組態就會報錯的情況。
加入下圖紅框的語句即可:
SNAG-0000.png
 樓主| 發表於 2016/4/22 17:56:05 | 顯示全部樓層
發現附件的程式碼加密了,不利大家學習。
三段的程式碼見附件:

Excel 批量修改SW檔案屬性(選取檔案).txt (5.47 KB, 下載次數: 298)
 樓主| 發表於 2016/4/22 19:25:35 | 顯示全部樓層
從【零件批量轉 3D PDF】一帖中:
http://www.solidworks.org.tw/forum.php?mod=viewthread&tid=30792
丹哥努力不懈不斷求進,實在難得。

個人覺得利用這個Excel巨集,略作補充,就可以增加“批量轉 3D PDF”的功能,效益可能更大。
建議做法如下:
先複製整段(將表格內容寫入到檔案)的程式碼到最下端,按下圖修改:
SNAG-0002.png
1. 給一個新的程序名稱,例如“Output_3D_PDF”
2. 建議按照自己常用的版本修改程式碼,SW2015版本為例,Application改為Application.23
3. 插入3句程式碼
  1. swApp.Visible = True '讓SW呈現出來
  2. LoadExternalReferences = swApp.GetUserPreferenceIntegerValue(82) '記錄開啟參開檔案的選項
  3. swApp.SetUserPreferenceIntegerValue 82, 2 '設定為不開啟參開檔案
複製代碼
4. 刪除3句用作修改屬性的程式碼(不刪除也不影響的)
5. 把儲存檔案的那一句程式碼改為以下的程式碼
  1.         MyPathName = Cells(1, 3) '讀取儲存格C1作為輸出位置
  2.         If (PathName = "" Or PathName = 0 Or IsEmpty(PathName)) Then MyPathName = PathName '如果C1沒有內容則用源文件的位置
  3.         If Right(MyPathName, 1) <> "" Then MyPathName = MyPathName & "" '檢查字串最後的字符是否“/”
  4.         Select Case swFileTYpe
  5.             Case 1
  6.                 MyFileName = Left(Filename, InStrRev(Filename, ".") - 1) & "_" & ConfigName & "(3D).pdf"
  7.             Case 2
  8.                 MyFileName = Left(Filename, InStrRev(Filename, ".") - 1) & "_" & ConfigName & "(3D-Assembly).pdf"
  9.             Case 3
  10.                 MyFileName = Left(Filename, InStrRev(Filename, ".") - 1) & "_" & ConfigName & "(2D-Drawing).pdf"
  11.         End Select
  12.         Set swExportPDFData = swApp.GetExportFileData(1)
  13.         swExportPDFData.ExportAs3D = True
  14.         SaveOk = swDoc.Extension.SaveAs(MyPathName & MyFileName, 0, 0, swExportPDFData, lErrors, lWarnings)
複製代碼
6. 修改RGB的數值,讓儲存格以不同顏色代表剛完成過不同的功能。如200,255,200是淺綠色。
7. 插入以下程式碼
  1. swApp.SetUserPreferenceIntegerValue 82, LoadExternalReferences '還原已記錄的開啟參開檔案的選項
複製代碼
修改後的程式碼在附件TXT檔案中,但建議按以上資料,先動手修改及除錯,以臨摹的方式學習如何編程。
Excel 批量轉 3D PDF.txt (5.12 KB, 下載次數: 179)
發表於 2016/4/22 23:40:09 | 顯示全部樓層
Francis 發表於 2016/4/22 19:25
從【零件批量轉 3D PDF】一帖中:
http://www.solidworks.org.tw/forum.php?mod=viewthread&tid=30792
丹哥 ...

謝謝悶哥,週末人在外地,晚些回覆您參加討論
 樓主| 發表於 2016/4/23 09:54:52 | 顯示全部樓層
gt.adan 發表於 2016/4/22 23:40
謝謝悶哥,週末人在外地,晚些回覆您參加討論

恐怕丹大此話一出,其他人就不會參與討論了。
發表於 2016/4/25 09:45:36 | 顯示全部樓層
你們這些鬼!悶哥說沒有人討論,還真的…沒有人!?
這下我被悶哥打臉打腫啦!
手頭沒有2015,回家開2016討論!
 樓主| 發表於 2016/4/26 13:20:25 | 顯示全部樓層
gt.adan 發表於 2016/4/25 09:45
你們這些鬼!悶哥說沒有人討論,還真的…沒有人!?
這下我被悶哥打臉打腫啦!
手頭沒有2015,回 ...

就算只有SW2010+Excel2000也可以用的。

務請注意文中是說“SW2015版本為例”,而非“SW2015版本的例”。

ps:解說一下:
丹大例,擁有牽動討論的魅力......——即是說這是丹大云云過去例子中的其中一個,可能還有:風趣幽默的談吐、鍥而不捨的個性及敢作敢為的態度。
丹大例,擁有牽動討論的魅力......——即是說除了丹大以外,還有其他人也擁有牽動討論的魅力,可以跟丹大一樣,成為網路神人。
發表於 2016/4/26 16:39:46 | 顯示全部樓層
Francis 發表於 2016/4/26 13:20
就算只有SW2010+Excel2000也可以用的。

務請注意文中是說“SW2015版本為例”,而非“SW2015版本的例”。

悶哥,一開始就GG了…
11.PNG

好像少了宣告…後來加上這一行…就成功了耶!!!
  1.         Dim swExportPDFData     As SldWorks.ExportPdfData
複製代碼

另外請教悶哥,步驟5的第2行代碼…是不是要改成這樣才會儲存在對的資料夾呀…
  1.         If (MyPathName = "" Or MyPathName = 0 Or IsEmpty(MyPathName)) Then MyPathName = PathName '如果C1沒有內容則用源文件的位置
複製代碼



發表於 2016/4/26 18:05:23 | 顯示全部樓層
貼上操作成功的過程。謝謝悶哥~~^^

GIF.gif
 樓主| 發表於 2016/4/26 18:35:28 | 顯示全部樓層
gt.adan 發表於 2016/4/26 16:39
悶哥,一開始就GG了…

終於等到丹兄施展魅力了。

是的,悶人此舉可說是“故意的錯誤”,好讓吃下天降餡餅時帶點難度,看似麻煩實屬有益無害,絕對是“良心食品”。

希望“故意的錯誤”不要變成“錯誤的故意”,謝謝!
發表於 2016/4/27 09:55:35 | 顯示全部樓層
Francis 發表於 2016/4/22 17:56
發現附件的程式碼加密了,不利大家學習。
三段的程式碼見附件:

感谢闷大无私分享
个人在运行时有这种问题,读取属性是读取的数值/表达式内的数据,而不是读取评估的值里的数据,比如材料或者重量之类的属性
001.jpg
002.jpg

经过修改后可以得到评估的值里的数据
修改后代码如下,但是不知正确与否,还望闷大指正
读取属性的值.txt (1.78 KB, 下載次數: 1074)
 樓主| 發表於 2016/4/27 13:38:28 | 顯示全部樓層
DaveChan 發表於 2016/4/27 09:55
感谢闷大无私分享
个人在运行时有这种问题,读取属性是读取的数值/表达式内的数据,而不是读取评估的值里 ...

谢谢讨论。
应读取『数式』还是『结果』,是值得讨论的。

闷人选择读取『数式』是顾及到还有『將表格內容寫入到檔案』这个功能,如果写入到档案是『结果』,档案的属性就会变成固定值,比如零件设变后质量改变了,零件的质量属性也不会更新了。

闷人还没想出一个两全其美的做法,希望各位可以提出不同见解及想法,集思广益,让问题得以解决。
發表於 2016/4/27 14:11:04 | 顯示全部樓層
Francis 發表於 2016/4/27 13:38
谢谢讨论。
应读取『数式』还是『结果』,是值得讨论的。

谢谢闷大回复

写入属性的话,是不会写到『结果』的吧,在文档里面手动操作,『结果』那一栏都是灰色的,不允许写入任何东西,只允许在『数式』里面写,不知道我的理解对不对
 樓主| 發表於 2016/4/27 14:22:26 | 顯示全部樓層
DaveChan 發表於 2016/4/27 14:11
谢谢闷大回复

写入属性的话,是不会写到『结果』的吧,在文档里面手动操作,『结果』那一栏都是灰色的, ...

与SW的UI无关的。

只要试一下你自己的建议(代码),然后执行『將表格內容寫入到檔案』,就会明白闷人的意思。
 樓主| 發表於 2016/4/27 14:36:45 | 顯示全部樓層
测试如下:
下图是原来的属性
SNAG-0017.png

用了45楼的代码,变成这样
SNAG-0018.png

發表於 2016/4/27 15:05:26 | 顯示全部樓層
Francis 發表於 2016/4/27 14:36
测试如下:
下图是原来的属性

现在明白闷大的意思了
我是这样想的:
1.可否在写入属性时,由用户自行删除有表达式的属性,然后再执行『將表格內容寫入到檔案』(这个比较好执行)
2.将重量,材料类似这些属性有表达式的属性,不执行写入属性功能
3.可否由程序判断表达式的关键字眼,例如“PRP”,“___.SLDPRT”之类的,然后过滤掉这些属性的写入
 樓主| 發表於 2016/4/27 15:46:08 | 顯示全部樓層
DaveChan 發表於 2016/4/27 15:05
现在明白闷大的意思了
我是这样想的:
1.可否在写入属性时,由用户自行删除有表达式的属性,然后再执行『 ...

明白你的意思,希望读取到Excel表格后,不会出现一大堆看似没意义的『数式』,可以直接看到『评估值』。

说实话,评估值只不过是一个『结果』,而非真正的数据;绝对有必要采用『数式』,连接出零组件的核心数据。

如果单纯为了“养眼”,把事情搞得越来越复杂,忌讳多罗罗,而带来诸多不便,自动化的观念就荡然无存了。
 樓主| 發表於 2016/4/27 15:59:28 | 顯示全部樓層
话说回来,“养眼”也是一个合理要求,可以尝试Excel的注释,那就可以既看到又不影响了。
SNAG-0023.png
SNAG-0024.png

發表於 2016/4/27 16:10:31 | 顯示全部樓層
Francis 發表於 2016/4/27 15:46
明白你的意思,希望读取到Excel表格后,不会出现一大堆看似没意义的『数式』,可以直接看到『评估值』。
...

谢谢闷大的讨论
看来我的这个想法确实是无意义的
發表於 2016/4/27 16:16:26 | 顯示全部樓層
Francis 發表於 2016/4/27 15:59
话说回来,“养眼”也是一个合理要求,可以尝试Excel的注释,那就可以既看到又不影响了。

感谢闷大
这样确实是又养眼,又不影响使用了
 樓主| 發表於 2016/4/27 16:19:37 | 顯示全部樓層
DaveChan 發表於 2016/4/27 16:10
谢谢闷大的讨论
看来我的这个想法确实是无意义的

不用泄气,意念不错,45楼的代码也很好,可读取『结果』,略作修改,就可以把『结果』加入到注释,改后的代码如下
  1.             Dim val As String
  2.             Dim valout As String
  3.             Dim bool As Boolean
  4.             Set swModelDocExt = swDoc.Extension
  5.             Set swCustProp = swModelDocExt.CustomPropertyManager(Cells(RowNumber, 3))
  6.             bool = swCustProp.Get4(PropName, False, val, valout)
  7. '            Cells(RowNumber, ColumnNumber) = valout '此句可删
  8.             Cells(RowNumber, ColumnNumber).ClearComments
  9.             Cells(RowNumber, ColumnNumber).AddComment
  10.             Cells(RowNumber, ColumnNumber).Comment.Visible = False
  11.             Cells(RowNumber, ColumnNumber).Comment.Text Text:="評估值:" & Chr(10) & valout
複製代碼
發表於 2016/4/27 16:44:02 | 顯示全部樓層
Francis 發表於 2016/4/27 16:19
不用泄气,意念不错,45楼的代码也很好,可读取『结果』,略作修改,就可以把『结果』加入到注释,改后的 ...

谢谢闷大
修改后的效果 01.jpg
另外闷大可能又在做"故意的错误"
02.jpg


 樓主| 發表於 2016/4/27 18:25:50 | 顯示全部樓層
DaveChan 發表於 2016/4/27 09:55
感谢闷大无私分享
个人在运行时有这种问题,读取属性是读取的数值/表达式内的数据,而不是读取评估的值里 ...

没错,就是这个函数,转到高速版继续讨论吧。
http://www.solidworks.org.tw/for ... p;extra=&page=3
發表於 2016/6/4 20:33:45 | 顯示全部樓層
Francis 發表於 2014/10/28 18:36
阿丹曾經要求過整合類型及配置(模型組態),經過一番努力後,找到了笨拙的對應方法。

因為自訂屬性和組態 ...

能不能加入一列,用SW-API读取到“创建时间”?
發表於 2016/6/5 16:20:21 | 顯示全部樓層
whq2016 發表於 2016/6/4 20:33
能不能加入一列,用SW-API读取到“创建时间”?

可以,直接添加屬性名稱再讀取…
11.PNG
發表於 2016/6/5 18:09:47 | 顯示全部樓層
gt.adan 發表於 2016/6/5 16:20
可以,直接添加屬性名稱再讀取…

丹哥,能不能发个添加“创建日期”属性你修改的SWDM-API?还有我的SW是2016,属性-统计中是”创建时间“不是”创建日期“!
我刚开始学VBA,还不会写程序,能不能给我发个SWDM-API?谢谢!!

發表於 2016/6/5 18:29:22 | 顯示全部樓層
whq2016 發表於 2016/6/5 18:09
丹哥,能不能发个添加“创建日期”属性你修改的SW-API?
我没有许可号,能否用SWDM-API读取“创建日期”属 ...

沒記錯 SWDM-API 可以自行讀取的屬性值
與SW-API 是不同的~

所以SWDM-API應該不用添加"創建日期"
發表於 2016/6/5 18:39:25 | 顯示全部樓層
judyyai 發表於 2016/6/5 18:29
沒記錯 SWDM-API 可以自行讀取的屬性值
與SW-API 是不同的~

SWDM-API 可以自行讀取"创建日期“?
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版上論壇|論壇來自幾何科技

GMT+8, 2018/11/18 13:46 , Processed in 0.131379 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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