| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Отчет Excel как c уровнями группировок
			![]() Есть у кого-то готовый пример как сделать такой отчет? Нужно сделать такую группировку данных с итогами Данных много, группировка и расстановка итогов работает у меня медленно. 1С вроде как умеет делать это быстро т.к создание таких отчетов для него уже продумана разработчиками. Может кто-то делал такой отчет и поделиться проектом или алгоритмом? Как сейчас считаю итоги: по мере получения данных из базы данных считаю заполняю итоги в контейнеры, потом когда все данные прочтены извлекаю итоги из контейнера и вношу в Excel Группировку делаю через макросы, примерно так: Sub MCGroup() Dim cell As Range Application.ScreenUpdating = False Rows("2:2").Select For Each cell In ActiveSheet.UsedRange.Columns(7).Cells If (cell.Row >= 7 And cell.Font.Bold = False And cell.Value <> "") Then If cell.Value <> "" Then cell.EntireRow.Group End If Next Application.ScreenUpdating = True End Sub UPD: узнал, что в 1С такие отчеты называются уровни группировок. И в 1С это действительно работает быстро  
		Последний раз редактировалось iiipoizone; 27.04.2018 в 10:43.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не группируйте вручную, указывая диапазоны. Группируйте автоматически основываясь на  значениях ячеек. Строки с одинаковыми значениями попадут в одну группу сами.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Автоматически - это как? Сводная таблица?
		 
		
		
		
		
		
		
		
		
			Последний раз редактировалось iiipoizone; 27.04.2018 в 14:10.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Держите, метод для ComExcelDocument_RU 
		
		
		
		
		
		
			X++: #define.xlSum(-4157) public void insertSubtotal(MSOfficeBookMark_RU _bookMark, int _column, int _consolidationFunction, Array _array, boolean _replace = true, boolean _pageBreaks = false, boolean _summaryBelowData = true, int _workSheet = 1 ) { Com range; ComVariant xlArray; ; xlArray = ComVariant::createFromArray(_array); range = this.findRange(_bookMark, _workSheet); range.subtotal(_column, _consolidationFunction, xlArray, _replace, _pageBreaks, _summaryBelowData); } 
				__________________ 
		
		
		
		
	Существует 10 типов людей: одни понимают двоичную систему, другие - нет.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Допустим мне надо группировать вот эту таблицу: 
		
		
		
		
		
		
		
		
			![]() У меня сейчас отчет выводиться так: ![]() SubTotal позволяет получить итоги только по одному столбцу: ![]() Можно выбрать по очереди Level 3 , Level 2, Level 1 но итоги сложатся от предудущей операции и он работает красиво только по одному или двум столбцам. Делаем SubTotal по 3-ем уровням level 3, level 2, level 1 ![]() как видим работает ужасно. Теперь представьте что будет с 5ю уровнями Последний раз редактировалось iiipoizone; 27.04.2018 в 15:31.  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Weez
			 
 
			Держите, метод для ComExcelDocument_RU 
		
	X++: #define.xlSum(-4157) public void insertSubtotal(MSOfficeBookMark_RU _bookMark, int _column, int _consolidationFunction, Array _array, boolean _replace = true, boolean _pageBreaks = false, boolean _summaryBelowData = true, int _workSheet = 1 ) { Com range; ComVariant xlArray; ; xlArray = ComVariant::createFromArray(_array); range = this.findRange(_bookMark, _workSheet); range.subtotal(_column, _consolidationFunction, xlArray, _replace, _pageBreaks, _summaryBelowData); }  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Злыдни 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А что мешает сделать все через сводную таблицу в классическом виде? 
		
		
		
			Картинки исходного диапазона (плоская таблица) и сводная по диапазону в классическом виде во вложении 
				__________________ 
		
		
		
		
	люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
https://msdn.microsoft.com/en-us/lib...code-snippet-1  | 
| 
	
 |