EDA365电子工程师网

标题: PADS生成bom脚本 [打印本页]

作者: qiangqaz    时间: 2018-6-26 18:44
标题: PADS生成bom脚本
pads生成bom时,无法达到自己的预期,所以干脆自己写吧,但是,我不会
作者: qiangqaz    时间: 2018-6-26 18:45
网上找了一个
0 I/ E( |2 h- O+ |Dim fn As String
: A8 O/ g. a2 z  @  u) K% I9 e: v: `% |* ]) H+ b# w
Sub Main% g* u) I9 T' l& c! h5 `$ V- t7 n
    fn = ActiveDocument) L( U7 y6 q5 j9 W5 J6 ]; [0 h4 h
    If fn = "" Then5 {/ G+ F! N) B
        fn = "Untitled"8 H- Q  j8 v9 Y6 M; {
    End If; I$ `, j! L" Q$ s8 u: u8 R
% t# c' z8 j8 _( u% P
    tempFile = DefaultFilePath & "\temp.txt"% _4 p7 `% z4 ^2 ?2 [
    Open tempFile For Output As #1
- f* O  _; c% @- ?    item = 0
# _7 V# G9 t/ C- ~2 W    StatusBarText = "Generating report..."8 `$ i1 d- |. I; G( r1 G
    Print #1, "ITEM";vbTab;"Part Type"; vbTab;"P/N_1"; vbTab;"Manufacturer_1_P/N"; vbTab;"Description"; vbTab;"Manufacturer_1"; vbTab; "Value"; vbTab; "QTY"; vbTab; "REF-DES") A' m$ R1 C  U0 _
    For Each pkg in ActiveDocument.PartTypes$ O! Z3 T" |' @1 T1 g7 C% O
        'Print #1, pkg.Name; vbTab; note
% s) L% _& B# \) l        qty = 0' J3 m# e& l3 h$ P
        value = ""
8 c# u( @5 ]) ~        description = ""3 C6 j# K* J) C# g. h+ v
        manufacturer = ""# C3 x3 h% u) R+ D: z" U" a0 b
        pn = ""
# t/ r9 }  U# p* v" x# h5 [$ O+ g        manufacturerpn = "". N5 O7 A# ~* m& b
        symbol = ""
6 k$ i; L& l; s  s& P. o6 _        item = item + 1
7 i6 z" l9 |; f7 ~2 J6 s8 i' P        'Print #1, item; vbTab;- |% r) j# c5 b# B0 P
        For Each part In pkg.Components- s% e  K% }9 a) o' V% E
            value = AttrValue(part, "Value"), L& J; p: @8 V( Q% L( d+ U
            description = AttrValue(part, "Description")
* J. |+ X# o9 D. [0 v            manufacturer = AttrValue(part, "Manufacturer_1"): H, |! G5 A9 f$ l' ~6 U
            pn = AttrValue(part, "P/N_1")
1 b; B. ~+ _/ p" D            value = AttrValue(part, "Value")   
' s1 ^; c( G6 \% {. \8 V* \            manufacturerpn = AttrValue(part, "Manufacturer_1_P/N"); V8 ?4 D( u$ \! G3 Y6 b3 b# R
            sysid = AttrValue(part, "SYSID")
4 W: U% V$ o* I; v2 K% b9 p            qty = qty+1
, f: h! `) _2 l* P! z% v9 M1 I            symbol = symbol + part.Name + ", "
6 f' j9 U0 y  f4 f' \: x& C        Next        
3 f  J  k; b, H3 D0 y2 X5 E        symbol_len = Len(symbol)
; `% ?$ F" Z2 K- o% D        symbol = Mid(symbol,1, symbol_len - 2)5 C. Q, r- @! n6 E( ?
        Print #1, item; vbTab; part.PartType ; vbTab; pn ; vbTab;manufacturerpn; vbTab;description; vbTab;manufacturer; vbTab;value; vbTab; qty; vbTab; symbol;. e1 J' w3 {- n" \; N
        Print #1
; s3 e* ~$ q) O    Next pkg
8 E# N" f) X- j- P: |$ e, ]9 `    StatusBarText = ""
  |+ G6 C( Y2 w    Close #1
0 W/ ~% f5 O3 ?( D    ExportToExcel
3 V' a) h. j8 E/ `/ U( f- k) ~End Sub
' ]; h1 p9 s, `/ N$ O1 ?3 ^; c" Z# G" [" j7 p5 L# e% s. U' o  J
Sub ExportToExcel
5 X% q: D# g9 g9 L% N% z- y7 E    FillClipboard. q1 i# B. ]; i- m
    Dim xl As Object
' D6 t& R2 @7 o' y+ r3 t1 j  \    On Error Resume Next- b# M( K! o: ?% E7 v+ g
    Set xl =  GetObject(,"Excel.Application")2 T. e" q" @' y, t
    On Error GoTo ExcelError    ' Enable error trapping.( G% b6 K/ V6 ~
    If xl Is Nothing Then6 \' ?1 u2 ?- h" N
        Set xl =  CreateObject("Excel.Application")6 }1 c/ p: n1 A% Z3 S! o
    End If( |  ^/ d5 c* o: a8 K9 w
    xl.Visible = True
  V' c8 x/ O6 g, x' z5 j    xl.Workbooks.Add
% h, A4 B, r7 p( m' I9 X- A    xl.ActiveSheet.Paste' K( |) z4 p/ |0 m1 @* i* X: w' m
    xl.Range("A1:I1").Font.Bold = True9 t# Q7 X9 s! H: j! r
    xl.Range("A1:I1").NumberFormat = "@"
$ \; V  ^9 @: }7 b( O2 s! j' N    xl.Range("A1:I1").AutoFilter
4 j" `7 D8 @: U& }% w    xl.ActiveSheet.UsedRange.Columns.AutoFit
, m. l$ d7 a( l9 k) r    'Output Report Header5 m: ^8 j# [4 ~+ X, \
    xl.Rows(1).Insert2 a0 t, r/ n# P/ P# p9 q3 w6 a
    xl.Rows(1).Cells(1) = Space(1) & "Part Report "& " WWZL-BOM " & " on " & Now
2 E) v0 i+ N/ W* n, A7 ?    xl.Rows(2).Insert/ e6 K  w! M7 Y
    xl.Rows(1).Font.bold = True
5 |) C/ Z8 t, k2 |    'Output Design Totals
+ I0 A0 b- q  D+ R( r/ T1 ]5 D    lastRow = xl.ActiveSheet.UsedRange.Rows.Count + 1* b; A5 T9 `) ^( \* ]" \
    xl.Rows(lastRow + 1).Font.bold = True
" p$ p2 `# R( `( e    xl.Rows(lastRow + 1).Cells(1) = Space(1) & "Design Part count: " & ActiveDocument.Components.Count2 t) L3 A, o$ A8 U' E% b
    xl.Range("A1").Select
+ }4 q4 x" V% |9 M    On Error GoTo 0 ' Disable error trapping.
" s# Q% g1 W4 t& W2 h+ ^" X    Exit Sub    2 {  s  s7 I; l7 w2 o% r
: j: y' S0 O% ^; C2 k
ExcelError:# D+ h* h6 G+ \8 @3 x, G$ a3 S" o
    MsgBox Err.Description, vbExclamation, "Error Running Excel"
9 d$ ]4 L0 }" r: o5 ~5 |& }    On Error GoTo 0 ' Disable error trapping.    % l, f) r4 b& ^6 r8 |4 T
    Exit Sub
