/// <summary> /// Загрузка из файла схемы всех необходимых объектов - текстовых и символьных объектов /// </summary> public void ReplaceText(e3Application app, Dictionary <string, string> substDict) { // 0. Инициализируем все необходимые объекты для работы с проектом e3Job job = (e3Job)app.CreateJobObject(); e3Sheet sht = (e3Sheet)job.CreateSheetObject(); e3Text txt = (e3Text)job.CreateTextObject(); e3Symbol sym = (e3Symbol)job.CreateSymbolObject(); // 1. Откроем проект Global.Log.Write("################################################"); Global.Log.Write("Приступаем к обработке файла: " + this.FullFileName); int openRes = job.Open(this.FullFileName); Global.Log.Write("Файл открыт: " + (openRes != 0).ToString()); // 1.1 Выкинем исключение, если файл не удалось открыть if (openRes == 0) { throw new Exception("Не удалось открыть файл: " + this.FullFileName); } // 2. Пройдемся перебором по всем листам проекта dynamic ShtIds = null; int nshts = job.GetSheetIds(ref ShtIds); Global.Log.Write("Кол-во листов: " + nshts); foreach (var sid in ShtIds) { // 2.1 Дропнем пустые id листа if (sid == null) { continue; } // 2.2 Подключимся к листу sht.SetId(sid); // 2.3 Получим все текстовые объекты на текущем листе и пройдемся по ним перебором dynamic TxtIds = null; int ntxt = sht.GetGraphIds(ref TxtIds); foreach (var tid in TxtIds) { /* 2.3.1 Подключимся к текстовому объекту, получим его текстовое значение и пробуем * произвести замену подстрок по словарю (если таковые там будут присутствовать) */ txt.SetId(tid); string oldVal = txt.GetText(); // Зафиксируем старое значение // 2.3.2 ПРоверим, содержит ли данная надпись символы для замены bool exec = false; // Флаг необходимости обработки данной надписи foreach (string key in substDict.Keys) { if (oldVal.Contains(key)) { exec = true; } } if (exec) { string newVal = oldVal.ParallelReplace(substDict); // Сформируем новое значение txt.SetText(newVal); // Передадим новое значение в проект Global.Log.Write("Было: " + oldVal); Global.Log.Write("Стало: " + newVal); } } // 2.4 Аналогичным образом пройдемся по символам с текстом dynamic SymIds = null; int nsym = sht.GetSymbolIds(ref SymIds); foreach (var syid in SymIds) { sym.SetId(syid); dynamic SymTxtIds = null; sym.GetTextIds(ref SymTxtIds); foreach (var sytid in SymTxtIds) { txt.SetId(sytid); string oldVal = txt.GetText(); // Зафиксируем старое значение // 2.3.2 ПРоверим, содержит ли данная надпись символы для замены bool exec = false; // Флаг необходимости обработки данной надписи foreach (string key in substDict.Keys) { if (oldVal.Contains(key)) { exec = true; } } if (exec) { string newVal = oldVal.ParallelReplace(substDict); // Сформируем новое значение txt.SetText(newVal); // Передадим новое значение в проект Global.Log.Write("Было: " + oldVal); Global.Log.Write("Стало: " + newVal); } } } } // 3. Пометим схему как обработанную this.IsProcessed = true; Global.Log.Write("################################################" + Environment.NewLine); // 4. Заключительные операции: сохранить, закрыть затереть объекты job.Save(); job.Close(); txt = null; sht = null; job = null; app = null; }