SolidWorks机械工程师网——最大的SolidWorks学习平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

好品数字
好品数字
楼主: jcdgdou
打印 上一主题 下一主题

Excel 批量修改SW档案属性 (无需 SWDM-API 许可号码)

  [复制链接]

6

主题

44

帖子

34

金币

天使

Rank: 2Rank: 2

积分
125
QQ
61#
发表于 2015-1-1 22:30:06 | 只看该作者
难道大佬的中文是那么不济?一再让丹哥误会了。

“换来XX的骂名”,大佬的意思是“给某人谩骂成XX”,而非“给XX谩骂”。
估计大佬是加分最松手、提供教程设限最少,学习门槛最低 的笨蛋,怎么经常被误会曲高和寡、故作神秘呢?




加上丹哥以“点评”查问,大佬只能无奈地以这种方式回答,万分抱歉。
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

3

主题

44

帖子

21

金币

天使

Rank: 2Rank: 2

积分
100
QQ
62#
发表于 2015-1-4 00:08:59 | 只看该作者
非也!非也!是我自己没看清楚,以为大佬给人谩骂了~~

谢谢大佬回覆!
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

6

主题

48

帖子

34

金币

天使

Rank: 2Rank: 2

积分
134
QQ
63#
发表于 2015-1-8 10:59:16 | 只看该作者
俺笨熊非常贊同大佬的构想(集中开启和保存),否则Excel里每个按钮指令都会再执行一遍开始及保存。

俺要做这个Excel的起因是:
项目期常常需要出报价单(且时间紧迫),如果手动制作的话,费时费力;
又因为报价单常常需要以下几个关键参数:零件名称,图片,材质,重量,最大外形尺寸,数量等。
所以想修改批量修改属性达到需求。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

8

主题

50

帖子

47

金币

天使

Rank: 2Rank: 2

积分
149
QQ
64#
发表于 2015-1-8 22:15:53 | 只看该作者
谢谢浣熊大说出意图(当然越早说出动机就越好),原来用来辅助报价,而不是单纯用来管理属性,这样问题就出来了,就是读取到的属性值时,应读取『数式』还是『结果』(参见本帖45-56楼)。

以管理属性的角度而言,读取『数式』是必然的,但用来辅助报价,那就必须读取『结果』了,如何兼容诉求?

初步分别有两个构思都可解决的:
1. 编写一个能把註释与值对调的宏,读取属性后,复制到报价单对调一下来解决。
2. 读取属性时,值写到cell,数式写到註释(刚好与现行的相反);另外数式与值相同就不写到註释,以减少那些刺眼的红色小三角形。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

35

帖子

15

金币

天使

Rank: 2Rank: 2

积分
58
QQ
65#
发表于 2015-1-9 09:10:32 | 只看该作者

   经典案例图书
非常感谢大佬,这么晚还给笨熊出解决方案。辛苦啦……
大佬的两个方案都非常贊,相对来讲,个人更倾向于方案1(还能兼容管理属性的功能).
因为Excel输出的内容用于报价时,会再行复制相关内容到新的Excel进行适当的编辑,所以对调宏相对来讲可能会更符合其意图。

另:俺笨熊最初的构想是出两个Excel(一个Excel用于输出数值,一个Excel用于输出表达式),或者Excel内做两个按钮指令(一个用于输出数值,一个用于输出表达式),完全属于土法炼钢。还是大佬的方案贴合实际需求。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

5

主题

43

帖子

30

金币

天使

Rank: 2Rank: 2

积分
102
QQ
66#
发表于 2015-1-10 08:18:55 | 只看该作者
有劳测试以下“获取属性名称”的代码:
Sub GetPropNames()
Set swApp = CreateObject("SldWorks.Application")
Dim PropList() As String '属性名称阵列
Dim FilePathName As String
Dim i As Integer
HeaderRow = 2 '设定表头列(常数)
RowNumber = HeaderRow + 1 '设定内容开始列(变数)
PathName = Cells(RowNumber, 1) '读取第一个路径的值
ReDim PropList(0)
PropList(0) = "" '避免比对名称时出错
PropLeft = 4 '属性名称左端位置(常数)
PropRight = PropLeft '属性名称右端位置(变数)
PropName = Cells(HeaderRow, PropRight)
While Not (PropName = "" Or PropName = 0 Or IsEmpty(PropName)) '把表中的现有属性名称记录到属性名称阵列
  ReDim Preserve PropList(PropRight - 3)
  PropList(PropRight - 3) = PropName
  PropRight = PropRight + 1 '下一栏
  PropName = Cells(HeaderRow, PropRight)