% f5 E6 y7 [, J' a  {End Sub( _6 l1 G3 e! ?# p, S/ X' ]

% }; c8 W1 Z- S! M2 g% B0 JSub FillClipboard
- b0 w/ ]* X! F    StatusBarText = "Export Data To Clipboard..."
1 S0 n  h) e: X; n/ C    ' Load whole file to string variable   
$ u2 u# |% F9 |( C    tempFile = DefaultFilePath & "\temp.txt"" t+ K6 N, S' f  G2 Q
    Open tempFile  For Input As #1
( |0 d& n' ~; s    L = LOF(1)! m  G3 g: K# Y7 D) y. c7 ]
    AllData$ = Input$(L,1)
- p5 q  T" d3 H9 T" ~    Close #1( c% S3 \  x9 E+ F% t% V1 v  X
    'Copy whole data to clipboard
3 A! i; Z; `6 K; v% J7 x    Clipboard AllData$
/ o( ]0 Q+ C& h# c- \    Kill tempFile7 i6 b* h; G/ K* i
    StatusBarText = ""6 W0 a; D4 ]  X) q8 x+ Z
End Sub' N9 u4 C/ I7 G" a; Q7 C
Function AttrValue (comp As Object, atrName As String) As String
9 `7 B9 H7 ^5 H3 Q. s' {    If comp.Attributes(atrName) Is Nothing Then
9 i4 L2 c" G" G        AttrValue = ""0 E# S1 ?" h# u
    Else
, f$ v) u# }& L0 d        AttrValue = comp.Attributes(atrName).Value
+ K) c" r3 c5 U5 |4 {% c    End If
( x$ G$ r) z9 y8 {& XEnd Function
作者: qiangqaz    时间: 2018-6-26 18:46
一点点来吧,共勉
作者: qiangqaz    时间: 2018-6-26 18:48
        symbol_len = Len(symbol)
$ r) Z- B9 J8 Q4 e1 ^        symbol = Mid(symbol,1, symbol_len - 2)
/ `, [, r! U0 V9 t7 q2 r6 @% F" M* l0 s8 A& L3 Z0 n% s8 |
这两句是个啥意思?
作者: qiangqaz    时间: 2018-6-26 18:52
本帖最后由 qiangqaz 于 2018-6-26 18:54 编辑 ! Y7 T4 `, N+ C

