More about BOM dialog. Still not perfect, but more easy to use.
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
Components are sorted by ref and grouped by value
|
||||
One component per line
|
||||
Fields are (if exist)
|
||||
Ref, Quantity, value, Part, 'footprint', 'Description', 'Vendor'
|
||||
Ref, Quantity, value, Part, footprint, 'Description', 'Vendor'
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
#
|
||||
# Example python script to generate a BOM from a KiCad generic netlist
|
||||
#
|
||||
# Example: Sorted and Grouped CSV BOM
|
||||
#
|
||||
|
||||
"""
|
||||
@package
|
||||
Generate a Tab delimited list (csv file type).
|
||||
Components are sorted by ref and grouped by value
|
||||
Fields are (if exist)
|
||||
'Ref', 'Qnty', 'Value', 'Sch lib name', 'footprint', 'Description', 'Vendor'
|
||||
"""
|
||||
|
||||
# Import the KiCad python helper module and the csv formatter
|
||||
import kicad_netlist_reader
|
||||
import csv
|
||||
import sys
|
||||
|
||||
# Generate an instance of a generic netlist, and load the netlist tree from
|
||||
# the command line option. If the file doesn't exist, execution will stop
|
||||
net = kicad_netlist_reader.netlist(sys.argv[1])
|
||||
|
||||
# Open a file to write to, if the file cannot be opened output to stdout
|
||||
# instead
|
||||
try:
|
||||
f = open(sys.argv[2], 'w')
|
||||
except IOError:
|
||||
e = "Can't open output file for writing: " + sys.argv[2]
|
||||
print(__file__, ":", e, sys.stderr)
|
||||
f = sys.stdout
|
||||
|
||||
# Create a new csv writer object to use as the output formatter
|
||||
out = csv.writer(f, lineterminator='\n', delimiter=',', quotechar='\"', quoting=csv.QUOTE_ALL)
|
||||
|
||||
# Output a set of rows for a header providing general information
|
||||
out.writerow(['Source:', net.getSource()])
|
||||
out.writerow(['Date:', net.getDate()])
|
||||
out.writerow(['Tool:', net.getTool()])
|
||||
out.writerow(['Component Count:', len(net.components)])
|
||||
out.writerow(['Ref', 'Qnty', 'Value', 'Sch lib name', 'footprint', 'Description', 'Vendor'])
|
||||
|
||||
# Get all of the components in groups of matching parts + values
|
||||
# (see ky_generic_netlist_reader.py)
|
||||
grouped = net.groupComponents()
|
||||
|
||||
# Output all of the component information
|
||||
for group in grouped:
|
||||
refs = ""
|
||||
|
||||
# Add the reference of every component in the group and keep a reference
|
||||
# to the component so that the other data can be filled in once per group
|
||||
for component in group:
|
||||
refs += component.getRef() + ", "
|
||||
c = component
|
||||
|
||||
# Fill in the component groups common data
|
||||
out.writerow([refs, len(group), c.getValue(), c.getLibName() + "/" + c.getPartName(), c.getFootprint(),
|
||||
c.getDescription(), c.getField("Vendor")])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user