AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.06.2012, 15:50   #21  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Цитата:
Сообщение от smailik Посмотреть сообщение
Есть что-нибудь подобное для класса ComExcelDocument_RU?
В сообщении ZornFire как раз и приведен код метода класса ComExcelDocument_RU
Старый 01.06.2012, 16:00   #22  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Если я правильно понял, то мне надо будет к имеющемуся классу дописать этот метод и все вроде как должно заворкать?
Старый 04.06.2012, 10:17   #23  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
X++:
MultiRange = this.findRange(bookMark, _workSheet);
Borders = MultiRange.Borders();
где можно почитать какие еще есть свойства у MultiRange? В частности меня интересует высота ячейки, выравнивание в ячейке, перенос по словам.
Старый 04.06.2012, 10:50   #24  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от smailik Посмотреть сообщение
где можно почитать какие еще есть свойства у MultiRange? В частности меня интересует высота ячейки, выравнивание в ячейке, перенос по словам.
Пару вопросов по отчетам Excel
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Чтобы уточнить синтаксис какой-либо команды непосредственно в Excel, используют встроенный в Excel макрорекодер. Т.е. запись всех действий пользователя, совершаемых в Excel. Пункт меню Сервис -> Макрос -> Начать запись.

Выполняешь все необходимые действия, далее останавливаешь запись, открываешь макрос на редактирование и смотришь, какая именно команда была использована.
Старый 04.06.2012, 11:29   #25  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Хочу объединить ячейки. Набросал пробный метод. Он не работает, но AX ошибки не выдает. В чем моя ошибка?

X++:
    Com ComApplication;
    Com Range;
    Com WorkSheet;
    ;
    if (m_comDocument)
    {
        comApplication = m_comDocument.application();
        if (comApplication)
        {  
            workSheet = this.getWorkSheet(1);
            Range = workSheet.Range('a1:c1');
            Range.MergeCells();           
        }
    }
Старый 04.06.2012, 11:31   #26  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Вот я дурак ответ нашел. Всем спасибо.
X++:
Range.MergeCells(True);
Старый 04.06.2012, 14:39   #27  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
С форматированием текста по центру кто-нить сможет помочь?
X++:
void CentrAlignment(MSOfficeBookMark_RU bookMark, int _workSheet = 1)
{
    Com ComApplication;
    Com Range;
    Com WorkSheet;
    ;
    if (m_comDocument)
    {
        comApplication = m_comDocument.application();
        if (comApplication)
        {           
            workSheet = this.getWorkSheet(_workSheet);
            Range = workSheet.Range(bookMark);
            Range.HorizontalAlignment('xlCenter');
            Range.VerticalAlignment('xlCenter');           
        }
    }
}
не воркает. Ругается на метод HorizontalAlignment в COM-объекте класса Range

