-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMain.cs
100 lines (82 loc) · 3.88 KB
/
Main.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System;
using System.Collections.Generic;
using HostMgd.ApplicationServices;
using Multicad.Runtime;
using Multicad.DatabaseServices;
using DocumentFormat.OpenXml.Spreadsheet;
using NCadCustom.Code;
using App = HostMgd.ApplicationServices;
using Db = Teigha.DatabaseServices;
using Ed = HostMgd.EditorInput;
using System.Runtime.Intrinsics.Arm;
using Rtm = Teigha.Runtime;
using System.Windows.Forms;
namespace NCadCustom
{
public class Commands : IExtensionApplication
{
public void Initialize()
{
App.DocumentCollection dm = App.Application.DocumentManager;
Ed.Editor ed = dm.MdiActiveDocument.Editor;
string msg = "PRPR_objxldata - импорт данных из файла внешней таблицы Params.xlsx";
ed.WriteMessage(msg);
}
public void Terminate()
{
}
static readonly string[] excelExtentions = { ".xlsx", ".xls", ".xlsb", ".xlsm" };
/// <summary>
/// Создание СПДС объектов на чертеже по таблице из эксель
/// Параметры и ID объектов находятся в эксель
/// </summary>
///
[Rtm.CommandMethod("PRPR_objxldata", Rtm.CommandFlags.Session)]
public static void MainCreateObjBySpreadSheet()
{
InputJig jig = new InputJig();
HostMgd.EditorInput.Editor ed = HostMgd.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
App.Document doc = App.Application.DocumentManager.MdiActiveDocument;
//string paramsFilePath = jig.GetText("Укажите полный путь до файла параметров(Excel)", false);
//paramsFilePath = paramsFilePath.Trim('"').ToLower();
string dwgName = doc.Name; // метод получения полного пути и имени текущего dwg-файла
int pos = dwgName.LastIndexOf("\\"); // позиция последнего слеша в полном пути до файла
string dwgPath = dwgName.Remove(pos, dwgName.Length - pos); // Путь до dwg файла (без имени файла)
string paramsFilePath = dwgPath + "\\Params.xlsx"; // путь до файла параметров (Excel)
if (!File.Exists(paramsFilePath))
{
ed.WriteMessage("Выбран не существующий путь! Программа завершена.");
return;
}
if (!excelExtentions.Contains(Path.GetExtension(paramsFilePath)))
{
ed.WriteMessage("Выбран не Excel файл! Программа завершена.");
return;
}
try
{
ShWorker shWorker = new ShWorker(paramsFilePath);
List<Row> dataRows = shWorker.dataRows;
List<string> headers = shWorker.GetHeaders(shWorker.sst, dataRows.ElementAt(0));
List<ObjectForInsert> objs = new List<ObjectForInsert>();
// за исключением шапки - остальное строки с данными о деталях.
Row rw = new Row();
for (int iRow = 1; iRow < dataRows.Count; iRow++)
{
rw = dataRows[iRow];
ObjectForInsert oneObject = new ObjectForInsert(shWorker.sst, headers, rw);
objs.Add(oneObject);
}
foreach (ObjectForInsert obj in objs)
{
obj.PlaceToModelSpace();
}
ed.WriteMessage("Обработано!");
}
catch (Exception e)
{
ed.WriteMessage($"Ошибка : {e}");
}
}
}
}