EDA365电子工程师网

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

作者: qiangqaz    时间: 2018-6-26 18:44
标题: PADS生成bom脚本
pads生成bom时,无法达到自己的预期,所以干脆自己写吧,但是,我不会
作者: qiangqaz    时间: 2018-6-26 18:45
网上找了一个
# r/ R4 S' `# @Dim fn As String7 F, m7 P8 e% t! ?: w# s
( g8 Q( {7 n$ {# ]4 J1 o
Sub Main& Z9 g% m1 W7 c% C/ c
    fn = ActiveDocument
. v% _7 m0 {3 y4 `5 m9 X    If fn = "" Then
; z! Q$ t( e8 ]/ H2 @2 ^/ k% _        fn = "Untitled"9 w* A4 k* j( k
    End If4 {/ _" p1 Z3 u/ T- v3 l' i1 I
, E3 _' N2 b2 N1 Z- o' w
    tempFile = DefaultFilePath & "\temp.txt"
! [! u2 n/ E0 e' n    Open tempFile For Output As #1
5 r- w3 g; i" R/ b1 Z    item = 0
, q* }' q% P# x4 J6 S! r    StatusBarText = "Generating report..."
$ n+ m. F, {2 i    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"0 U! G0 Z$ m; _" ]& U+ e2 t/ n
    For Each pkg in ActiveDocument.PartTypes; g5 z; L* _0 a
        'Print #1, pkg.Name; vbTab; note! Y. b0 ?- Q4 e4 c! v( Y8 ?
        qty = 06 P/ O  l( o6 V+ b
        value = ""! n9 p( ?4 u# t0 u! s
        description = "". z& j( y9 Y8 k4 D% B8 M
        manufacturer = ""
8 d$ A- g. ]* V. c* P        pn = ""
+ Q3 T2 k' ]1 u0 }        manufacturerpn = ""/ s& M( e9 i: M& c/ ]
        symbol = ""  g5 J: N6 h- O0 _) D
        item = item + 1
% h# A* p  S7 T5 N0 i& ?" j        'Print #1, item; vbTab;
3 Q+ _) \5 r3 k- e        For Each part In pkg.Components
% H/ k4 y7 _2 A8 |. f8 k            value = AttrValue(part, "Value"); i, h  l& _/ ~& R" |
            description = AttrValue(part, "Description")
4 X; ~, U2 x2 u            manufacturer = AttrValue(part, "Manufacturer_1")
: v* {- h* A# l2 O            pn = AttrValue(part, "P/N_1")
5 d2 G$ a# k" k            value = AttrValue(part, "Value")   
* g! d$ b2 ?6 n5 A. L            manufacturerpn = AttrValue(part, "Manufacturer_1_P/N")
+ @0 R5 c) W' X9 h- s$ L7 E  `            sysid = AttrValue(part, "SYSID")
9 h, e+ b4 r' K. s, o# g            qty = qty+1
3 f* B( \' Y4 B& {( h            symbol = symbol + part.Name + ", "
# s8 q% f2 N9 [4 ~3 j        Next        
3 ^+ W/ j( U& R% f) P" c: p# V6 ?& Q; c" z/ p        symbol_len = Len(symbol)
2 g" m) Z) `) A0 A        symbol = Mid(symbol,1, symbol_len - 2)
; E4 n" v; V9 H# c7 V        Print #1, item; vbTab; part.PartType ; vbTab; pn ; vbTab;manufacturerpn; vbTab;description; vbTab;manufacturer; vbTab;value; vbTab; qty; vbTab; symbol;  s# M9 F+ ^* [# G5 b  Q5 p! ?/ q
        Print #13 l. o, s  ~" W2 p
    Next pkg/ F6 [0 C# F( A4 i- d$ F; d0 t
    StatusBarText = ""! h8 ]* N, A! W5 F0 H. X
    Close #1
. G! t& v. w- T+ D; A) d    ExportToExcel  K! H7 P7 @( R8 Y/ T, z5 I
End Sub) w/ ^* K$ t. ~$ G" w/ M) J6 t) v

( X* z9 j8 J% Q2 lSub ExportToExcel
) R: W* n' `5 y7 W, O    FillClipboard
& `9 ~! n5 C2 f1 }% |    Dim xl As Object
+ C( H8 s% O$ [$ h) u    On Error Resume Next
, ]: c/ M. |# \* ?9 `$ x& _% g    Set xl =  GetObject(,"Excel.Application")
/ x3 k' Q1 g4 L8 ]    On Error GoTo ExcelError    ' Enable error trapping.' o1 ^- R, c3 I6 m2 @, w
    If xl Is Nothing Then% U* e( r) W. G% X
        Set xl =  CreateObject("Excel.Application")! Z  e! h- K7 q+ [& t8 n/ f
    End If
% O& L, {: i7 n4 E+ g& a    xl.Visible = True$ l$ d4 T$ s; @6 K. H3 ], P' ^
    xl.Workbooks.Add4 ~+ t& g: @9 E- X& O8 ^
    xl.ActiveSheet.Paste, Y' ^, R" z4 x$ j; B. [
    xl.Range("A1:I1").Font.Bold = True
) u/ V% |+ w* z- [8 s4 p  Y    xl.Range("A1:I1").NumberFormat = "@"
0 u+ @  P3 D  I* g% s  s: j    xl.Range("A1:I1").AutoFilter  `9 a  o6 f( _$ m
    xl.ActiveSheet.UsedRange.Columns.AutoFit
6 E. C- n  m2 K, P' {    'Output Report Header( x5 [" F+ P. A! }) i2 N" a
    xl.Rows(1).Insert
- e1 w5 A7 N6 Y    xl.Rows(1).Cells(1) = Space(1) & "Part Report "& " WWZL-BOM " & " on " & Now
/ j$ ?# U& }8 m  R5 E/ S2 P    xl.Rows(2).Insert- T/ i6 e3 a3 \0 h# K
    xl.Rows(1).Font.bold = True
4 q9 P$ P$ G7 `- R3 ?    'Output Design Totals! T3 Y0 n. j" ?
    lastRow = xl.ActiveSheet.UsedRange.Rows.Count + 1
% B+ x9 J; h' s4 v9 J/ M    xl.Rows(lastRow + 1).Font.bold = True
5 `3 Y" G! r" E% b% e4 {    xl.Rows(lastRow + 1).Cells(1) = Space(1) & "Design Part count: " & ActiveDocument.Components.Count
; j: K6 D  t* z! ~  j6 M    xl.Range("A1").Select) f$ p  ^, k  [4 U- |) c6 Y
    On Error GoTo 0 ' Disable error trapping. $ b* F/ w( S$ ?4 G9 ~! b
    Exit Sub    " e0 _7 z' m$ M4 u2 T' f) U9 {8 o

% b3 `- z7 q4 H7 e+ f2 ?+ \, k) \, cExcelError:
8 n. y: `1 D' X0 v; e: |    MsgBox Err.Description, vbExclamation, "Error Running Excel"/ p8 n, X" M/ F6 A' N
    On Error GoTo 0 ' Disable error trapping.    0 M, o4 _. ^  k% X1 H( @
    Exit Sub
0 k9 b6 X3 @4 IEnd Sub
5 q. }$ B' T  ~7 i
! z, M. R, H1 B! YSub FillClipboard( G  z2 L2 ~2 X2 l4 t+ W. \1 U  W
    StatusBarText = "Export Data To Clipboard..."9 t  R  W2 E1 U9 k2 E  A
    ' Load whole file to string variable   
# `& U9 n0 w: N    tempFile = DefaultFilePath & "\temp.txt"& e9 `6 Z- m# z! F, ^( v$ Y( a" o
    Open tempFile  For Input As #10 r6 A! S$ D! a9 z4 }
    L = LOF(1)
2 [5 G$ g" J; O; R0 X    AllData$ = Input$(L,1)
8 X0 B2 z6 ?) l- ~    Close #19 E, x7 ^" I  z3 }% S/ U, M( r
    'Copy whole data to clipboard( n3 U6 K9 }7 Z0 K: h- N
    Clipboard AllData$
9 b! W# L. j- F! Q% a    Kill tempFile
0 `3 b2 L/ Z1 `% t  [. @    StatusBarText = ""
& h& R8 N8 k" u/ z# I1 C  TEnd Sub: o& t- P8 Z6 H" P6 d% L
Function AttrValue (comp As Object, atrName As String) As String
- E& U6 \* Y' Y- H7 b# }    If comp.Attributes(atrName) Is Nothing Then" G5 n2 R9 v6 k* Q4 q
        AttrValue = ""
) j8 B5 H  i- t  m! U2 ?    Else$ p+ p' S. l& B, f
        AttrValue = comp.Attributes(atrName).Value1 F5 f3 _& G( \. \/ a, l
    End If
6 n7 m: p) G( \/ |0 E' ?End Function
作者: qiangqaz    时间: 2018-6-26 18:46
一点点来吧,共勉
作者: qiangqaz    时间: 2018-6-26 18:48
        symbol_len = Len(symbol)
0 z  A8 {7 s# ^% a; n        symbol = Mid(symbol,1, symbol_len - 2)' ^8 W' P  O3 D8 F- s* p' ]
: @8 a. Z" F4 {5 J1 ~2 e. O
这两句是个啥意思?
作者: qiangqaz    时间: 2018-6-26 18:52
本帖最后由 qiangqaz 于 2018-6-26 18:54 编辑 9 w* O4 f' V, b% z; N+ \
' w9 x/ b. P8 F4 U" A
难道是数组:---3 }& R: k! C; h4 j* A1 l7 e1 c
多数情况下,只需为声明的变量赋一个值。只包含一个值的变量被称为标量变量。有时候,将多个相关值赋给一个变量更为方便,因此可以创建包含一系列值的变量,称为数组变量。数组变量和标量变量是以相同的方式声明的,唯一的区别是声明数组变量时变量名后面带有括号 ( )。下例声明了一个包含 11 个元素的一维数组:
8 Z: a. Z0 W6 Z% M% e% B( b4 M! o3 `8 d; B, d7 M1 G
Dim A(10)
1 v( ]1 [) [& F' d* _虽然括号中显示的数字是 10,但由于在 VBScript 中所有数组都是基于 0 的,所以这个数组实际上包含 11 个元素。在基于 0 的数组中,数组元素的数目总是括号中显示的数目加 1。这种数组被称为固定大小的数组。
) {+ E. [. P4 {) U; _3 [4 j; a, X% ^3 g8 R+ K. \
在数组中使用索引为数组的每个元素赋值。从 0 到 10,将数据赋给数组的元素,如下所示:
* o: j& \# r  \  T* q6 f8 W% @% W) v" v4 H# \5 `2 v' k, ^
A(0) = 256
. T/ G+ I, X7 `4 F* C" A A(1) = 324" R# z5 V! m- l. G' L/ h
A(2) = 100/ {3 G* O$ b; x; {8 A
. . .6 g+ j- C9 r% Q5 e
A(10) = 55
6 p0 _+ n0 o7 F4 g0 R. h, x) z& u与此类似,使用索引可以检索到所需的数组元素的数据。例如:
, X# r+ }' n: F; W9 P- I
2 |1 v6 ^8 w: {* M! u% ` . . . 5 ^6 _% G6 C+ X0 v
SomeVariable = A(8)  
! {! r0 N0 f+ `0 W1 H8 s  D9 A- z . . .
  Z. w% P" ?1 Q' ?$ \数组并不仅限于一维。数组的维数最大可以为 60(尽管大多数人不能理解超过 3 或 4 的维数)。声明多维数组时用逗号分隔括号中每个表示数组大小的数字。在下例中,MyTable 变量是一个有 6 行和 11 列的二维数组:
0 A( J3 z/ `5 B8 `+ H. l4 V8 n, a) y; Q
Dim MyTable(5, 10)7 h+ H1 q5 ]; O& }: e* _1 X9 H3 p
在二维数组中,括号中第一个数字表示行的数目,第二个数字表示列的数目。
0 s( _  X4 I  L! K: H# ]& J4 e2 U, s) e( F
7 O: T# _. T0 f/ ]% r9 B

作者: qiangqaz    时间: 2018-6-26 18:53
加两行打印,看出来个啥7 K9 Q' C! q: f% k1 j
6 j! e, s) k7 T7 Q
        Next        ) H$ m* O2 o- u1 \2 w8 j3 t3 h
        symbol_len = Len(symbol)
8 c$ ^& f% o) p1 p* t        Print #1,symbol_len;
* k* O* p; x2 t0 G: a8 w+ w        Print #1
* Z1 w" I4 j* P+ ~# S        symbol = Mid(symbol,1, symbol_len - 2): q, ]5 o1 z) c& Y8 F9 k: \' ?
        Print #1, item; vbTab; part.PartType ; vbTab; pn ; vbTab;manufacturerpn; vbTab;description; vbTab;manufacturer; vbTab;value; vbTab; qty; vbTab; symbol;3 D  K! I$ Q; K; X+ o$ U$ v
        Print #1! B+ u# H3 N! r% N; T
    Next pkg
作者: qiangqaz    时间: 2018-6-26 18:57
出来个这玩意
4 M" Y, {4 o1 T( J; o# _, {
作者: linxiwell    时间: 2018-6-27 11:59
EDA_BOMHelper花式出BOM,总有满足你的。
作者: qiangqaz    时间: 2018-6-29 15:43
linxiwell 发表于 2018-6-27 11:59
( E' R7 z' l1 R( j: wEDA_BOMHelper花式出BOM,总有满足你的。

( T" j( m0 o& D# L# [9 e! u嗯,有空研究下# N! C- ?$ d, I+ O! ~/ y





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