Wend
While Not (PathName = "" Or PathName = 0 Or IsEmpty(PathName)) '直到读完路径栏
  Filename = Cells(RowNumber, 2)
  FileExtname = UCase(Right(Cells(RowNumber, 2), 6))
  If "SLDPRT" = FileExtname Then swFileTYpe = 1
  If "SLDASM" = FileExtname Then swFileTYpe = 2
  If "SLDDRW" = FileExtname Then swFileTYpe = 3
  If "SLDLFP" = FileExtname Then swFileTYpe = 1
  Set swDoc = swApp.OpenDoc(PathName & Filename, swFileTYpe) '开启档案
  If Not swDoc Is Nothing Then '排除无效档案
  swConfigName = Cells(RowNumber, 3)
  vCustPropNameArr = swDoc.GetCustomInfoNames2(swConfigName)
  If TypeName(vCustPropNameArr) = "String()" Then
     For Each vCustPropName In vCustPropNameArr
     inlist = False
     For Each PropItem In PropList '比对名称是否已存在
      If vCustPropName = PropItem Then inlist = True
     Next
     If Not inlist Then '不存在即加入到属性名称阵列
      ReDim Preserve PropList(UBound(PropList) + 1)
      PropList(UBound(PropList)) = vCustPropName
     End If
    Next
  End If
  Cells(RowNumber, 1).Interior.Color = RGB(200, 200, 255)
  swApp.CloseDoc PathName & Filename '关闭档案
  End If  '排除无效档案<完>
  RowNumber = RowNumber + 1 '下一列
  PathName = Cells(RowNumber, 1)
Wend '回到>直到读完路径栏
PropRight = PropLeft '属性名称右端位置(变数)
For i = 1 To UBound(PropList)
  Cells(HeaderRow, PropRight) = PropList(i)
  Cells(HeaderRow, PropRight).Font.Bold = True
  PropRight = PropRight + 1
Next
End Sub

复制代码
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

2

主题

32

帖子

16

金币

天使

Rank: 2Rank: 2

积分
61
QQ
67#
发表于 2015-1-15 11:20:11 | 只看该作者

   经典案例图书
谢谢大佬的代码,试用效果非常完美(可兼顾自定义属性与配置特定属性)。如下图:




PS:正在尝试修改“删除属性”的代码,一步步来,看是否可以成功。……
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

1

主题

44

帖子

8

金币

混混

Rank: 1

积分
42
QQ
68#
发表于 2015-1-18 12:46:59 | 只看该作者
“删除属性”的代码修改,俺笨熊暂时还搞不定(俺太缺乏编程常识啦,得自行多补补课)。希望各位多多指点下啊。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

6

主题

49

帖子

45

金币

天使

Rank: 2Rank: 2

积分
150
QQ
69#
发表于 2015-1-20 10:15:25 | 只看该作者
再次感谢大佬的指点。
首先打开总装(载入到内存,不退出),然后获取名称,读取,写入属性(取消其中关闭档案代码)等,速度明显快很多;
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

6

主题

47

帖子

40

金币

天使

Rank: 2Rank: 2

积分
135
QQ
70#
发表于 2015-1-20 12:44:48 | 只看该作者
接续:但是批量图片输出保存的全部都是总装的图片,如下图:



如果关闭总装后,再执行“等轴侧图片”的话,一切正常。
俺笨熊不知道该如何修正这个异常,还望各位指导下啊。谢谢!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

4

主题

57

帖子

21

金币

天使

Rank: 2Rank: 2

积分
110
QQ
71#
发表于 2015-1-20 15:58:07 | 只看该作者
附上俺笨熊根据各位大佬的代码拼凑出的SW-API的批量修改属性。
SW API.xls (107 KB, 下载次数: 94)

其中有以下仍未解决:
1.“删除属性”的按钮不可用。
2.在SW打开总装的前提下,“等轴侧图片”会出现异常。
3.关于属性数值与表达式的对调宏,俺笨熊暂时也搞不定。
虽说俺笨熊的附件问题多多,但一定程度上还是可以辅助工作的。在此感谢各位的指导。
期待改进!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

4

主题

46

帖子

29

金币

天使

Rank: 2Rank: 2

积分
119
QQ
72#
发表于 2015-1-21 15:06:30 | 只看该作者
试下以下删除属性的代码
Const HeaderRow = 2 '表头列
Const PropLeft = 4 '属性名称左端栏位