Последний раз редактировалось smailik; 04.06.2012 в 14:42.
Старый 04.06.2012, 15:25   #28  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,738 / 404 (17) +++++++
Регистрация: 23.03.2006
X++:
Range.HorizontalAlignment(#xlCenter)
За это сообщение автора поблагодарили: smailik (1).
Старый 05.06.2012, 14:35   #29  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Еще вопрос в эту тему. Не могу победить нижнее подчеркивание. В макросе вот это
Код:
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
ни как не могу перейти к Range(xlEdgeBottom)
X++:
workSheet = this.getWorkSheet(_workSheet);
Range = workSheet.Range(bookMark);
Borders = Range.Borders();
Дальше не выходит. Буду рад дельному совету.
Старый 05.06.2012, 14:44   #30  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
X++:
void Borders()
{
    //Рамки
    comRange = excel.findRange(ComExcelDocument_RU::numToNameCell(1,1) + ":" +
                                ComExcelDocument_RU::numToNameCell(11,i-1),1);
    borders = comRange.borders();

    border = borders.item(7);
    border.lineStyle(1); //xlContinuous
    border.weight(2); //xlThin
    border.colorIndex(-4105);

    border = borders.item(8);
    border.lineStyle(1); //xlContinuous
    border.weight(2); //xlThin
    border.colorIndex(-4105);

    border = borders.item(9);
    border.lineStyle(1); //xlContinuous
    border.weight(2); //xlThin
    border.colorIndex(-4105);

    border = borders.item(10);
    border.lineStyle(1); //xlContinuous
    border.weight(2); //xlThin
    border.colorIndex(-4105);

    border = borders.item(11);
    border.lineStyle(1); //xlContinuous
    border.weight(2); //xlThin
    border.colorIndex(-4105);

    border = borders.item(12);
    border.lineStyle(1); //xlContinuous
    border.weight(2); //xlThin
    border.colorIndex(-4105);
}
Старый 05.06.2012, 15:18   #31  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
comRange, excel, borders, border это все Com? что то у меня ругается на строку excel.findRange
а когда к своему приписал
X++:
Border = borders.item(7);
Border.lineStyle(1)
компилится, но ничего не происходит
Старый 05.06.2012, 15:42   #32  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата из одной статьи посвященной принципам перевода макроса Excel в синтасис другого языка программирования

Цитата:
Константы Excel

В теле макроса встречаются странные значения, которые начинаются с символов "xl". В данном случае - это xlCellValue и xlLess. Но и дальше по коду макроса встречаются аналогичные значения. Это именно значения, поскольку, судя по коду, они присваиваются неким параметрам. Что это такое?

Это константы. Т.е. это некоторые значения, которые были определены в момент открытия Excel. Их отличительным признаком как раз и является то, что они начинаются с символов "xl" и из кода макроса следует, что это некоторые ранее определенные значения.

Определить, чему же равны эти константы можно там же, в редакторе "Microsoft Visula Basic", где Вы и просматриваете код макроса Excel. Для этого надо открыть "Object Browser". Пункт меню "View" - подпункт "Object Browser". Далее в пустом окошке слева от кнопки с иконкой бинокля ввести имя искомой константы и нажать кнопку с иконкой бинокля (или клавишу Enter). В результате поиска в самом низу окна "Object Browser" будет отображено значение искомой константы.

В Axapta константы записывают через макросы. Либо в отдельном "файле" макросов (ветка AOT \ Macros), либо непосредственно в теле метода

X++:
#define.xlEdgeBottom(9)
#define.xlEdgeRight(10)
#define.xlContinuous(1)
#define.xlMedium(-4138)
#define.xlAutomatic(-4105)

border = borders.item(#xlEdgeBottom);
border.lineStyle(#xlContinuous);
border.weight(#xlMedium); 
border.colorIndex(#xlAutomatic);
Кстати, следует заметить, что для прорисовки рамки все параметры, указанные в макросе Excel присваивать не обязтельно. Большинство из них вполне можно оставить в значениях по уолчанию. Достаточно лишь установить значение параметра Weight()
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: smailik (1).
Старый 05.06.2012, 15:50   #33  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
спасибо!
Старый 06.06.2012, 06:20   #34  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
Цитата:
Сообщение от smailik Посмотреть сообщение
comRange, excel, borders, border это все Com? что то у меня ругается на строку excel.findRange
а когда к своему приписал
X++:
Border = borders.item(7);
Border.lineStyle(1)
компилится, но ничего не происходит
COMExcelDocument_RU excel;
Com comRange;
COM borders;
COM border;
Старый 15.06.2012, 15:35   #35  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Всем доброго дня. У меня вот какой вопрос. У меня объединены 3 ячейки. В них установлен перенос по словам, но при формировании документа если текст не влазит в ячейку то высота автоматически не увеличивается. Возможно ли каким либо образом определить весь текст влез в ячейку или не весь?
Старый 15.06.2012, 16:20   #36  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
можно попробовать выполнить AutoFit по строке (выделенным строкам)
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 15.06.2012, 16:48   #37  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от smailik Посмотреть сообщение
У меня объединены 3 ячейки. В них установлен перенос по словам, но при формировании документа если текст не влазит в ячейку то высота автоматически не увеличивается.
Это известный глюк Excel. Есть workaround: Excel
Старый 15.06.2012, 17:19   #38  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от lev Посмотреть сообщение
можно попробовать выполнить AutoFit по строке (выделенным строкам)
К сожалению, не прокатит. Нужно примерно так:

How to use Row.AutoFit for merged Excel cells


Я уже как-то использовал в ABAPе, у меня есть отлаженный фрагмент на VBScript для использования с MS Script Control:
Код:
  `Option Explicit                                                                                                     `

  `Public Function MergeAndFit(r, xlApp)                                                                               `

  `   'http://www.source-code.biz/snippets/vbasic/11.htm                                                               `
  `   ' Merges a cell range, wraps text and auto-fits the row height.                                                  `
  `   ' Because the Row.AutoFit method ignores merged cells, we temporarily expand the first column of                 `
  `   ' the cell range to the width of the whole cell range and call AutoFit with the un-merged cell.                  `

  `   Dim Row                                                                                                          `
  `   Dim Column1                                                                                                      `
  `   Dim RangeWidth                                                                                                   `
  `   Dim OldColumn1Width                                                                                              `
  `   Dim OldRowHeight                                                                                                 `
  `   Dim FitRowHeight                                                                                                 `
  `   Dim i 'As Integer                                                                                                `

  `   Set r = r.MergeArea 'чтобы можно было передавать одну (первую) ячейку                                            `
  `   Set Row = r.Rows(1)                                                                                              `
  `   Set Column1 = r.Columns(1)                                                                                       `
  `   RangeWidth = r.Width                                                                                             `
  `   OldColumn1Width = Column1.ColumnWidth                                                                            `
  `   For i = 1 To 3                     ' approximation of Column1.ColumnWidth in 3 steps                             `
  `      Column1.ColumnWidth = RangeWidth / Column1.Width * Column1.ColumnWidth                                        `
  `   Next                                                                                                             `
  `   r.WrapText = True                                                                                                `
  `   r.MergeCells = False                                                                                             `
  `   OldRowHeight = Row.rowHeight                                                                                     `
  `   Row.AutoFit                                                                                                      `
  `   FitRowHeight = Row.rowHeight                                                                                     `
  `   r.MergeCells = True                                                                                              `
  `   Column1.ColumnWidth = OldColumn1Width                                                                            `

  `   'VBScript doesn't support the IIf() function                                                                     `
  `   'Row.rowHeight = IIf(FitRowHeight > OldRowHeight, FitRowHeight, OldRowHeight)                                    `
  `   Row.rowHeight = xlApp.WorksheetFunction.Max(FitRowHeight, OldRowHeight)                                          `

  `   MergeAndFit = Row.rowHeight                                                                                      `

  `End Function                                                                                                        `
Теги
ax3.0, excel

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
gl00mie: Read Excel table via ADO Blog bot DAX Blogs 2 09.04.2010 08:32
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Вызов Item() для коллекций Excel Владимир Максимов DAX: Программирование 15 17.08.2006 19:47
Форматирование Excel-документа из Axapta kostas DAX: Программирование 6 14.04.2004 14:52
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:04.