19.03.2010, 23:45 | #1 |
Участник
|
Вывод всех меток из заданного уровня на заданных языках в Excel
я не сошёл с ума и не славы ради, а токмо пользы для не читающих по-английски для и с благословления вышестоящей инстанции пишу опять то же самое здесь, но уже по-русски.
Порой бывает нужно на скорую руку посмотреть перевод какой-то метки на другой язык, а иногда полезно получить все метки с заданного слоя, например, USR, на котором мы вели разработку во время проекта. Следующий скрипт выгружает все метки на заданных языках с заданного слоя в Excel. Для его создания я воспользовался двумя примерами кода с нашего форума: Нахождение всех неиспользуемых меток ADODB.Recordset в оперативной памяти без связи с БД Сначала вычисляется общее количество выгружаемых меток, затем отображается окно хода выполнения, и в конце концов открывается файл Excel, сохраняемый под именем вида Labels from "+#LayerId+ " in "+#English+", "+#French+", "+#Russian+".xls". В данном конкретном случае выгружаются метки на указанных выше трёх языках из слоя SYS, но вы легко можете изменить их под свои нужды. X++: static void SisPrintAllLabelsOnGivenLanguages(Args _args) { // needed layer #define.LayerId("SYS") // all needed languages #define.English("en-us") #define.French("fr-ca") #define.Russian("ru") // label classes Label lEn = new Label(#English); Label lFr = new Label(#French); Label lRu = new Label(#Russian); // start looking every label str 250 lId; int totalLabels; RunbaseProgress progress; #macrolib.AviFiles //Excel variables section COM rstAxa = new COM('ADODB.Recordset'); // ADO: Recordset COM flds = rstAxa.Fields(); COM fld; #define.LabelId("LabelId") COM xlApp; COM wbks, wbk; COM wkss, wks; COM rng, cell, rngCR; COM font; COM entCol; COM actWin; int i, iMax; ; print("@SYS34745"); // start looking every label lId = lEn.searchFirst(''); while (lId) { if (lEn.moduleId(lId) == #LayerId) // The particular label file { // count labels totalLabels++; } lId = lEn.searchNext(); } print(strfmt("%1 = %2", "@SYS54695", totalLabels)); print("@SYS76178"); if (totalLabels<=0) return; progress = RunbaseProgress::construct(1,null); progress.setCaption("@SYS76178"); progress.setTotal(totalLabels); progress.setAnimation(#AviPrint); // <--- create excel fields in a worksheet flds.Append(#LabelId, 8); flds.Append(#English, 8); flds.Append(#French, 8); flds.Append(#Russian, 8); rstAxa.Open(); xlApp = new COM('Excel.Application'); xlApp.Visible(false); wbks = xlApp.Workbooks(); wbk = wbks.Add(); wkss = wbk.Worksheets(); wks = wkss.Item(1); wks.Name("Labels"); rng = wks.Range('A1'); flds = rstAxa.Fields(); iMax = flds.Count() - 1; for (i = 0; i <= iMax; i += 1) { fld = flds.Item(i); cell = rng.Offset(0, i); cell.Value2(fld.Name()); } rngCR = rng.CurrentRegion(); font = rngCR.Font(); font.Bold(true); cell = rng.Offset(1, 0); // <--- end of creating of excel fields in a worksheet lId = lEn.searchFirst(''); while (lId) { if (lEn.moduleId(lId) == #LayerId) // The particular label file { // print to excel progress.incCount(); rstAxa.AddNew(); fld = flds.Item(#LabelId); fld.Value(lId); fld = flds.Item(#English); fld.Value(lEn.extractString(lId)); fld = flds.Item(#French); fld.Value(lFr.extractString(lId)); fld = flds.Item(#Russian); fld.Value(lRu.extractString(lId)); rstAxa.Update(); } lId = lEn.searchNext(); } cell.CopyFromRecordset(rstAxa); progress.kill(); // format excel worksheet rngCR = rng.CurrentRegion(); entCol = rngCR.EntireColumn(); entCol.AutoFit(); cell.Select(); actWin = xlApp.ActiveWindow(); actWin.FreezePanes(true); rstAxa.Close(); xlApp.Visible(true); wbk.SaveAs("Labels from "+#LayerId+ " in "+#English+", "+#French+", "+#Russian+".xls"); }
__________________
Felix nihil admirari |
|
|
За это сообщение автора поблагодарили: gl00mie (5), player (1). |
Теги |
метки, слой приложения, язык |
|
Похожие темы | ||||
Тема | Ответов | |||
Вывод картинки в Excel | 1 | |||
Маленькое замечание про вывод в Excel | 11 | |||
Вывод в Excel в формате XML и ширина колонок | 1 | |||
Вывод в Excel в определнный Worksheet... | 1 | |||
Excel быстрый вывод | 14 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|