Отображение группировок строк в EXCEL в файле XLSX, созданного из 1с с LibroOffice Calc

1. Olga12 181 27.07.21 08:26 Сейчас в теме
Добрый день, у меня вопрос -

Обычные формы. Работаю с ПакетОтображаемыхДокументов, сохраняю тестовый прайс с группировками на двух страницах в XLSX, далее делаю постобработку в 1с этого файла средствами LibroOffice Calc(как пример - крашу ярлычки и указываю активный лист) и сохраняю результат в тот же файл.После чего группировки этого файла при открытии в Excel выглядят не верно, а если постобработку не делать - то верно.

Вот тестовая обработка
ТестГруппировкиПослеОбработкиLO



Если надо приведу код. Помогите отобразить группировки как надо(без итогов внизу)
Прикрепленные файлы:
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Olga12 181 27.07.21 08:33 Сейчас в теме
Вот код тестовой обработки

Процедура КнопкаВыполнитьНажатие(Кнопка)
	
	Пакет = Новый ПакетОтображаемыхДокументов;
	Пакет.КоличествоЭкземпляров = 1;
	
	Макет = ПолучитьМакет("Макет");
	ТабДок = Новый ТабличныйДокумент;
	
	ТабДок.НачатьАвтогруппировкуСтрок();
	Уровень1 = 0;
	Уровень2 = 1;
	
	ОбластьНачало = Макет.ПолучитьОбласть("СтрокаТовар|НачальныеКолонки");
	ОбластьНачало.Параметры.Товар = "Игрушка1";
	ТабДок.Вывести(ОбластьНачало,Уровень1);
	ОбластьНачало = Макет.ПолучитьОбласть("СтрокаТовар|НачальныеКолонки");
	ОбластьНачало.Параметры.Товар = "Малая(Игрушка1)";
	ТабДок.Вывести(ОбластьНачало,Уровень2);
	ОбластьНачало = Макет.ПолучитьОбласть("СтрокаТовар|НачальныеКолонки");
	ОбластьНачало.Параметры.Товар = "Большая(Игрушка1)";
	ТабДок.Вывести(ОбластьНачало,Уровень2);
	
	ОбластьНачало = Макет.ПолучитьОбласть("СтрокаТовар|НачальныеКолонки");
	ОбластьНачало.Параметры.Товар = "Игрушка2";
	ТабДок.Вывести(ОбластьНачало,Уровень1);
	ОбластьНачало = Макет.ПолучитьОбласть("СтрокаТовар|НачальныеКолонки");
	ОбластьНачало.Параметры.Товар = "Синяя(Игрушка2)";
	ТабДок.Вывести(ОбластьНачало,Уровень2);
	ОбластьНачало = Макет.ПолучитьОбласть("СтрокаТовар|НачальныеКолонки");
	ОбластьНачало.Параметры.Товар = "Белая(Игрушка2)";
	ТабДок.Вывести(ОбластьНачало,Уровень2);
	
	ТабДок.ЗакончитьАвтогруппировкуСтрок();	
	ТабДок.Защита = Ложь;
	ТабДок.ИтогиСнизу = Ложь;
	//ТабДок.Показать();
	
	ЭлементПакета = Пакет.Состав.Добавить();
	ЭлементПакета.Данные = ПоместитьВоВременноеХранилище(ТабДок, Новый УникальныйИдентификатор);
	ЭлементПакета.Наименование = СокрЛП("Мой лист1");
			
	
	ТабДок1 = Новый ТабличныйДокумент;
	
	ТабДок1.НачатьАвтогруппировкуСтрок();
	
	ОбластьНачало = Макет.ПолучитьОбласть("СтрокаТовар|НачальныеКолонки");
	ОбластьНачало.Параметры.Товар = "Игрушка0";
	ТабДок1.Вывести(ОбластьНачало,Уровень1);
	
	ОбластьНачало = Макет.ПолучитьОбласть("СтрокаТовар|НачальныеКолонки");
	ОбластьНачало.Параметры.Товар = "Игрушка3";
	ТабДок1.Вывести(ОбластьНачало,Уровень1);
	ОбластьНачало = Макет.ПолучитьОбласть("СтрокаТовар|НачальныеКолонки");
	ОбластьНачало.Параметры.Товар = "Простая(Игрушка3)";
	ТабДок1.Вывести(ОбластьНачало,Уровень2);
	ОбластьНачало = Макет.ПолучитьОбласть("СтрокаТовар|НачальныеКолонки");
	ОбластьНачало.Параметры.Товар = "Сложная(Игрушка3)";
	ТабДок1.Вывести(ОбластьНачало,Уровень2);
	
	ОбластьНачало = Макет.ПолучитьОбласть("СтрокаТовар|НачальныеКолонки");
	ОбластьНачало.Параметры.Товар = "Игрушка4";
	ТабДок1.Вывести(ОбластьНачало,Уровень1);
	ОбластьНачало = Макет.ПолучитьОбласть("СтрокаТовар|НачальныеКолонки");
	ОбластьНачало.Параметры.Товар = "Синяя(Игрушка4)";
	ТабДок1.Вывести(ОбластьНачало,Уровень2);
	
	ТабДок1.ЗакончитьАвтогруппировкуСтрок();
	ТабДок1.Защита = Ложь;
	ТабДок1.ИтогиСнизу = Ложь;
	//ТабДок1.Показать();
	
	ЭлементПакета = Пакет.Состав.Добавить();
	ЭлементПакета.Данные = ПоместитьВоВременноеХранилище(ТабДок1, Новый УникальныйИдентификатор);
	ЭлементПакета.Наименование = СокрЛП("Мой лист2");
	
	Путь = ПолучитьИмяВременногоФайла("XLSX");
	Пакет.Записать(Путь, ТипФайлаПакетаОтображаемыхДокументов.XLSX);
	
	фл = ОбработатьФайлВLO(Путь);
	
	СозданныйПрайс = Путь;
	
