EDA365电子工程师网

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

作者: qiangqaz    时间: 2018-6-26 18:44
标题: PADS生成bom脚本
pads生成bom时,无法达到自己的预期,所以干脆自己写吧,但是,我不会
作者: qiangqaz    时间: 2018-6-26 18:45
网上找了一个
/ ~8 V5 G8 X3 w1 H8 l7 UDim fn As String+ S1 m% q& N& }' B

' e$ v, j& K0 I/ O4 W5 j; ]Sub Main
' Z2 j  z/ C9 L) w5 X    fn = ActiveDocument; A9 p2 m6 @! ]1 _. s; v' ]' F
    If fn = "" Then6 m2 \2 Y% }9 b  L( w) Q" s
        fn = "Untitled"0 i" Z2 r6 ], f+ k5 ^) \
    End If" N9 v1 [+ `2 r  Q/ T

3 b, t0 K/ ]6 W; U$ [    tempFile = DefaultFilePath & "\temp.txt"
* p# q5 n6 u  B0 j2 S    Open tempFile For Output As #11 k* \6 E, J  n5 g( I) S
    item = 0; X0 `- @/ g( {
    StatusBarText = "Generating report..."+ @! ?8 m5 {9 u/ P7 T6 o
    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"
; }8 t/ Y9 v. H' G* j8 x) c    For Each pkg in ActiveDocument.PartTypes
* T: o. Y: w$ I, {8 C        'Print #1, pkg.Name; vbTab; note
+ I& S4 V- x) u' k  u        qty = 0
2 l8 j* f( W7 \2 |; k        value = ""
0 l" Z( `# R$ g% \9 y$ L        description = ""
; Z$ C7 L# M* U+ C/ ~        manufacturer = "", ~% f% o1 V& _5 |" {
        pn = "". V+ X6 S  A: q: D
        manufacturerpn = ""
) S8 Z6 y4 J$ X. [7 P5 `        symbol = ""( q$ B: P4 W0 {  R8 y
        item = item + 1' q  w' d/ _0 a) x1 V; v
        'Print #1, item; vbTab;6 j" ?* Y/ I$ H( e% f8 J
        For Each part In pkg.Components
) ?/ U" f- z( V% v: r0 c( L            value = AttrValue(part, "Value"). w( a4 p1 o3 z& d7 L# Z
            description = AttrValue(part, "Description")$ Z+ |* F/ F- w7 r+ `
            manufacturer = AttrValue(part, "Manufacturer_1"): f5 w2 k- f' F5 V  c) G
            pn = AttrValue(part, "P/N_1")
4 a# J  M4 R5 H. H            value = AttrValue(part, "Value")    ' p+ U* F) _0 C) w0 b8 x6 L
            manufacturerpn = AttrValue(part, "Manufacturer_1_P/N")
8 K1 J2 L$ p2 H7 m8 E, r9 o6 r9 ]5 H4 ?2 ~            sysid = AttrValue(part, "SYSID")
/ P( S1 I1 B$ Y6 ?8 T            qty = qty+1
( A3 P# l5 d% _  _, _, ?            symbol = symbol + part.Name + ", "* Q) W5 D0 x3 [7 m/ U; W
        Next        4 k# |; X7 t5 ^. s. ]& H+ [: E# R
        symbol_len = Len(symbol)8 F' I+ I0 R0 n& k
        symbol = Mid(symbol,1, symbol_len - 2)# j8 {- E& Q6 d5 r
        Print #1, item; vbTab; part.PartType ; vbTab; pn ; vbTab;manufacturerpn; vbTab;description; vbTab;manufacturer; vbTab;value; vbTab; qty; vbTab; symbol;
$ i5 O1 j+ p' z( H3 b        Print #1' u$ p( E9 I0 c9 p, ]& |
    Next pkg+ [% n4 S9 z3 [+ \6 J5 f
    StatusBarText = ""
& r& _# b8 O2 o" H/ i. X    Close #1
2 F% |$ E( K' `1 ]3 l    ExportToExcel
. g* {: r. t( Z1 X8 x9 e4 LEnd Sub5 |; D' L, H  q* H3 ]: d' ^5 n0 a
$ u* v1 F5 J" v7 i" z$ [
Sub ExportToExcel
7 S% E5 ^1 w) o0 R/ j  l2 I( t& r    FillClipboard8 L6 Z7 n8 g0 E) ^/ _. F* ?
    Dim xl As Object2 ~9 h- P+ V+ r7 J/ q3 ~! S7 y6 Z! \
    On Error Resume Next# \: {: U+ A' }5 R
    Set xl =  GetObject(,"Excel.Application")
4 R  e1 y2 _, L- B    On Error GoTo ExcelError    ' Enable error trapping.
( ?$ Y+ i; C1 a    If xl Is Nothing Then# u7 w3 c, t1 x2 |& r
        Set xl =  CreateObject("Excel.Application")
# a8 a) C+ W2 B0 R    End If' c6 o' u% K* G9 h! r
    xl.Visible = True
) C$ x! y$ s$ c  _! J; P    xl.Workbooks.Add
- m3 p; v5 ~. A  _( x    xl.ActiveSheet.Paste
4 H6 s0 _4 \: ?9 S5 l    xl.Range("A1:I1").Font.Bold = True
3 q: w6 p2 k, M. a6 m$ I; v    xl.Range("A1:I1").NumberFormat = "@"% n% R9 [/ k% ^. v
    xl.Range("A1:I1").AutoFilter. ]) Z& U7 w. s9 l+ q5 j* r8 w
    xl.ActiveSheet.UsedRange.Columns.AutoFit% p; H$ [: y3 Q( g
    'Output Report Header
' Y# e+ A; F+ _8 r' m' T& s8 M1 i    xl.Rows(1).Insert# |0 l6 C$ o* J% ^
    xl.Rows(1).Cells(1) = Space(1) & "Part Report "& " WWZL-BOM " & " on " & Now
% G: M- v8 l! V. c, t( y7 w  C    xl.Rows(2).Insert/ Q6 x" M  P3 M* Z/ _
    xl.Rows(1).Font.bold = True8 ]. U$ _  `, d; w; \- p
    'Output Design Totals
( D7 u5 S9 U- ^; f9 ~; v    lastRow = xl.ActiveSheet.UsedRange.Rows.Count + 1
: Z6 d/ Q+ v* M" z7 z) Y    xl.Rows(lastRow + 1).Font.bold = True
$ O' I% W: Z: @5 d! Z' x    xl.Rows(lastRow + 1).Cells(1) = Space(1) & "Design Part count: " & ActiveDocument.Components.Count
! x2 r+ `  F8 ~% d; z- H    xl.Range("A1").Select' o7 {" K+ y# S5 ~5 J0 S& N, Z1 S5 _
    On Error GoTo 0 ' Disable error trapping. 5 [: M" a( ?+ T
    Exit Sub    9 `, j: V" Q6 w

4 h0 W6 w( \2 f( @( m" cExcelError:
" u  v( z! m7 }, Y. `+ G7 {    MsgBox Err.Description, vbExclamation, "Error Running Excel"% v/ M" m) T; [! M# F
    On Error GoTo 0 ' Disable error trapping.   
- X# F& |$ X$ v$ y% m% Y3 P    Exit Sub
! B+ {' @; ]: F" i, ]/ BEnd Sub
! Z8 W4 |* t. ?2 e0 ~- N2 e. j% p  F0 z
Sub FillClipboard
3 j; h( q4 ~) V7 }: z; k7 U& e    StatusBarText = "Export Data To Clipboard..."
6 j; P! z6 G8 O& V# W2 N5 p    ' Load whole file to string variable   
. \; Z9 Z- v2 b3 `/ h    tempFile = DefaultFilePath & "\temp.txt"
1 ], G2 M0 g9 Z5 _3 e    Open tempFile  For Input As #1) y* L5 @" D/ e8 c/ B0 W
    L = LOF(1)
* t) P6 X- N% E: B" @    AllData$ = Input$(L,1)% q( _7 _5 o0 s9 f, H8 f# M
    Close #1( ]. ~  o9 B' v  A/ t
    'Copy whole data to clipboard) P0 N+ h  i1 f8 g
    Clipboard AllData$
7 n! z; ]3 A8 V) x5 ], |5 O    Kill tempFile% F( y0 J7 s* x/ ~/ {
    StatusBarText = """ C" f; \) X) _
End Sub+ S- b/ A- }0 m/ M3 P% o' v$ i
Function AttrValue (comp As Object, atrName As String) As String
" U7 B+ u5 z4 O5 O    If comp.Attributes(atrName) Is Nothing Then
% ~7 X) A8 I" X! [        AttrValue = ""9 H: l8 S- n! `' n; v: ?( j! _: K
    Else0 Z  j) \9 @/ M" R! U# H
        AttrValue = comp.Attributes(atrName).Value
1 Z$ V5 p8 e, w2 D0 {) p5 J    End If7 }7 T( ?3 M+ q) z
End Function
作者: qiangqaz    时间: 2018-6-26 18:46
一点点来吧,共勉
作者: qiangqaz    时间: 2018-6-26 18:48
        symbol_len = Len(symbol)  |2 t! M7 u3 \' Z2 n9 m6 |/ M! d* ?
        symbol = Mid(symbol,1, symbol_len - 2)
7 R. Z9 v/ y* z8 x" P* C" [8 x& I7 O$ p1 L% \4 s+ [3 o9 ~- _: `! p' r
这两句是个啥意思?
作者: qiangqaz    时间: 2018-6-26 18:52
本帖最后由 qiangqaz 于 2018-6-26 18:54 编辑 ' f2 T5 Y$ R4 R" E. H" L

% y4 ?7 k2 Q5 N/ G+ A难道是数组:---
7 W- j8 R9 R) I5 @' W$ q& ^. o" }2 b6 d多数情况下,只需为声明的变量赋一个值。只包含一个值的变量被称为标量变量。有时候,将多个相关值赋给一个变量更为方便,因此可以创建包含一系列值的变量,称为数组变量。数组变量和标量变量是以相同的方式声明的,唯一的区别是声明数组变量时变量名后面带有括号 ( )。下例声明了一个包含 11 个元素的一维数组:
- |4 L1 m. m9 |" h( x8 w
) W' W2 K6 u  xDim A(10)  \6 K4 h. k- D
虽然括号中显示的数字是 10,但由于在 VBScript 中所有数组都是基于 0 的,所以这个数组实际上包含 11 个元素。在基于 0 的数组中,数组元素的数目总是括号中显示的数目加 1。这种数组被称为固定大小的数组。
: x7 W# P' }- e" [% A. z6 f% q$ I' z: [0 ]5 B
在数组中使用索引为数组的每个元素赋值。从 0 到 10,将数据赋给数组的元素,如下所示: / w4 m) ?  D$ \9 `! q2 s

- X# f, A* x3 W4 ^2 ?' v) e A(0) = 2569 Y& v$ w* q! I6 p9 R; {
A(1) = 324. ?6 u, D$ r; v! m5 `. B( h
A(2) = 100
" J8 M5 l* |" ]3 R. v  r . . .( N/ w. _0 F9 G% o4 m2 J, e7 \6 C
A(10) = 550 }- Y9 ?& p/ W5 I/ p- t
与此类似,使用索引可以检索到所需的数组元素的数据。例如:0 @8 S5 i0 a4 u! ]9 b

. s7 C$ l# ~' u* ]& D5 g . . . ! N+ H3 n. _# z1 v# j* A
SomeVariable = A(8)  5 L1 [8 H) ]+ q" Q6 H( x! Z$ I
. . .
- g# j) R5 }% M  t1 P% F( M数组并不仅限于一维。数组的维数最大可以为 60(尽管大多数人不能理解超过 3 或 4 的维数)。声明多维数组时用逗号分隔括号中每个表示数组大小的数字。在下例中,MyTable 变量是一个有 6 行和 11 列的二维数组: . n- [% \: z5 d! j" W( o) C& a4 s

$ \, W: s7 S6 q4 Z+ O Dim MyTable(5, 10)
4 i8 t4 ?( s4 M& Q$ i& w+ n- T在二维数组中,括号中第一个数字表示行的数目,第二个数字表示列的数目。6 R/ d8 T4 I5 [3 m. f. H

$ ]$ y! e# }6 K- k3 p* e- }, k' b" y1 ^! R0 S: k: v+ L9 W$ J/ L

作者: qiangqaz    时间: 2018-6-26 18:53
加两行打印,看出来个啥2 x( D4 h: B9 O. v' W' u; ^$ E
( j% e" l2 ^- E: T
        Next        ( K( I, _2 P5 C5 }
        symbol_len = Len(symbol)
! m  q6 K4 n/ ^* ?1 ^9 }        Print #1,symbol_len;. e$ {- @5 o. \4 I! [/ t3 y2 e& {9 x
        Print #1
/ R( c( ^2 A- Y6 u; ~, w        symbol = Mid(symbol,1, symbol_len - 2)
) J& D6 S- ?8 Q1 a; [' }7 O( N        Print #1, item; vbTab; part.PartType ; vbTab; pn ; vbTab;manufacturerpn; vbTab;description; vbTab;manufacturer; vbTab;value; vbTab; qty; vbTab; symbol;
# j) @9 t0 O  v        Print #1. ?" Y$ x8 A3 i7 q4 ]
    Next pkg
作者: qiangqaz    时间: 2018-6-26 18:57
出来个这玩意
" g: }7 U8 b! ^( p
作者: linxiwell    时间: 2018-6-27 11:59
EDA_BOMHelper花式出BOM,总有满足你的。
作者: qiangqaz    时间: 2018-6-29 15:43
linxiwell 发表于 2018-6-27 11:596 r1 |2 E5 [" {! a, S) Q
EDA_BOMHelper花式出BOM,总有满足你的。
2 y7 a% C! |; I' |2 x) T/ O- o) e. z
嗯,有空研究下  p6 w; Y0 B: u5 y3 u) Q





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