форматирование через phoenixbsl

This commit is contained in:
Dmitry Belyaev 2022-05-05 15:03:24 +03:00
parent b1bc06b782
commit 0f9427abe8
Signed by: b4tman
GPG Key ID: 41A00BF15EA7E5F3
2 changed files with 86 additions and 87 deletions

View File

@ -4,7 +4,7 @@
комДокумент = Неопределено; комДокумент = Неопределено;
Попытка Попытка
// Для пересчётов использовать комВорд.CentimetersToPoints(ЧислоСМ) и комВорд.PointsToCentimeters(ЧислоПунктов) // Для пересчётов использовать комВорд.CentimetersToPoints(ЧислоСМ) и комВорд.PointsToCentimeters(ЧислоПунктов)
//рСантиметр=6.25; // в средних символах шрифта (при необходимости пересчитывать по рДиапазон.CharacterWidth - ширина символов, константа WdCharacterWidth // рСантиметр=6.25; // в средних символах шрифта (при необходимости пересчитывать по рДиапазон.CharacterWidth - ширина символов, константа WdCharacterWidth
//рШиринаСтраницы=75; // эмпирически, довести до ума с учётом //сообщить("стран ширина "+стран.PageWidth+", высота "+стран.PageHeight); // в пунктах, работает //рШиринаСтраницы=75; // эмпирически, довести до ума с учётом //сообщить("стран ширина "+стран.PageWidth+", высота "+стран.PageHeight); // в пунктах, работает
// Типовые настройки документа Ворд: // Типовые настройки документа Ворд:
@ -26,7 +26,7 @@
КонецЕсли; КонецЕсли;
рШиринаСтраницыВорда = Окр(комВорд.PointsToCentimeters(комСтраница.PageWidth), 2); рШиринаСтраницыВорда = Окр(комВорд.PointsToCentimeters(комСтраница.PageWidth), 2);
рВысотаСтраницыВорда = Окр(комВорд.PointsToCentimeters(комСтраница.PageHeight), 2); рВысотаСтраницыВорда = Окр(комВорд.PointsToCentimeters(комСтраница.PageHeight), 2);
Если НЕ ((20 <= рШиринаСтраницыВорда и рШиринаСтраницыВорда <= 22) и (28 <= рВысотаСтраницыВорда и рВысотаСтраницыВорда <= 30)) Тогда Если НЕ ((20 <= рШиринаСтраницыВорда И рШиринаСтраницыВорда <= 22) И (28 <= рВысотаСтраницыВорда И рВысотаСтраницыВорда <= 30)) Тогда
Сообщить("Текущая версия не обрабатывает размеры страницы, отличающиеся от А4!"); Сообщить("Текущая версия не обрабатывает размеры страницы, отличающиеся от А4!");
ЗакрытьДокумент(комДокумент); // без сохранения ЗакрытьДокумент(комДокумент); // без сохранения
ЗакрытьВорд(комВорд); ЗакрытьВорд(комВорд);
@ -49,7 +49,7 @@
Для каждого рПараграфСписка Из рСписок.ListParagraphs Цикл Для каждого рПараграфСписка Из рСписок.ListParagraphs Цикл
рФорматСписка = рПараграфСписка.Range.ListFormat; рФорматСписка = рПараграфСписка.Range.ListFormat;
рТипСписка = рФорматСписка.ListType; // WdListType рТипСписка = рФорматСписка.ListType; // WdListType
Если рТипСписка = 0 или рТипСписка = 2 или рТипСписка = 6 Тогда Если рТипСписка = 0 ИЛИ рТипСписка = 2 ИЛИ рТипСписка = 6 Тогда
// ненумерованные и bullet игнорируем // ненумерованные и bullet игнорируем
Иначе Иначе
// заниматься иерархией с проверкой погружения (рФорматСписка.ListLevelNumber) не будем, нам достаточно проверить так: // заниматься иерархией с проверкой погружения (рФорматСписка.ListLevelNumber) не будем, нам достаточно проверить так:
@ -122,8 +122,8 @@
комТаблица = Неопределено; комТаблица = Неопределено;
Для каждого знч Из мКомТаблиц Цикл Для каждого знч Из мКомТаблиц Цикл
Если знч.Начало <= рНачалоДиапазона и рНачалоДиапазона <= знч.Конец Если знч.Начало <= рНачалоДиапазона И рНачалоДиапазона <= знч.Конец
и знч.Начало <= рКонецДиапазона и рКонецДиапазона <= знч.Конец И знч.Начало <= рКонецДиапазона И рКонецДиапазона <= знч.Конец
Тогда // можно было бы рДиапазон.InRange(комТаблица.Range), но оно медленнее Тогда // можно было бы рДиапазон.InRange(комТаблица.Range), но оно медленнее
комТаблица = знч.Таблица; Прервать; комТаблица = знч.Таблица; Прервать;
КонецЕсли; КонецЕсли;
@ -151,7 +151,7 @@
стрк = стрк + 1; стрк = стрк + 1;
Иначе Иначе
Если не рИдётТаблица Тогда // выводим таблицу, а далее пропускаем все входящие в неё диапазоны, и идём до её конца Если НЕ рИдётТаблица Тогда // выводим таблицу, а далее пропускаем все входящие в неё диапазоны, и идём до её конца
ВывестиТаблицу(комВорд, комТаблица, т, стрк, рСантиметр); ВывестиТаблицу(комВорд, комТаблица, т, стрк, рСантиметр);
КонецЕсли; КонецЕсли;
рИдётТаблица = Истина; рИдётТаблица = Истина;
@ -244,7 +244,7 @@
Процедура ВывестиТаблицу(комВорд, комТаблица, табДокумент, текСтрока, рСантиметр = 6.25) Процедура ВывестиТаблицу(комВорд, комТаблица, табДокумент, текСтрока, рСантиметр = 6.25)
//рСантиметр=6.25; // рСантиметр=6.25;
рСимвол7 = Символ(7); рСимвол7 = Символ(7);
квоСтрок = комТаблица.Rows.Count; квоСтрок = комТаблица.Rows.Count;
@ -264,7 +264,7 @@
рОбластьЯчейки = табДокумент.Область(текСтрока, стлб, текСтрока, стлб + квоЯчеекМхл - 1); рОбластьЯчейки = табДокумент.Область(текСтрока, стлб, текСтрока, стлб + квоЯчеекМхл - 1);
рОбластьЯчейки.Объединить(); рОбластьЯчейки.Объединить();
Если комЯчейка.FitText или комЯчейка.WordWrap Тогда // пока так Если комЯчейка.FitText ИЛИ комЯчейка.WordWrap Тогда // пока так
рОбластьЯчейки.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить; рОбластьЯчейки.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
Иначе Иначе
рОбластьЯчейки.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Авто; рОбластьЯчейки.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Авто;
@ -281,14 +281,14 @@
рОбластьЯчейки.Шрифт = ПостроитьШрифт(ВыборШрифта(рДиапазонЯчейки)); рОбластьЯчейки.Шрифт = ПостроитьШрифт(ВыборШрифта(рДиапазонЯчейки));
// на практике удобнее оставлять автовысоту, но иногда может понадобиться: // на практике удобнее оставлять автовысоту, но иногда может понадобиться:
//рОбластьЯчейки.АвтоВысотаСтроки=Ложь; // рОбластьЯчейки.АвтоВысотаСтроки=Ложь;
//рОбластьЯчейки.ВысотаСтроки=рСантиметр*Окр(комВорд.PointsToCentimeters(комЯчейка.Height),0,РежимОкругления.Окр15как20); //рОбластьЯчейки.ВысотаСтроки=рСантиметр*Окр(комВорд.PointsToCentimeters(комЯчейка.Height),0,РежимОкругления.Окр15как20);
рОбластьЯчейки.ГоризонтальноеПоложение = ПолучитьВыравнивание(рДиапазонЯчейки.ParagraphFormat.Alignment); рОбластьЯчейки.ГоризонтальноеПоложение = ПолучитьВыравнивание(рДиапазонЯчейки.ParagraphFormat.Alignment);
// отступ - в пунктах, при необходимости требуется пересчёт! // отступ - в пунктах, при необходимости требуется пересчёт!
//Если рОбластьЯчейки.ГоризонтальноеПоложение=ГоризонтальноеПоложение.Лево Тогда // Если рОбластьЯчейки.ГоризонтальноеПоложение=ГоризонтальноеПоложение.Лево Тогда
// рОбластьЯчейки.Отступ=комЯчейка.LeftPadding; // рОбластьЯчейки.Отступ=комЯчейка.LeftPadding;
//ИначеЕсли рОбластьЯчейки.ГоризонтальноеПоложение=ГоризонтальноеПоложение.Право Тогда // ИначеЕсли рОбластьЯчейки.ГоризонтальноеПоложение=ГоризонтальноеПоложение.Право Тогда
// рОбластьЯчейки.Отступ=комЯчейка.RightPadding; // рОбластьЯчейки.Отступ=комЯчейка.RightPadding;
//КонецЕсли; //КонецЕсли;

