/// <summary> /// Создание символьной таблицы из одномерной коллекции строк (колонки таблицы) /// </summary> /// <param name="fromList">Колонка таблицы</param> public cSymbolTable(List<string> fromList) { Symbols = new ObservableCollection<mSymbolTableItem>(); int i = 1; foreach (string line in fromList) { mSymbolTableItem item = new mSymbolTableItem(); item.SignalName = line; Symbols.Add(item); i++; } }
/// <summary> /// Создание символьной таблицы из массива, соответствующего таблице Excel /// </summary> /// <param name="arr">Символьная таблица в виде массива массива строк [4,xxx]</param> public cSymbolTable(String[,] arr) { Symbols = new ObservableCollection<mSymbolTableItem>(); string s = arr[1,1]; for (int row = 0; row < arr.GetLength(0); row++) { mSymbolTableItem item = new mSymbolTableItem(); item.SignalName = arr[row, 0]; item.SignalAdress = arr[row, 1]; item.SignalDataType = arr[row, 2]; item.SignalComment = arr[row, 3]; item.SignalType = arr[row, 4]; item.Codename = arr[row,5]; item.SystemNumber = arr[row, 6]; item.DeviceType = arr[row, 7]; item.DeviceNumber = arr[row, 8]; item.Etc = arr[row,9]; item.DeviceTag = arr[row, 10]; item.DB_FullName = item.SystemNumber; try { item.DB_ArrayIndex = int.Parse(arr[row, 8]); } catch (Exception e) { item.DB_ArrayIndex = 0; } Symbols.Add(item); } }
/// <summary> /// Поиск на листе Excel по частичным текстовым совпадениям строк и ключей /// </summary> /// <param name="sourceSheet">Лист для поиска, источник</param> /// <param name="key">Ключ для текстового поиска</param> /// <returns>Список строк, преобразованный в список элементов класса символьной таблицы</returns> private List<mSymbolTableItem> OneClick_SearchKey(string sourceSheet, string key) { Excel.Sheets sheets = excelbook.Worksheets; Excel.Worksheet sheet = (Excel.Worksheet)sheets.get_Item(sourceSheet); sheet.Select(); Excel.Range currentFind = null; Excel.Range firstFind = null; Excel.Range oneRow = null; List<mSymbolTableItem> s7_list = new List<mSymbolTableItem>(); //------ Поиск ------------------------------------------ currentFind = excelapp.Columns.Find(key, Type.Missing, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false); while (currentFind != null) //&(final<10) ) { // Keep track of the first range you find. if (firstFind == null) { firstFind = currentFind; } // If you didn't move to a new range, you are done. else if (currentFind.get_Address(Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing) == firstFind.get_Address(Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing)) { break; } int r = currentFind.Row; mSymbolTableItem s7_item = new mSymbolTableItem(); // Строка символьной таблицы, [А234:K234] oneRow = sheet.Range["A" + r.ToString() + ":K" + r.ToString()]; //s7_item = generateListFromRange(oneRow); s7_list.Add(s7_item); currentFind.EntireRow.Clear(); currentFind = excelapp.Columns.FindNext(currentFind); } return s7_list; }
private bool isItemMatchKey(mSymbolTableItem item, string key) { bool isMatch = false; if (item.SignalType.Equals(key)) return true; if (item.SignalComment.Contains(key)) return true; return isMatch; }
/// <summary> /// Генерация текста исходного кода для заданного элемента списка сигналов /// </summary> /// <param name="item"></param> /// <returns></returns> private ObservableCollection<string> return_PeripheryCode(mSymbolTableItem item) { ObservableCollection<string> p = new ObservableCollection<string>(); string load_path = item.DB_FullName + "." + item.DB_ArrayName + "[" + item.DB_ArrayIndex + "]." + item.DeviceTag + ";"; string load_symbol = "\"" + item.SignalName + "\";"; string load_A = "A "; string load_AN = "AN "; string load_eq = "= "; string load_L = "L "; string load_T = "T "; string t = item.SignalType; switch (t) { case "Q": p.Add(load_A + load_path); p.Add(load_eq + load_symbol); break; case "I": if (item.DeviceType.Equals("Y")) { p.Add(load_AN + load_symbol); } else p.Add(load_A + load_symbol); p.Add(load_eq + load_path); break; case "IW": p.Add(load_L + load_symbol); p.Add(load_T + load_path); break; case "QW": //p.Add(load_L + load_path); p.Add(load_L + item.DB_FullName + ".LMN;"); p.Add(load_T + load_symbol); break; default: p.Add("// There no automated generated code for " + item.Codename); p.Add("NOP 0"); p.Add("// "); break; } return p; }