28.03.2007, 14:19 | #1 |
Участник
|
Вопрос по ComExcelDocument_RU
Можно из аксапты изменять шрифт, делать его жирным или курсивом, центрировать по ячейке?
|
|
28.03.2007, 14:29 | #2 |
Участник
|
можно, но нужно доработать класс
|
|
28.03.2007, 14:30 | #3 |
NavAx
|
Можно!
вот пример метода для изменения шрифта: X++: void setFontSize(MSOfficeBookMark_RU _bookMark, int _fontNumber) { COM comRange; COM comFont; ; comRange = this.findRange(_bookMark); if (comRange) { comFont = comRange.Font(); comFont.Size(_fontNumber); } } |
|
28.03.2007, 14:40 | #4 |
Участник
|
X++: public void setFontFormatInRange( MSOfficeBookMark_RU _bookMark, int _workSheet = 1, boolean _Bold = false, boolean _Italic = false, boolean _Underline = false ) { #define.xlUnderlineStyleSingle(2) #define.xlUnderlineStyleNone(-4142) COM Rng, Font; Rng = this.findRange(_bookMark, _workSheet); Font = Rng.font(); Font.Bold(_Bold); Font.Italic(_Italic); if (_Underline) Font.Underline(#xlUnderlineStyleSingle); else Font.Underline(#xlUnderlineStyleNone); } |
|
28.03.2007, 15:11 | #5 |
Участник
|
А выравнивание в ячейке (слева, справа, в центре) никак?
|
|
28.03.2007, 15:37 | #6 |
NavAx
|
X++: void setHorAlignment(MSOfficeBookMark_RU _bookMark, int _hAlign) { COM comRange; ; comRange = this.findRange(_bookMark); if (comRange) { comRange.horizontalAlignment(_hAlign); } } |
|
28.03.2007, 15:42 | #7 |
Moderator
|
Найдите у себя на компе поиском хелп-файл vbaxl*.chm (вместо звездочки будет конкретная версия: 9 или 10 или 11). В этом файле найдите поиском и почитайте про свойства: VerticalAlignment и HorizontalAlignment. Далее воплотите их в X++ (по аналогии с тем, как вам уже рассказали про фонты).
P.S. О! Вам уже и выравнивание воплотили. Но почитать хелп все равно рекомендую для творческого осмысления. |
|
29.03.2007, 13:34 | #8 |
Участник
|
Всем спасибо, а еще такой вопрос, такого я не нашел, можно сделать внешние границы ячейки?
|
|
29.03.2007, 13:40 | #9 |
Moderator
|
Цитата:
Сделайте операцию, которую хотите, в Excel'е вручную и запишите макрорекордером. Посмотрите как это выглядит на VBA и всё будет ясно, какие ключевые слова нужно будет искать. 99.9 % того, что вы можете сделать в Excel вручную, вы можете сделать и из Аксапты программно. Много и хорошо об Excel для программистов |
|
29.03.2007, 14:00 | #10 |
Участник
|
Более того, большую часть из того, что вам может понадобиться, кто - нибудь да уже написал.
Соответственно, вы можете это найти на форуме Как вставить значение из Аксапты в Excel |
|
29.03.2007, 14:34 | #11 |
Участник
|
Цитата:
можно сделать внешние границы ячейки
X++: void setRangeBorder(COM _comRange, int _type = 1) { Com com; ; com = _comRange.Borders(); com.LineStyle(_type); } |
|
29.03.2007, 14:36 | #12 |
Moderator
|
А еще важен здравый баланс затрачиваемых усилий. Жирную левую границу ячейки, конечно, можно нарисовать и из Аксапты (как и из Дельфи, например). А можно и из Аксапты заставить Дельфи нарисовать границу ячейки в Excel
Всегда стоит подумать, не существенно ли проще, например, заготовить вручную в Excel соответствующий шаблон с крутым форматированием, а потом многократно его использовать, выводя в него из Аксапты только лишь данные. Можно даже использовать исходный код VBA, записанный макрорекордером в родном Excel и вызываемый из Аксапты для исполнения в Excel же, т.е. без "перевода" кода с языка VBA на язык X++. Позволю себе немножко поразглагольствовать на любимую тему. Форматирование таблицы Excel из Аксапты - это как бы задача второго эшелона, а первоочередное - собственно вывод данных. Т.е. когда данные отчета находятся уже в Excel, почему бы не поручить самому Excel по-привычному "по-родному" с ними разобраться. Причем, вряд ли Excel'ю потребуются еще какие-нибудь данные от Аксапты во время форматирования (чего не скажешь об Аксапте, которую для комфортной работы разработчика необходимо, например, "набить" макросами эксельных констант). В теме "Axapta программирует Excel на VBA" у меня была такая цитата: Цитата:
Сообщение от Gustav
...форматирование выводимого списка используется исключительно для того, чтобы продемонстрировать ЧТО-ЛИБО, выполняемое на коде VBA (а не классом Axapta). С таким же успехом в рамках примера можно было бы построить, например, в Excel развесистую сводную таблицу. Средствами самого же Excel, причем дальнейший перевод VBA-кода в код X++ не требуется
X++: s = strfmt( "sub OpenDemo()\n" + " Workbooks.OpenText Filename:=\"%1\", Origin:=1251, StartRow:= 1, _\n" + " DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Tab:=True, _\n" + " %2TrailingMinusNumbers:=True, _\n" + " DecimalSeparator:=\",\", ThousandsSeparator:=\" \"\n" + "End Sub", #fileName, getFields()); |
|
29.03.2007, 15:49 | #13 |
Участник
|
Известен ли народу способ копирования шаблонных областей, не портящий буфер обмена?
|
|
29.03.2007, 16:25 | #14 |
Участник
|
Можно воспользоваться автозаполнением
Range.AutoFill(RangeDest, xlFillFormats); xlFillFormats = 3 PS Только для связанных областей Range("A1:C1") -> RangeDest("A1:C100")
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 29.03.2007 в 16:32. |
|
30.03.2007, 20:33 | #15 |
Moderator
|
Цитата:
В прилагаемом шаблоне Book5.xlt определен форматный стиль по имени "MyCoolStyle", включающий в себя голубую заливку ячейки, а также рамку, состоящую из трёх тонких границ (сверху, слева, снизу) и одной толстой справа. Стиль был определен вручную при помощи команды меню Excel "Format \ Style" (стили сохраняются в workbook'ах). Далее при создании отчета на базе шаблона Book5.xlt стиль можно применить к желаемой ячейке или диапазону ячеек: X++: static void Job_TestExcelStyle(Args _args) { COM xlApp; // Excel.Application COM wbks, wbk; // Workbooks, Workbook COM rng; // Range ; xlApp = new COM('Excel.Application'); xlApp.Visible(true); wbks = xlApp.Workbooks(); wbk = wbks.Open(@'C:\Book5.xlt'); rng = xlApp.Range('B2:H20'); rng.Style('MyCoolStyle'); // и всё зальётся голубым с правыми толстыми границами :-) } |
|
05.04.2007, 10:34 | #16 |
Участник
|
|
|
05.04.2007, 10:39 | #17 |
NavAx
|
Вот так:
X++: XLSrange = this.findRange(_bookMark); |
|
05.04.2007, 10:39 | #18 |
Участник
|
Это COM
X++: COM rng; // Range //more lines go here ... rng = xlApp.Range('B2:H20'); //Вот это и есть этот самый _comRange |
|
05.04.2007, 10:46 | #19 |
Участник
|
|
|
05.04.2007, 10:49 | #20 |
Участник
|
Скорее второе.
Напишите метод в классе ComExcelDocument_RU X++: void setRangeBorder(MSOfficeBookMark_RU bookMark, int _type = 1, int _worksheet = 1) { Com com; COM comRange; ; comRange = this.findRange(bookMark, _worksheet); com = comRange.Borders(); com.LineStyle(_type); } |
|