View File

@ -1,93 +1,92 @@
 &НаКлиенте
&НаКлиенте
Асинх Процедура Конвертировать(Команда) Асинх Процедура Конвертировать(Команда)
Диалог = Новый ПараметрыДиалогаПомещенияФайлов; Диалог = Новый ПараметрыДиалогаПомещенияФайлов;
Диалог.Заголовок = "Выберите документ"; Диалог.Заголовок = "Выберите документ";
Диалог.МножественныйВыбор = Ложь; Диалог.МножественныйВыбор = Ложь;
Диалог.Фильтр = "Документы (*.doc,*.docx,*.rtf)|*.doc;*.docx;*.rtf|Все файлы|*.*"; Диалог.Фильтр = "Документы (*.doc,*.docx,*.rtf)|*.doc;*.docx;*.rtf|Все файлы|*.*";
Прогресс = 0; Прогресс = 0;
Элементы.ГруппаПрогресс.Видимость = Истина; Элементы.ГруппаПрогресс.Видимость = Истина;
Элементы.Прогресс.Видимость = Истина; Элементы.Прогресс.Видимость = Истина;
Состояние = "Передача файла"; Состояние = "Передача файла";
Оповещение_ОХодеВыполнения = Новый ОписаниеОповещения("ПомещениеФайла_ОповещенияОХодеВыполнения", ЭтаФорма, Неопределено); Оповещение_ОХодеВыполнения = Новый ОписаниеОповещения("ПомещениеФайла_ОповещенияОХодеВыполнения", ЭтаФорма, Неопределено);
ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(Оповещение_ОХодеВыполнения,,,Диалог, ЭтаФорма.УникальныйИдентификатор); ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(Оповещение_ОХодеВыполнения, , , Диалог, ЭтаФорма.УникальныйИдентификатор);
Элементы.Прогресс.Видимость = Ложь; Элементы.Прогресс.Видимость = Ложь;
Прогресс = 0; Прогресс = 0;
Если Неопределено = ОписаниеФайла Тогда Если Неопределено = ОписаниеФайла Тогда
Элементы.ГруппаПрогресс.Видимость = Ложь; Элементы.ГруппаПрогресс.Видимость = Ложь;
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Состояние = "Конвертация"; Состояние = "Конвертация";
ОбновитьОтображениеДанных(Элементы.Состояние); ОбновитьОтображениеДанных(Элементы.Состояние);
КонвертироватьНаСервере(ОписаниеФайла.Адрес, ОписаниеФайла.СсылкаНаФайл.Расширение); КонвертироватьНаСервере(ОписаниеФайла.Адрес, ОписаниеФайла.СсылкаНаФайл.Расширение);
Элементы.ГруппаПрогресс.Видимость = Ложь; Элементы.ГруппаПрогресс.Видимость = Ложь;
Элементы.ГруппаРезультат.Видимость = Истина; Элементы.ГруппаРезультат.Видимость = Истина;
КонецПроцедуры КонецПроцедуры
&НаКлиенте &НаКлиенте
Процедура ПомещениеФайла_ОповещенияОХодеВыполнения(ПомещаемыйФайл, Помещено, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт Процедура ПомещениеФайла_ОповещенияОХодеВыполнения(ПомещаемыйФайл, Помещено, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт
Прогресс = Помещено; Прогресс = Помещено;
КонецПроцедуры КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста &НаКлиентеНаСервереБезКонтекста
Процедура ПопыткаУдалитьФайлы(Файлы) Процедура ПопыткаУдалитьФайлы(Файлы)
Если Неопределено = Файлы Тогда Если Неопределено = Файлы Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Попытка Попытка
УдалитьФайлы(Файлы); УдалитьФайлы(Файлы);
Исключение Исключение
КонецПопытки; КонецПопытки;
Файлы = Неопределено; Файлы = Неопределено;
КонецПроцедуры КонецПроцедуры
&НаСервере &НаСервере
Процедура КонвертироватьНаСервере(Знач Адрес, Знач Расширение) Процедура КонвертироватьНаСервере(Знач Адрес, Знач Расширение)
Обработка = РеквизитФормыВЗначение("Объект"); Обработка = РеквизитФормыВЗначение("Объект");
РезультатКонвертации = Неопределено; РезультатКонвертации = Неопределено;
ВремФайл = ПолучитьИмяВременногоФайла(Расширение); ВремФайл = ПолучитьИмяВременногоФайла(Расширение);
Данные = ПолучитьИзВременногоХранилища(Адрес); Данные = ПолучитьИзВременногоХранилища(Адрес);
Данные.Записать(ВремФайл); Данные.Записать(ВремФайл);
Данные = Неопределено; Данные = Неопределено;
ИмяФайла = ВремФайл; ИмяФайла = ВремФайл;
Попытка Попытка
РезультатКонвертации = Обработка.ВывестиДокументВордВМоксель(ИмяФайла); РезультатКонвертации = Обработка.ВывестиДокументВордВМоксель(ИмяФайла);
Исключение Исключение
Ошибка = ОписаниеОшибки(); Ошибка = ОписаниеОшибки();
Причина = ИнформацияОбОшибке(); Причина = ИнформацияОбОшибке();
ПопыткаУдалитьФайлы(ВремФайл); ПопыткаУдалитьФайлы(ВремФайл);
Если ЭтоАдресВременногоХранилища(Адрес) Тогда Если ЭтоАдресВременногоХранилища(Адрес) Тогда
УдалитьИзВременногоХранилища(Адрес); УдалитьИзВременногоХранилища(Адрес);
Адрес = Неопределено; Адрес = Неопределено;
КонецЕсли; КонецЕсли;
ВызватьИсключение ("Ошибка конвертации в mxl",КатегорияОшибки.ОшибкаВнешнегоИсточникаДанных,"500",Ошибка,Причина); ВызватьИсключение("Ошибка конвертации в mxl", КатегорияОшибки.ОшибкаВнешнегоИсточникаДанных, "500", Ошибка, Причина);
КонецПопытки; КонецПопытки;
ПопыткаУдалитьФайлы(ВремФайл); ПопыткаУдалитьФайлы(ВремФайл);
Если ЭтоАдресВременногоХранилища(Адрес) Тогда Если ЭтоАдресВременногоХранилища(Адрес) Тогда
УдалитьИзВременногоХранилища(Адрес); УдалитьИзВременногоХранилища(Адрес);
Адрес = Неопределено; Адрес = Неопределено;
КонецЕсли; КонецЕсли;
Если Не Неопределено = РезультатКонвертации Тогда Если Не Неопределено = РезультатКонвертации Тогда
ДокументРезультат = РезультатКонвертации; ДокументРезультат = РезультатКонвертации;
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
&НаСервере &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.ГруппаПрогресс.Видимость = Ложь; Элементы.ГруппаПрогресс.Видимость = Ложь;
Элементы.ГруппаРезультат.Видимость = Ложь; Элементы.ГруппаРезультат.Видимость = Ложь;
КонецПроцедуры КонецПроцедуры