| 
	 | 
| 
			
			 | 
		#1 | 
| 
			
			 1C 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Добрый день! 
		
		
		
		
		
		
		
	помогите пожалуйста со следующей проблемой: как установить автовысоту строки в Excel при экспорте? Не получается сделать worksheet.range(xlRefTo).autoFit("20:20"); // 20 - номер строки ошибка: Метод 'autoFit' в COM-объекте класса 'Range' возвратил код ошибки 0x800A03EC (<неизвестно>), который означает: Метод AutoFit из класса Range завершен неверно. хотя работает следующий код: range = worksheet.range("20:20").comObject(); range.insert(-4121); просьба не предлагать сделать в шаблоне высоту строк побольше   Спасибо  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			По идее надо делать не совсем так. 
		
		
		
		
		
		
			
		
		
		
		
	А делать select этого Range А потом на range.autofit(true);  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			а если быть совсем точным, то вот так. 
		
		
		
		
		
		
			
		
		
		
		
	r = excel.findRange("A1"); r = r.EntireRow(); r.AutoFit();  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Для колонки соответственно 
		
		
		
		
		
		
			
		
		
		
		
	r = excel.findRange("A1"); r = r.EntireColumn(); r.AutoFit();  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 1C 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо! Как сделать select? У range нет метода select (и у worksheet тоже). И как потом обратиться к selection?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Это старый ответ? select я имел в виду findRange 
		
		
		
		
		
		
			
		
		
		
		
	Код: Com Range; Com Row; ; range = worksheet.range(xlRefTo); row = range.EntireRow(); row.AutoFit();  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 1C 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Странно... У меня нет метода EntireRow на range. А если написать 
		
		
		
		
		
		
		
	range.EntireRow(), то не компилмрует: Переменная не относится к типу CLASS.  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А чем вы пользуетесь? вы не написали. Но я так понял, что не 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). | |
| 
			
			 | 
		#9 | 
| 
			
			 1C 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо. Так действительно работает, но у нас другой класс. Так уж исторически сложилось. 
		
		
		
		
		
		
		
	оказывается, вот в чем была проблема: row = rangeCOM.EntireRow(); row.autoFit(); работает. rangeCOM.EntireRow().autoFit(); - не компилируется.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Дмитрий Ерин 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от andy239
			
			 
rangeCOM.EntireRow().autoFit(); - не компилируется. 
		
	![]() Аксаптовский компилятор заранее ничего не знает о методах COM-объектов (в частности о возвращаемых ими значениях). Поэтому ему невдомёк, что метод EntireRow() вернет вам экземпляр класса. Все проверки идут уже на этапе runtime. Кстати, по теме вопроса: будьте внимательны при использовании AutoFit() - он может не сработать, если используется объединение ячеек. В этом случае приходится выкручиваться извратными способами  
		
				__________________ 
		
		
		
		
	 
			 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			AutoFit() для объединенных ячеек
			 Цитата: 
	
		
			Сообщение от Ruff
			
			 
Кстати, по теме вопроса: будьте внимательны при использовании AutoFit() - он может не сработать, если используется объединение ячеек. В этом случае приходится выкручиваться извратными способами  
		
	![]()  
		 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Дмитрий Ерин 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Plushy
			
			 
Расскажите, пожалуйста, про эти самые извратные способы  
		
	![]() Суть в следующем: исходим из того, что autofit работает для обычных ячеек, но не работает для объединенных. Таким образом берем на листе (например, где-нибудь сбоку, за "полями") дополнительный столбец (без каких либо объединений), устанавливаем ему такую же ширину, как и у требуемой объединенной ячейки. И затем скрываем его. При экспорте заполняем одними и теми же данными как объединенную (видимую) ячейку, так и обычную ячейку скрытого столбца (в той же строке). И после этого выделяем всю строку и применяем к ней autofit. Высота скорректируется для всей строки, а благодаря равенству ширины требуемой и скрытой ячеек, текст аккуратно впишется в том числе и в объединенной ячейке. PS: Речь идет об объединении "по горизонтали", то есть в пределах одной строки. Как обстоит дело с объединением нескольких строк, не знаю - не сталкивался. 
				__________________ 
		
		
		
		
	 
			 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: alex55 (1), wedmak_dk (1), star52 (1). | |
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Спасибо за идею!
			 Цитата: 
	
		
			Сообщение от Ruff
			
			 
Возможно, решение неоптимальное, и уж точно некрасивое, но оно работает и просто реализуется. Скажу сразу, идею подсмотрел на одном из форумов, посвященных VBA. 
		
	Суть в следующем: исходим из того, что autofit работает для обычных ячеек, но не работает для объединенных. Таким образом берем на листе (например, где-нибудь сбоку, за "полями") дополнительный столбец (без каких либо объединений), устанавливаем ему такую же ширину, как и у требуемой объединенной ячейки. И затем скрываем его. При экспорте заполняем одними и теми же данными как объединенную (видимую) ячейку, так и обычную ячейку скрытого столбца (в той же строке). И после этого выделяем всю строку и применяем к ней autofit. Высота скорректируется для всей строки, а благодаря равенству ширины требуемой и скрытой ячеек, текст аккуратно впишется в том числе и в объединенной ячейке. PS: Речь идет об объединении "по горизонтали", то есть в пределах одной строки. Как обстоит дело с объединением нескольких строк, не знаю - не сталкивался.  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 1C 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Возникает естественный вопрос: а как вообще выгрузить значение в объединенную ячейку? Насколько я помню, это не работает, а просто летит с ошибкой "неизвестно". Используется DDEclient.poke()
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Дмитрий Ерин 
		
			
	 | 
	
	
	
		
		
		
		 
			
			С помощью класса ComExcelDocument_RU (метода insertValue()) все отлично работает...
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А вы в какую ячейку вставляете? я с DDEClient не работал, но с COM насколько я помню, без проблем вставлялось, если вставлять в ячейку левого верхнего края. А вы в какую пробовали вставлять?
		 
		
		
		
		
		
		
			
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 1C 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Именно так и пробовал. Спасибо.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			я пытался написать макрос для атоматического изменения размера ячеек, по заданному объединению, но он ошибался...
		 
		
		
		
		
		
		
		
	 | 
| 
	
 |