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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.11.2005, 15:08   #1  
andy239 is offline
andy239
1C
1C
 
52 / 10 (1) +
Регистрация: 26.05.2005
:( Автовысота строк при экспорте в excel
Добрый день!

помогите пожалуйста со следующей проблемой:

как установить автовысоту строки в Excel при экспорте? Не получается сделать

worksheet.range(xlRefTo).autoFit(
"20:20"); // 20 - номер строки

ошибка
:

Метод 'autoFit' в COM-объекте класса 'Range' возвратил код ошибки 0x800A03EC (<неизвестно>), который означает: Метод AutoFit из класса Range завершен неверно.

хотя работает следующий код:

range = worksheet.range("20:20").comObject();
range.insert(-4121);

просьба не предлагать сделать в шаблоне высоту строк побольше
Спасибо
Старый 07.11.2005, 15:11   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
По идее надо делать не совсем так.

А делать select этого Range
А потом на range.autofit(true);
Старый 07.11.2005, 15:18   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
а если быть совсем точным, то вот так.
r = excel.findRange("A1");
r = r.EntireRow();
r.AutoFit();
Старый 07.11.2005, 15:19   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Для колонки соответственно
r = excel.findRange("A1");
r = r.EntireColumn();
r.AutoFit();
Старый 07.11.2005, 15:22   #5  
andy239 is offline
andy239
1C
1C
 
52 / 10 (1) +
Регистрация: 26.05.2005
Спасибо! Как сделать select? У range нет метода select (и у worksheet тоже). И как потом обратиться к selection?
Старый 07.11.2005, 15:30   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Это старый ответ? select я имел в виду findRange
Код:
Com Range;
Com Row;
;
range = worksheet.range(xlRefTo);
row = range.EntireRow();
row.AutoFit();
Старый 07.11.2005, 15:45   #7  
andy239 is offline
andy239
1C
1C
 
52 / 10 (1) +
Регистрация: 26.05.2005
Странно... У меня нет метода EntireRow на range. А если написать

range.EntireRow(), то не компилмрует:

Переменная не относится к типу CLASS.
Старый 07.11.2005, 15:49   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А чем вы пользуетесь? вы не написали. Но я так понял, что не ComExcelDocument_RU
Вот job, который отрабатывает у меня верно:
static void Job17(Args _args)
{
ComExcelDocument_RU excel = new ComExcelDocument_RU();
COM r;
;
excel.newFile("", false);
excel.insertValue("A1", "Hello World! This is a test to see how long the range can be.");
r = excel.findRange("A1");
r = r.EntireRow();
r.AutoFit();
r = excel.findRange("A1");
r = r.EntireColumn();
r.AutoFit();
excel.documentSaveAs("C:\\Temp.xls");
excel.quitApplication(true);
excel.finalize();
}

Правда я сначала еще в классе ComExcelDocument_RU
изменил код доступа к методу findRange с protected на public.
За это сообщение автора поблагодарили: zemlyn (1), Gustav (1).
Старый 07.11.2005, 16:12   #9  
andy239 is offline
andy239
1C
1C
 
52 / 10 (1) +
Регистрация: 26.05.2005
Спасибо. Так действительно работает, но у нас другой класс. Так уж исторически сложилось.

оказывается, вот в чем была проблема:

row = rangeCOM.EntireRow();
row.autoFit();

работает.

rangeCOM.EntireRow().autoFit(); - не компилируется.
Старый 07.11.2005, 16:22   #10  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Цитата:
Сообщение от andy239
rangeCOM.EntireRow().autoFit(); - не компилируется.
И не будет. Это нужно принять, как данность
Аксаптовский компилятор заранее ничего не знает о методах COM-объектов (в частности о возвращаемых ими значениях). Поэтому ему невдомёк, что метод EntireRow() вернет вам экземпляр класса. Все проверки идут уже на этапе runtime.

Кстати, по теме вопроса: будьте внимательны при использовании AutoFit() - он может не сработать, если используется объединение ячеек. В этом случае приходится выкручиваться извратными способами
__________________
Старый 08.11.2005, 11:16   #11  
Plushy is offline
Plushy
Участник
 
11 / 11 (1) +
Регистрация: 08.11.2005
AutoFit() для объединенных ячеек
Цитата:
Сообщение от Ruff
Кстати, по теме вопроса: будьте внимательны при использовании AutoFit() - он может не сработать, если используется объединение ячеек. В этом случае приходится выкручиваться извратными способами
Расскажите, пожалуйста, про эти самые извратные способы
Старый 08.11.2005, 14:32   #12  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Цитата:
Сообщение от Plushy
Расскажите, пожалуйста, про эти самые извратные способы
Возможно, решение неоптимальное, и уж точно некрасивое, но оно работает и просто реализуется. Скажу сразу, идею подсмотрел на одном из форумов, посвященных VBA.

Суть в следующем: исходим из того, что autofit работает для обычных ячеек, но не работает для объединенных. Таким образом берем на листе (например, где-нибудь сбоку, за "полями") дополнительный столбец (без каких либо объединений), устанавливаем ему такую же ширину, как и у требуемой объединенной ячейки. И затем скрываем его.
При экспорте заполняем одними и теми же данными как объединенную (видимую) ячейку, так и обычную ячейку скрытого столбца (в той же строке). И после этого выделяем всю строку и применяем к ней autofit. Высота скорректируется для всей строки, а благодаря равенству ширины требуемой и скрытой ячеек, текст аккуратно впишется в том числе и в объединенной ячейке.

PS: Речь идет об объединении "по горизонтали", то есть в пределах одной строки. Как обстоит дело с объединением нескольких строк, не знаю - не сталкивался.
__________________
За это сообщение автора поблагодарили: alex55 (1), wedmak_dk (1), star52 (1).
Старый 08.11.2005, 16:51   #13  
Plushy is offline
Plushy
Участник
 
11 / 11 (1) +
Регистрация: 08.11.2005
Спасибо за идею!
Цитата:
Сообщение от Ruff
Возможно, решение неоптимальное, и уж точно некрасивое, но оно работает и просто реализуется. Скажу сразу, идею подсмотрел на одном из форумов, посвященных VBA.

Суть в следующем: исходим из того, что autofit работает для обычных ячеек, но не работает для объединенных. Таким образом берем на листе (например, где-нибудь сбоку, за "полями") дополнительный столбец (без каких либо объединений), устанавливаем ему такую же ширину, как и у требуемой объединенной ячейки. И затем скрываем его.
При экспорте заполняем одними и теми же данными как объединенную (видимую) ячейку, так и обычную ячейку скрытого столбца (в той же строке). И после этого выделяем всю строку и применяем к ней autofit. Высота скорректируется для всей строки, а благодаря равенству ширины требуемой и скрытой ячеек, текст аккуратно впишется в том числе и в объединенной ячейке.

PS: Речь идет об объединении "по горизонтали", то есть в пределах одной строки. Как обстоит дело с объединением нескольких строк, не знаю - не сталкивался.
Спасибо за идею! Так действительно будет работать 100%. А иначе никак, ведь Excel похоже не умеет делать автовысоту строки для объединенной ячейки. И реализовать можно силами консультантов, просто настроив шаблон.
Старый 07.11.2005, 16:35   #14  
andy239 is offline
andy239
1C
1C
 
52 / 10 (1) +
Регистрация: 26.05.2005
Возникает естественный вопрос: а как вообще выгрузить значение в объединенную ячейку? Насколько я помню, это не работает, а просто летит с ошибкой "неизвестно". Используется DDEclient.poke()
Старый 07.11.2005, 16:56   #15  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
С помощью класса ComExcelDocument_RU (метода insertValue()) все отлично работает...
Старый 07.11.2005, 18:29   #16  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А вы в какую ячейку вставляете? я с DDEClient не работал, но с COM насколько я помню, без проблем вставлялось, если вставлять в ячейку левого верхнего края. А вы в какую пробовали вставлять?
Старый 08.11.2005, 11:37   #17  
andy239 is offline
andy239
1C
1C
 
52 / 10 (1) +
Регистрация: 26.05.2005
Именно так и пробовал. Спасибо.
Старый 08.11.2005, 16:28   #18  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
я пытался написать макрос для атоматического изменения размера ячеек, по заданному объединению, но он ошибался...
Теги
excel, высота строк отчета, интеграция, экспорт, экспорт в excel, экспорт/импорт

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Удаление группы строк из Excel? Hidden DAX: Программирование 15 12.07.2010 18:03
Скорость работы при экспорте в Excel YVAS DAX: Программирование 17 06.04.2010 14:25
Проблемы при экспорте в Excel ymv2000 DAX: Программирование 4 13.06.2007 06:51
Свертка строк при выводе из Аксапты в Excel Zabr DAX: Программирование 20 21.02.2006 15:21
Ошибки при экспорте в Excel Владимир Максимов DAX: Программирование 9 06.08.2004 10:12
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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