+ e2 T$ E( _; O; {2 @$ Q难道是数组:---3 `3 t, u& g7 E$ t+ w% @( ~
多数情况下,只需为声明的变量赋一个值。只包含一个值的变量被称为标量变量。有时候,将多个相关值赋给一个变量更为方便,因此可以创建包含一系列值的变量,称为数组变量。数组变量和标量变量是以相同的方式声明的,唯一的区别是声明数组变量时变量名后面带有括号 ( )。下例声明了一个包含 11 个元素的一维数组:
; W; f* g8 \" d+ u; P$ V8 q
% ]( F: f% R  X- Z2 sDim A(10)( I+ ^8 x2 |. w( l! Q0 d
虽然括号中显示的数字是 10,但由于在 VBScript 中所有数组都是基于 0 的,所以这个数组实际上包含 11 个元素。在基于 0 的数组中,数组元素的数目总是括号中显示的数目加 1。这种数组被称为固定大小的数组。
1 m# {) [& h8 {) C: y& D8 a8 T- }. T+ L' O8 S& e) x  O% D2 |9 s: F* j
在数组中使用索引为数组的每个元素赋值。从 0 到 10,将数据赋给数组的元素,如下所示: + w8 _% F; u2 c+ z$ H# d3 W6 q
( Q* k2 ?* C/ ~; J: S. u5 H
A(0) = 256  G- _9 s" R+ K! Q1 \( f
A(1) = 324% b& H% W6 P! K% W9 J7 `) j* }
A(2) = 100
+ o2 w. |2 s9 Q . . .( z# h" x* K" H  x
A(10) = 55
% I  F* Q% J/ e; }与此类似,使用索引可以检索到所需的数组元素的数据。例如:
: v2 T$ U7 P; T1 |; m- v8 O! f" L$ C0 W9 ?( @0 H2 K; n
. . .   C' C; q% `% n& a; {
SomeVariable = A(8)  
/ t- _4 L' e; E. P . . . 2 t7 d  f7 V% F9 |
数组并不仅限于一维。数组的维数最大可以为 60(尽管大多数人不能理解超过 3 或 4 的维数)。声明多维数组时用逗号分隔括号中每个表示数组大小的数字。在下例中,MyTable 变量是一个有 6 行和 11 列的二维数组:
% p2 g# ]/ J. O1 g% U6 `! q  q0 m0 J" @
Dim MyTable(5, 10)
; ^5 U0 R' K# k! U' B在二维数组中,括号中第一个数字表示行的数目,第二个数字表示列的数目。
' Y" \9 l8 S; c' }5 d5 c, x" e4 H# K# ], s; T
" I( w: A& @. V; [& p

作者: qiangqaz    时间: 2018-6-26 18:53
加两行打印,看出来个啥
/ C5 g: F2 k& ]; l
5 ]2 H- n: {3 R0 t        Next        5 U9 O% i; y  Z" c% X
        symbol_len = Len(symbol)
4 }5 @' _. F1 I8 t        Print #1,symbol_len;
% n7 e2 `# {7 M6 N9 O        Print #1
2 E# B# [. r; r8 G        symbol = Mid(symbol,1, symbol_len - 2)1 |2 m' {' A* O# h" i) {
        Print #1, item; vbTab; part.PartType ; vbTab; pn ; vbTab;manufacturerpn; vbTab;description; vbTab;manufacturer; vbTab;value; vbTab; qty; vbTab; symbol;- [. z  j$ k7 z* ~/ r3 g
        Print #1
6 z& V0 [" d' B% n1 ?1 ]9 c    Next pkg
作者: qiangqaz    时间: 2018-6-26 18:57
出来个这玩意
3 x  d! e2 z, M6 P7 H
作者: linxiwell    时间: 2018-6-27 11:59
EDA_BOMHelper花式出BOM,总有满足你的。
作者: qiangqaz    时间: 2018-6-29 15:43
linxiwell 发表于 2018-6-27 11:59" H7 k" F" |' M7 [' d
EDA_BOMHelper花式出BOM,总有满足你的。
2 p) R( w' |5 s1 ^! g9 u
嗯,有空研究下- h7 s1 s+ U4 }* ~* S9 S3 h





欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2