You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

412 lines
14 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

namespace KPlan.RefActions {
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Base;
using Eplan.EplApi.DataModel;
using Eplan.EplApi.HEServices;
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using System.Xml;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using Microsoft.Office.Interop.Excel;
using System.Data;
using System.Diagnostics;
public class EplimPublicMethod {
private string eplan_temp_path;
private List<string> parts_list;
private string PROJ_FULL_NAME;
private string PROJ_NAME;
private string xml_file_name;
private string zwl_file_name;
public EplimPublicMethod() {
this.parts_list = new List<string>();
}
public bool Execute() {
Boolean isOk = false;
SelectionSet set;
Eplan.EplApi.DataModel.Project project;
string str;
this.eplan_temp_path = Environment.GetEnvironmentVariable("TEMP").ToString() + @"\";
try {
set = new SelectionSet();
project = set.GetCurrentProject(true);
if (project == null) {
MessageBox.Show("项目不存在。");
return false;
}
// flag2 = 0;
// goto Label_00A9;
// Label_0052:
str = this.TcPath(project.ProjectFullName);
if (str == null) {
MessageBox.Show("项目名称为空。");
return false;
}
isOk = this.ZipProject(project, str);
this.WriteEplanMsg();
}
catch {
MessageBox.Show("Error!");
return false;
}
return isOk;
}
public List<string> get_parts_list() {
List<string> list;
list = this.parts_list;
return list;
}
public string get_proj_full_name() {
string str;
str = this.PROJ_FULL_NAME;
return str;
}
public string get_proj_name() {
string str;
str = this.PROJ_NAME;
return str;
}
private string TcPath(string projectName) {
string str;
string str2;
string str3;
string str4;
string str5;
string str6;
string str7;
string str8;
string[] strArray;
bool flag;
str = null;
str2 = @"Eplan\Electric P8\EplLog.txt";
str3 = System.Windows.Forms.Application.CommonAppDataPath;
str4 = System.Windows.Forms.Application.CompanyName;
str5 = System.Windows.Forms.Application.ProductName;
str6 = System.Windows.Forms.Application.ProductVersion;
str7 = str4 + @"\" + str5 + @"\" + str6;
if ((str3.Contains(str7))) {
goto Label_007A;
}
str3 = str3.Substring(0, str3.IndexOf(str7));
Label_007A:
str8 = this.eplan_temp_path;
return str8;
}
public bool WriteEplanMsg() {
bool flag;
string str;
FileStream stream;
StreamWriter writer;
Exception exception;
try {
stream = new FileStream(this.eplan_temp_path + "eplan_msg.txt", FileMode.OpenOrCreate, FileAccess.Write);
stream.Seek(0L, 0);
stream.SetLength(0L);
writer = new StreamWriter(stream);
writer.WriteLine(this.PROJ_NAME);
writer.WriteLine(this.zwl_file_name);
writer.WriteLine(this.xml_file_name);
writer.Close();
stream.Close();
}
catch (Exception exception1) {
exception = exception1;
MessageBox.Show(exception.Message);
}
return true;
}
//--------------------------------将EXCEL转换成xml-------------------------------------------------
/// <summary>
/// 将xml转换成XML
/// </summary>
/// <param name="xlsPath"></param>
/// <param name="xmlPath"></param>
/// <returns></returns>
private List<ElecPartInfo> xlsToXml(String excelFilePath) {
Stopwatch wath = new Stopwatch();
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Sheets sheets = null;
Microsoft.Office.Interop.Excel.Workbook workbook = null;
object oMissiong = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Range range = null;
List<ElecPartInfo> dt = new List<ElecPartInfo>();
wath.Start();
try {
if (app == null) {
return null;
}
workbook = app.Workbooks.Open(excelFilePath, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong);
//将数据读入到DataTable中——Start
sheets = workbook.Worksheets;
// UI.GetUI().NXMessageBox.Show("MSG",NXMessageBox.DialogType.Information,"111");
Microsoft.Office.Interop.Excel.Worksheet worksheet = sheets.get_Item(1) as Microsoft.Office.Interop.Excel.Worksheet;//读取第一张表
// UI.GetUI().NXMessageBox.Show("MSG", NXMessageBox.DialogType.Information, "22");
if (worksheet == null)
return null;
string cellContent = null;
int iRowCount = worksheet.UsedRange.Rows.Count;
int iColCount = worksheet.UsedRange.Columns.Count;
int partNo = -1;
int partCount = -1;
int partErp = -1;
int xmh = -1;
//负责列头Start
for (int iCol = 1; iCol <= iColCount; iCol++) {
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, iCol];
cellContent = (range.Value2 == null) ? "" : range.Text.ToString();
switch (cellContent) {
case "物料编码":
partNo = iCol;
break;
case "数量":
partCount = iCol;
break;
case "ERP编码":
partErp = iCol;
break;
case "项目号":
xmh = iCol;
break;
default:
break;
}
}
for (int iRow = 2; iRow <= iRowCount; iRow++) {
ElecPartInfo partInfo = new ElecPartInfo();
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[iRow, partCount];
partInfo.P_ARTICLEREF_COUNT = (range.Value2 == null) ? "" : range.Text.ToString();
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[iRow, partErp];
partInfo.P_ARTICLE_ERPNR = (range.Value2 == null) ? "" : range.Text.ToString();
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[iRow, partNo];
partInfo.P_ARTICLEREF_PARTNO = (range.Value2 == null) ? "" : range.Text.ToString();
range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[iRow, xmh];
partInfo.P_ARTICLEREF_IDENTNAME = (range.Value2 == null) ? "" : range.Text.ToString();
Microsoft.Office.Interop.Excel.Range rangetemp = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[iRow, 1];
String cellStr = (rangetemp.Value2 == null) ? "" : rangetemp.Text.ToString();
if (cellStr.Trim().Equals("")) {
break;
}
if (partInfo.P_ARTICLEREF_COUNT != null && !partInfo.P_ARTICLEREF_COUNT.Equals("0"))
dt.Add(partInfo);
}
wath.Stop();
TimeSpan ts = wath.Elapsed;
return dt;
}
catch (Exception ex) {
return dt;
}
finally {
workbook.Close(false, oMissiong, oMissiong);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
workbook = null;
app.Workbooks.Close();
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
app = null;
GC.Collect();
GC.WaitForPendingFinalizers();
}
return dt;
}
/// <summary>
/// 写入XML文件
/// </summary>
/// <param name="xmlPath"></param>
/// <param name="partList"></param>
/// <returns></returns>
private bool writeXml(String xmlPath, List<ElecPartInfo> partList) {
bool flag = true;
StringBuilder xmlResult = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
if (partList != null && partList.Count > 0) {
xmlResult.AppendFormat("<partlist RECORD_COUNT=\"{0}\">", partList.Count);
foreach (ElecPartInfo part in partList) {
xmlResult.AppendFormat("<device P_ARTICLEREF_IDENTNAME=\"{0}\">", part.P_ARTICLEREF_IDENTNAME);
xmlResult.AppendFormat("<part P_ARTICLEREF_PARTNO=\"{0}\" P_ARTICLE_ERPNR=\"{1}\" P_ARTICLEREF_COUNT=\"{2}\"/>", part.P_ARTICLEREF_PARTNO, part.P_ARTICLE_ERPNR, part.P_ARTICLEREF_COUNT);
xmlResult.Append("</device>");
}
xmlResult.Append("</partlist>");
}
//写入文件
try {
//1.创建文件流
FileStream fileStream = new FileStream(xmlPath, FileMode.Create);
//2.创建写入器
StreamWriter streamWriter = new StreamWriter(fileStream);
//3.将内容写入文件
streamWriter.WriteLine(xmlResult);
//4.关闭写入器
streamWriter.Close();
//5.关闭文件流
fileStream.Close();
}
catch (Exception e) { }
return flag;
}
//-------------------------------------------------------------------------------------
private bool ZipProject(Eplan.EplApi.DataModel.Project currentProject, string tcPath) {
bool flag;
string str;
ActionCallingContext context;
string[] strArray;
string str2;
ActionCallingContext context2;
ActionCallingContext context3;
PartsService service;
Progress progress;
CommandLineInterpreter interpreter;
Exception exception;
try {
this.PROJ_FULL_NAME = currentProject.ProjectFullName;
str = this.PROJ_FULL_NAME + ".zw1";
this.PROJ_NAME = currentProject.ProjectName;
this.zwl_file_name = "";
this.zwl_file_name = tcPath + this.PROJ_NAME + ".zw1";
context = new ActionCallingContext();
strArray = context.GetParameters();
context.AddParameter("TYPE", "PROJECT");
context.AddParameter("DESTINATIONPATH", tcPath);
context.AddParameter("ARCHIVENAME", str);
context.AddParameter("BACKUPMETHOD", "BACKUP");
context.AddParameter("BACKUPMEDIA", "DISK");
context.AddParameter("SPLITSIZE", "0.0");
context.AddParameter("BACKUPAMOUNT", "BACKUPAMOUNT_ALL");
context.AddParameter("SPLITSIZE", "0.0");
context.AddParameter("INCLEXTDOCS", "1");
context.AddParameter("INCLIMAGES", "1");
str2 = currentProject.ProjectDirectoryPath;
context2 = new ActionCallingContext();
context2.AddParameter("TYPE", "MASTERDATA");
context2.AddParameter("ARCHIVENAME", "D.xls");
context2.AddParameter("PROJECTNAME", str2);
context2.AddParameter("DESTINATIONPATH ", @"c:\");
context2.AddParameter("BACKUPMETHOD", "BACKUP");
context2.AddParameter("BACKUPMEDIA", "DISK");
context2.AddParameter("SOURCEPATH", "");
context2.AddParameter("SPLITSIZE", "0.0");
context2.AddParameter("BACKUPAMOUNT", "BAKAMOUNT_ALL");
context2.AddParameter("INCLEXTDOCS", "1");
context2.AddParameter("INCLIMAGES", "1");
context3 = new ActionCallingContext();
//context3.AddParameter("PROJECTNAME", "EXPORT");
context3.AddParameter("PROJECTNAME", str2);
this.xml_file_name = tcPath + this.PROJ_NAME + ".xml";
String xls_file_name = tcPath + this.PROJ_NAME + ".xls";
context3.AddParameter("CONFIGSCHEME", "部件汇总表2加ERP编码");
context3.AddParameter("LANGUAGE", "zh_CN");
context3.AddParameter("DESTINATIONFILE", xls_file_name);
//context3.AddParameter("MODE", "0");
//context3.AddParameter("ADDITIONAL_LANGUAGE", "1");
service = new PartsService();
progress = new Progress("SimpleProgress");
progress.BeginPart(100.0, "");
progress.ShowImmediately();
progress.SetAllowCancel(true);
if (progress.Canceled()) {
MessageBox.Show("操作终止");
progress.EndPart(true);
return false;
}
interpreter = new CommandLineInterpreter();
if (!interpreter.Execute("backup", context)) {
MessageBox.Show("项目不能备份");
progress.EndPart(true);
return false;
}
if (!interpreter.Execute("label", context3)) {
MessageBox.Show("导出XML失败");
progress.EndPart(true);
return false;
}
List<ElecPartInfo> partList = xlsToXml(xls_file_name);
writeXml(this.xml_file_name, partList);
}
catch (Exception exception1) {
exception = exception1;
MessageBox.Show(exception.Message);
return false;
}
return true;
}
}
/// <summary>
/// 元器件解析单元
/// </summary>
class ElecPartInfo {
public String P_ARTICLE_ERPNR { get; set; }
public String P_ARTICLEREF_PARTNO { get; set; }
public String P_ARTICLEREF_COUNT { get; set; }
public String P_ARTICLEREF_IDENTNAME { get; set; }
}
}