From e72f2e994888103c6631266b14df70f79861902c Mon Sep 17 00:00:00 2001 From: AJ Date: Mon, 23 Apr 2018 08:37:12 -0400 Subject: [PATCH] Save BOM excel file with dxf files. --- ExportDXF/ExportDXF.csproj | 12 ++++ ExportDXF/Forms/MainForm.cs | 84 +++++++++++++++++++++++---- ExportDXF/Helper.cs | 25 +++++++- ExportDXF/Item.cs | 4 ++ ExportDXF/Templates/BomTemplate.xlsx | Bin 0 -> 9581 bytes ExportDXF/packages.config | 4 ++ 6 files changed, 117 insertions(+), 12 deletions(-) create mode 100644 ExportDXF/Templates/BomTemplate.xlsx create mode 100644 ExportDXF/packages.config diff --git a/ExportDXF/ExportDXF.csproj b/ExportDXF/ExportDXF.csproj index 36dae7d..ac5f91e 100644 --- a/ExportDXF/ExportDXF.csproj +++ b/ExportDXF/ExportDXF.csproj @@ -60,6 +60,10 @@ false + + ..\packages\EPPlus.4.5.1\lib\net40\EPPlus.dll + + False False @@ -71,8 +75,12 @@ C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\api\redist\SolidWorks.Interop.swconst.dll + + + + @@ -104,6 +112,7 @@ Resources.resx True + SettingsSingleFileGenerator Settings.Designer.cs @@ -116,6 +125,9 @@ PreserveNewest + + PreserveNewest + diff --git a/ExportDXF/Forms/MainForm.cs b/ExportDXF/Forms/MainForm.cs index 707576b..23654bf 100644 --- a/ExportDXF/Forms/MainForm.cs +++ b/ExportDXF/Forms/MainForm.cs @@ -1,4 +1,5 @@ -using SolidWorks.Interop.sldworks; +using OfficeOpenXml; +using SolidWorks.Interop.sldworks; using SolidWorks.Interop.swconst; using System; using System.Collections.Generic; @@ -216,7 +217,11 @@ namespace ExportDXF.Forms var items = GetItems(bom); - Print("Found " + items.Count); + foreach (var item in items) + { + } + + Print("Found " + items.Count); Print(""); ExportToDXF(items); @@ -261,9 +266,9 @@ namespace ExportDXF.Forms private void ExportToDXF(IEnumerable items) { var savePath = UserSelectFolder(); - var prefix = textBox2.Text; + var prefix = textBox2.Text; - if (savePath == null) + if (savePath == null) { Print("Cancelled\n", Color.Red); return; @@ -278,17 +283,41 @@ namespace ExportDXF.Forms if (worker.CancellationPending) break; - var fileName = prefix + item.PartNo + ".dxf"; - var savepath = Path.Combine(savePath, fileName); - var part = item.Component.GetModelDoc2() as PartDoc; + item.ItemNo = prefix + item.ItemNo; - if (part == null) + var fileName = item.ItemNo + ".dxf"; + var savepath = Path.Combine(savePath, fileName); + var model = item.Component.GetModelDoc2() as ModelDoc2; + var part = model as PartDoc; + + var config = item.Component.ReferencedConfiguration; + + var sheetMetal = model.GetFeatureByTypeName("SheetMetal"); + var thickness = sheetMetal.GetDimension("Thickness").GetValue2(config); + var db = string.Empty; + var material = part.GetMaterialPropertyName2(config, out db); + + item.Thickness = thickness; + item.Material = material; + + if (part == null) continue; - SavePartToDXF(part, item.Component.ReferencedConfiguration, savepath); + SavePartToDXF(part, config, savepath); Application.DoEvents(); } - } + + var bomFile = Path.Combine(savePath, "BOM.xlsx"); + CreateBOMExcelFile(bomFile, items.ToList()); + } + + private string ChangePathExtension(string fullpath, string newExtension) + { + var dir = Path.GetDirectoryName(fullpath); + var name = Path.GetFileNameWithoutExtension(fullpath); + + return Path.Combine(dir, name + newExtension); + } private bool SavePartToDXF(PartDoc part, string savePath) { @@ -348,6 +377,37 @@ namespace ExportDXF.Forms } } + private void CreateBOMExcelFile(string filepath, IList items) + { + var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Templates", "BomTemplate.xlsx"); + + File.Copy(templatePath, filepath, true); + + var newFile = new FileInfo(filepath); + + using (var pkg = new ExcelPackage(newFile)) + { + var workbook = pkg.Workbook; + var partsSheet = workbook.Worksheets["Parts"]; + + for (int i = 0; i < items.Count; i++) + { + var item = items[i]; + var row = i + 2; + + partsSheet.Cells[row, 1].Value = item.ItemNo; + partsSheet.Cells[row, 2].Value = item.Quantity; + partsSheet.Cells[row, 3].Value = item.Description; + partsSheet.Cells[row, 4].Value = item.PartNo; + partsSheet.Cells[row, 5].Value = item.Thickness; + partsSheet.Cells[row, 6].Value = item.Material; + } + + workbook.Calculate(); + pkg.Save(); + } + } + private string UserSelectFolder() { string path = null; @@ -363,7 +423,7 @@ namespace ExportDXF.Forms return path; } - private bool ShouldFlipView(SolidWorks.Interop.sldworks.View view) + private bool ShouldFlipView(SolidWorks.Interop.sldworks.View view) { return viewFlipDecider.ShouldFlip(view); } @@ -513,4 +573,6 @@ namespace ExportDXF.Forms get { return Path.Combine(Application.StartupPath, "Templates", "Blank.drwdot"); } } } + + } diff --git a/ExportDXF/Helper.cs b/ExportDXF/Helper.cs index 49e2cdd..492d597 100644 --- a/ExportDXF/Helper.cs +++ b/ExportDXF/Helper.cs @@ -156,5 +156,28 @@ namespace ExportDXF return -1; } - } + + public static Dimension GetDimension(this Feature feature, string dimName) + { + return feature?.Parameter(dimName) as Dimension; + } + } + + public static class Units + { + /// + /// Multiply factor needed to convert the desired units to meters. + /// + public static double ScaleFactor = 0.0254; // inches to meters + + public static double ToSldWorks(this double d) + { + return d * ScaleFactor; + } + + public static double FromSldWorks(this double d) + { + return d / ScaleFactor; + } + } } diff --git a/ExportDXF/Item.cs b/ExportDXF/Item.cs index f37acb5..023ab85 100644 --- a/ExportDXF/Item.cs +++ b/ExportDXF/Item.cs @@ -12,6 +12,10 @@ namespace ExportDXF public string Description { get; set; } + public double Thickness { get; set; } + + public string Material { get; set; } + public Component2 Component { get; set; } } } diff --git a/ExportDXF/Templates/BomTemplate.xlsx b/ExportDXF/Templates/BomTemplate.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0cf67733889ed5489d78e1750d6f95f7fc493e09 GIT binary patch literal 9581 zcmeHtg;yMD_IBg$5InfMBv=}E2<~o;JA}sFB}j0$B)A1@Bn0;mJZO+0!QF!VdS-Sv zGt7M7Kd@VUPSvSXb)T;L)_ty)iUJ%wJ^&Gb3;+PA0AhT>V~#KY06YQ!fCoT^)t7K` zbO$-Q8*6wugWL?+Jss>R3*liI^8v8X`~SE77q38t#-L*tCw9B`j)>$(t*C;CvNB|{ z7BYR>ZKQP1Bpuqu4PwSyKL$%x&06G6I#v5IefrZEM3wXOy5gei_Ut#h%CshE@8c?6 zkAZixc~Zf}6=uq~vjkXf*~d8}bE|~iMmavy;v+mF{F#jTdWxSvK6@UJ1~w&3tP(s& zhYv#ElW?{EdJ#)@UA}<1lv5~1v66a>NqP_E*~0@IK;Hw|LxGi(u=sA0ji5N-ijDpd?A`faAkPfjms+}W_s6DX_t!C9vqM9 z^XZEW8F?>8kM?-x^5&8Pg~4w$(v!!Mwb*0q+9W7=Z^^=+05gL0`d;cTn_X4GOpB}U zSBBR#@#XKl8OsWoO?~$RLnKl_ac?4nV8G4HYOcz6z@F;-nnY9GTEM2pEZ0?#+RNC& z{?n;sRtMglFPl>KfEqO~?iKf#Og~-zd4OI$@9}VsR}UXbclp54U~mjY$ucxz{hcI1 z!pUi;&=qNcl7s|+4C86f@dr=9POf%lPEK~eMYDf%1_m0^peX;{TZP(7g&wF&N4t;U z1ZQ~=;LN#mQ15B(Vj&OKGcC|l@%W#8BV}$e)R|G>fO87>IvnlyxO|4W28Vav$x;%H z3-66*e<+0DGDhYNE_!vfOxpNGx0+<^_9EjGq#t$i2Yu z0*r4@QL$WgN?jnIwB1_1^!jYqS#*QGK~}EtwCowsH{6{vVnBu>fGNpsqcEdY^KjK& z{O1r;$HEEg@Y$i|_rd<@Z_qdWcau2|9o{2=0|3qu0RSxM9Z-|`v$0fY>N{m|;``^- zKLp+?)k63K<=@j{S5CBO8iKtdc_AzK)qxofnHtmgKVQq)w7$YxqN8p+=F01E`wZUe z)^2Tdse(+1dk|A25ec-hfaqF=(f#<1AzZHYriQ&FbI0gQ&T&TM?Y=I}DLXsjLo7%D z!JLBmbm8+ChBIxT8_|n4xMAtCRANufwA=#%tCT7MK8N*dBK2xep@dJU1`tWY@p<8Q z2x~+t*b=MIvm5=(Y{T|>=uGNZkX=R#iFZ@70~R)6AWbm-OGydm0< z4Uv~61;*%wFf4MB%86iijxF^K4d3qYzU+_$22UMXn>85^I%M-@qAEelD>V;9ch9Za z4qL|_qZwTMgY09c5EU|1v@?W{;=@D9hTH0vwpJ=H!&86Ugdkqd?(KH!y43kL`Ewv? zo}3dOzBM9jHDZ1fU<4$|IcI>KnAg8M&$>zdb~E8vKMR z7bzX_TPKawq*`6)6u7MBiWqgkNs+;xPZwDUNfqb}AqR)`HG~*v4qhyIJB)S22RogI z`0tf}_(|I$?%-q>WG%c_h}qm{#wFF+D2 z5dM@v-r6~8k(EL4^FmrO6zKo0Kj3QVo+WskQkWwF=XD_A7oFj?8RRnq)Vo*5~tX9 zx%@D$+3EPOZ+ivx4S)9>LJr&tolt$np?cH&q4#f|!_685a(DYz-1+^4>pxK^G`=&s zixXe!67F8Y)91}h7`lWyA9b_l7M$75JmNxH!X^Hl&j&Klr;QEgv5n_hKVOuRT4E-$ zPPM>>eK#kxt~v6VXX_BF<=bEF%wQnNj|DSL5BdXHcXZFj;PzeXRh`& zN@;@d=A2xV7w6!04C$AOGFyieW2AZxrG`V+?|#}Lf0_5@LT;LIME#D1R#*fA^j4)*uHE z$M5^!)!x$`jUna3?;yMpL3ab+K3k8cTV5Hnf3rkuk&{f;(730n#lxM{Mv4bZCvdLD zSo}6k+zFUGAqt1lein~HTmOS%oMH4UP2~n{mc6{52S$v{ef#_Om%0Alr|!oS?dje! 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 + + + \ No newline at end of file