Sub DeleteProps()
yn = MsgBox("Once Deleted, those cannot be restored. Continue?", vbYesNo)
If yn <> 6 Then Exit Sub
Set swApp = CreateObject("SldWorks.Application")
RowNumber = HeaderRow + 1
PathName = Cells(RowNumber, 1) & "" '读取第一个路径的值
While Not (PathName = "")'直到读完路径栏
  FileName = Cells(RowNumber, 2)
  FileExtname = UCase(Right(Cells(RowNumber, 2), 6))
  If "SLDPRT" = FileExtname Then swFileTYpe = 1
  If "SLDASM" = FileExtname Then swFileTYpe = 2
  If "SLDDRW" = FileExtname Then swFileTYpe = 3
  If "SLDLFP" = FileExtname Then swFileTYpe = 1
  If Not (swFileTYpe = 3 And FileName = Cells(RowNumber - 1, 2)) Then
  Set swDoc = swApp.OpenDoc(PathName & FileName, swFileTYpe) '开启档案
  ColumnNumber = PropLeft
  PropName = Cells(HeaderRow, ColumnNumber) & ""
  While Not (PropName = "")'直到读完表头
    If Not (Left(PropName, 1) = "$" And Right(PropName, 1) = "$") Then
      swDoc.DeleteCustomInfo2 Cells(RowNumber, 3), PropName
    End If
    ColumnNumber = ColumnNumber + 1 '下一栏
    PropName = Cells(HeaderRow, ColumnNumber)
  Wend '回到>直到读完表头
  Cells(RowNumber, 1).Interior.Color = RGB(255, 50, 50)
  Else
  Cells(RowNumber, 1).Interior.Pattern = xlNoneColor
  End If
  RowNumber = RowNumber + 1 '下一列
  PathName = Cells(RowNumber, 1) & ""
Wend '回到>直到读完路径栏
End Sub

复制代码
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

7

主题

42

帖子

38

金币

天使

Rank: 2Rank: 2

积分
125
QQ
73#
发表于 2015-1-21 17:44:40 | 只看该作者
谢谢大佬分享代码。此代码试用正常(不过俺笨熊有在后面加了一句“保存零件”的代码)。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

3

主题

48

帖子

25

金币

天使

Rank: 2Rank: 2

积分
65
QQ
74#
发表于 2015-1-21 21:11:10 | 只看该作者
在SW API Help中找到visible函数,说明如下:



可俺笨熊还是不知道该如何写这句代码(俺笨熊基础太凄惨啦),
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

8

主题

46

帖子

42

金币

天使

Rank: 2Rank: 2

积分
132
QQ
75#
发表于 2015-1-22 08:45:22 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

这是实体的函数啊。

建议这样改:

在此句以下
Set Part = swApp.OpenDoc(PathName & Filename, 1) '开启零件

加多这2句
Dim swerr As Long
Set Part = swApp.ActivateDoc2(PathName & FileName, True, swerr)
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

4

主题

46

帖子

35

金币

天使

Rank: 2Rank: 2

积分
127
QQ
76#
发表于 2015-1-22 19:18:03 | 只看该作者

   经典案例图书
跟随浣熊大的脚步, 大佬也修订了一下.
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

2

主题

43

帖子

15

金币

天使

Rank: 2Rank: 2

积分
66
QQ
77#
发表于 2015-1-22 20:32:44 | 只看该作者
加入QQ群
参与讨论和学习

SolidWorks技术交流群

或扫描二维码加入

预览图片会自动跟随栏位宽度做调整



SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

4

主题

51

帖子

21

金币

天使

Rank: 2Rank: 2

积分
113
QQ
78#
发表于 2015-1-24 09:27:07 | 只看该作者

   经典案例图书
增加了5大功能:
1. 删除零件和组合件冗余模型组态
2. 批次修改模型组态名称
3. 批量修改工程图图纸名称
4. 匯入预览图片(无需中继档案)
5. 批次输出多种格式
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

4

主题

53

帖子

21

金币

天使

Rank: 2Rank: 2

积分
74
QQ
79#
发表于 2015-1-26 19:13:41 | 只看该作者
大佬的程式码功能非常完美。制作的图表真漂亮,赏心悦目啊。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

0

主题

36

帖子

6

金币

混混

Rank: 1

积分
15
QQ
80#
发表于 2015-1-27 17:07:22 | 只看该作者
非常赞的新增功能。可否请大佬分享下4与5项新增功能的代码(俺笨熊心痒痒,自己却搞不定。只能做伸手党啦,),谢谢!
4. 匯入预览图片(无需中继档案)
5. 批次输出多种格式
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭 卷起
关闭 卷起

手机版|小黑屋| GMT+8, 2024-5-3 22:46 , Processed in 0.266325 second(s), 30 queries .

SolidWorks机械工程师网 ( 鲁ICP备14025122号-2 ) 鲁公网安备 37028502190335号

声明:本网言论纯属发表者个人意见,与本网立场无关。
如涉版权,可发邮件: admin@swbbsc.com

快速回复 返回顶部 返回列表