КонецПроцедуры

Функция ПривестиФайлКУРЛ(ПутьКФайлу) Экспорт
	 
	 ПутьКФайлу1 = СтрЗаменить(ПутьКФайлу," ","%20");
	 ПутьКФайлу1 = СтрЗаменить(ПутьКФайлу1,"\","/");
	 Возврат "file:/" + "/localhost/" + ПутьКФайлу1;
	 
Конецфункции 

Функция ОбработатьФайлВLO(ИмяПрайса)Экспорт
	
   Попытка
      ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
   Исключение
      Сообщить("Ошибка при связи с сервис менеджером (com.sun.star.ServiceManager)." + 
                + Символы.ПС + ОписаниеОшибки());
      Возврат Истина;        
   КонецПопытки;
   
   Попытка
      Desktop = ServiceManager.CreateInstance("com.sun.star.frame.Desktop");
   Исключение
      Сообщить("Ошибка при запуске сервиса Desktop (com.sun.star.frame.Desktop).'" + 
       + Символы.ПС + ОписаниеОшибки());
      Возврат Ложь; 
   КонецПопытки;
    
   Парам = Новый COMSafeArray("VT_DISPATCH", 1);
   
   Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
   Свойства1.Name = "Hidden";
   Свойства1.Value = Истина;
   Парам.SetValue(0,Свойства1);
   
   Document = Desktop.LoadComponentFromURL(ПривестиФайлКУРЛ(ИмяПрайса), "_blank", 0, Парам);
   
   Document.lockControllers();
   Document.addActionLock();
   
   Sheets=Document.getSheets();
   
   
   //Покраска ярлычков листов
   
   ЦветЯрлычка = 255;//синий
   Sheet = Sheets.getByIndex(0);
   Sheet.TabColor = ЦветЯрлычка;
	
   ЦветЯрлычка = 16776960;//желтый
   Sheet = Sheets.getByIndex(1);
   Sheet.TabColor = ЦветЯрлычка;
   
   
   //Установка активного листа
   oCtrl = Document.CurrentController;
   oCtrl.setActiveSheet(Sheets.getByIndex(0));
	
	//Сохранение документа
   Document.unlockControllers();
   Document.removeActionLock();

   Попытка
      Document.Store();
   Исключение
      Сообщить(ОписаниеОшибки());
   КонецПопытки;

   Document.Close(Истина);
   
   //Отключаем COM - соединение
   Desktop.terminate();
   
   Возврат Истина;
	
КонецФункции
Показать
3. alex_bob 246 27.07.21 14:55 Сейчас в теме +0.5 $m
Думаю, что это невозможно, так как LibreOffice не имеет такой настройки.
4. Olga12 181 27.07.21 16:17 Сейчас в теме
Ну если не имеет, то буду делать без группировок(оформлю характеристики сдвигом текста).
Может кто еще что знает по поводу группировок в ЛО(сохранение руками в xlsx и ods тоже группировки отображает не так как хотелось бы)
5. uno-c 235 29.07.21 00:44 Сейчас в теме
XLSX - это зазипованные XML. Ярлычки листов можно "покрасить" вообще без COM - разобравшись в XML-ях
6. Olga12 181 29.07.21 07:18 Сейчас в теме
(5) ярлычки это часть постобработки(в тестовой как пример), там еще формулы надо вписывать и гиперссылки проставлять.
7. Olga12 181 29.07.21 07:35 Сейчас в теме
(5) Спасибо, в ваших сообщениях нашлось Выгрузка отчета в Excel с формулами, используя заполнение - шаблон макета для сложных формул, так что возможно обойтись, наверное, без постобработки в LO.
Хотя там останется такой момент - пока не перещелкнешь лист - гиперссылки, в частности, не будут на первом листе работать, т.к Пакет сохраняет так, что все листы активны, а надо только один.
8. uno-c 235 29.07.21 07:39 Сейчас в теме +0.5 $m
там еще формулы надо вписывать и гиперссылки проставлять
Тоже через XML реализуемо, но тут уже несравнимо дольше разбираться.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот