Имя: Пароль:
1C
 
v8: Продаю недорого :) [Конвертер Табличного документа в Word]
0 NS
 
27.09.06
18:31
Удалось написать достаточно приличный универсальный конвертер Табличного документа в Word!
1 Спорт
 
27.09.06
18:33
Че-че?
2 NS
 
27.09.06
18:34
(1) Удалось написать достаточно приличный универсальный конвертер Табличного документа в Word
Так понятней?
3 Ajeksa
 
27.09.06
18:35
(0) А почему не использовал activedocument?
4 NS
 
27.09.06
18:36
(3) Задача стояла сделать экспорт всех печатных форм из Восьмерки в Word.
5 NS
 
27.09.06
18:36
из УПП
6 Спорт
 
27.09.06
18:36
А из Excel нельзя было в Word затащить?
7 zxcvb
 
27.09.06
18:38
И сколько денег хочешь?:)
8 Lendy
 
27.09.06
18:39
(0) проверь аську.
9 NS
 
27.09.06
18:41
(6) Искажаеются документы уже при сохранении в Excel,
и как из Экселя сохранить в .Doc без искажений?
(7) Пока бесплатно :)
(8) Щас проверю.
10 zxcvb
 
27.09.06
18:45
(9)2. Мало.
11 Алгоритм
 
27.09.06
18:46
А хто нить пробывал просто копи-пасте сделать, там лучше оригинала выходит
12 Lendy
 
27.09.06
18:47
(11) а колонтитулы и прочее?
13 Алгоритм
 
27.09.06
18:49
12. Колонтитулы не пробывал, а под прочим что подразумевается, печать и подпись что ли
14 NS
 
27.09.06
18:52
(13)
1. Картинки.
2. Колонтитулы.
3. Сохраняется формат - а это самое главное.
(11) Копи-Пасте просто убивает документы...
15 NS
 
27.09.06
19:07
Сразу оговорюсь - я обработку только добивал - остальное авторство -
Краузе Вадим, и Валеева Гузель.

Сначала сохраняем в html и запускаем внешнюю обработку

Процедура ПечатьWord(ВыводитьВWord = Ложь,ТабДокумент,Заголовок="") Экспорт
   Если ТабДокумент=Неопределено Тогда
       Возврат;
   КонецЕсли;    
       //КВА+
   Если Не ВыводитьВWord Тогда
       ТабДокумент.Показать(Заголовок,"");
   Иначе
#Если Клиент тогда
       ВнешняяОбработка = ВнешниеОбработки.Создать(КаталогПрограммы()+"\ExtForms_80\ИмпортТабДокументаВMSWord.epf");
       ПутьИИмяВремФайла = ПолучитьИмяВременногоФайла();
       ТабДокумент.Записать(ПутьИИмяВремФайла,ТипФайлаТабличногоДокумента.HTML);
       
       ВнешняяОбработка.ПутьИИмяВремФайла        = ПутьИИмяВремФайла;
       ВнешняяОбработка.ЛевКолонтитул            = СокрЛП(ТабДокумент.НижнийКолонтитул.ТекстСлева);
       ВнешняяОбработка.СредКолонтитул            = СокрЛП(ТабДокумент.НижнийКолонтитул.ТекстВЦентре);
       ВнешняяОбработка.ПравКолонтитул            = СокрЛП(ТабДокумент.НижнийКолонтитул.ТекстСправа);
       
       ВнешняяОбработка.ПолучитьФорму().Открыть();
       #КонецЕсли
   КонецЕсли;
   //КВА-        
КонецПроцедуры // ПечатьWord()
16 NS
 
27.09.06
19:09
Потом обрабатываем html (выравниваем, и исправляем ошибку 1С с символом Табуляции)

Процедура ПриОткрытии()
   //если открыта без параметра
   Если ПустоеЗначение(ПутьИИмяВремФайла)=1 Тогда
       Возврат;
   КонецЕсли;
   Т=новый текстовыйДокумент;
   Т1=новый текстовыйДокумент;
   Т.Прочитать(ПутьИИмяВремФайла);
   Для а=1 по Т.КоличествоСтрок() цикл
       стр=Т.ПолучитьСтроку(а);
       стр=стрзаменить(стр,символ(9),"    ");
       стр=стрзаменить(стр," font-family:"," text-align: justify; font-family:");
       стр=стрзаменить(стр," text-align: left"," text-align: justify");
       Т1.ДобавитьСтроку(стр);
   КонецЦикла;    
   Т1.Записать(ПутьИИмяВремФайла);
   Состояние("Выполняется импорт документа в Microsoft Word..");
17 NS
 
27.09.06
19:10
Потом добавляем колонтитулы

Для н=0 По СтрДлина(ПутьИИмяВремФайла)-1 Цикл
       Симв=Сред( ПутьИИмяВремФайла, СтрДлина(ПутьИИмяВремФайла)-н, 1);
       Если Симв="." Тогда
           ПутьИИмяКонФайла            = Лев( ПутьИИмяВремФайла, СтрДлина(ПутьИИмяВремФайла)-н-1)+".doc";
           ПутьИИмяВремКаталогаHTML    = Лев( ПутьИИмяВремФайла, СтрДлина(ПутьИИмяВремФайла)-н-1)+"_files";
           Прервать;
       КонецЕсли;
   КонецЦикла;


   СтрКолонтитула="";
   Для н=1 По 86 Цикл
       СтрКолонтитула    = СтрКолонтитула+" ";
   КонецЦикла;
   НачСред    = (СтрДлина(СтрКолонтитула)/2) - (СтрДлина(СредКолонтитул)/2);
   СтрКолонтитула    = Лев(СтрКолонтитула,НачСред-1) + СредКолонтитул + Прав(СтрКолонтитула,СтрДлина(СтрКолонтитула)-(НачСред+СтрДлина(СредКолонтитул)-1));
   СтрКолонтитула    = Лев(СтрКолонтитула,СтрДлина(СтрКолонтитула)-СтрДлина(ПравКолонтитул)) + ПравКолонтитул;
   СтрКолонтитула    = ЛевКолонтитул + Прав(СтрКолонтитула,СтрДлина(СтрКолонтитула)-СтрДлина(ЛевКолонтитул));
18 NS
 
27.09.06
19:11
Затем диалог выбора файла и форматирование документа

Режим    = РежимДиалогаВыбораФайла.Сохранение;
   Диалог  = Новый ДиалогВыбораФайла(Режим);
   Диалог.Расширение    = "doc";
   Диалог.Фильтр        = "Документ Microsoft Word (*.doc)|*.doc";
   Диалог.Заголовок    = "Введите имя сохраняемого файла";
   Если Диалог.Выбрать() Тогда
       Попытка
           Word    = Новый ComObject("Word.Application");    
           
           Word.Documents.Open(ПутьИИмяВремФайла,,,,,,,,,0);
           //переключиться на нижний колонтитул
           Word.ActiveWindow.ActivePane.View.SeekView = 10;
           Word.Selection.Font.Name = "Courier New";
           Word.Selection.Font.Size = 9;
           Word.Selection.TypeText(СтрКолонтитула);
           Word.ActiveWindow.ActivePane.View.SeekView = 0;
           //
           Word.ActiveDocument.PageSetup.LeftMargin = word.CentimetersToPoints(0.7);
           Word.ActiveDocument.PageSetup.RightMargin = word.CentimetersToPoints(0.7);
           Для ии=1 по Word.ActiveDocument.Tables.count цикл
               Word.ActiveDocument.Tables(ии).Rows.LeftIndent = word.CentimetersToPoints(0);
               Word.ActiveDocument.Tables(ии).Rows.AllowBreakAcrossPages = False;
               Word.ActiveDocument.Tables(ии).AllowAutoFit = false;
               Word.ActiveDocument.Tables(ии).AutoFitBehavior(2);
               Word.ActiveDocument.Tables(ии).TopPadding = word.CentimetersToPoints(0);
               Word.ActiveDocument.Tables(ии).BottomPadding = word.CentimetersToPoints(0);
               Word.ActiveDocument.Tables(ии).LeftPadding = word.CentimetersToPoints(0);
               Word.ActiveDocument.Tables(ии).RightPadding = word.CentimetersToPoints(0);
               Word.ActiveDocument.Tables(ии).Spacing = 0;
               Word.ActiveDocument.Tables(ии).PreferredWidthType = 2;
               Word.ActiveDocument.Tables(ии).PreferredWidth = 100;
           КонецЦикла;
           Для ии=1 по Word.ActiveDocument.InlineShapes.count Цикл
                   Word.ActiveDocument.InlineShapes(ии).LinkFormat.SavePictureWithDocument = true;
           КонецЦикла;
           If word.ActiveWindow.View.SplitSpecial = 0 Then
               word.ActiveWindow.ActivePane.View.Type = 1;
           Else
               word.ActiveWindow.View.Type = 1;
           EndIf;
             Word.ActiveDocument.SaveAs(Диалог.ПолноеИмяФайла,0);    
           Word.ActiveDocument.Close();            
           
           УдалитьФайлы(ПутьИИмяВремКаталогаHTML);
           УдалитьФайлы(ПутьИИмяВремФайла);
           
           Word.Documents.Open(Диалог.ПолноеИмяФайла,,,,,,,,,0);
           Word.Visible    = 1;
       Исключение
           Сообщить("Ошибка при работе с Word:"+ОписаниеОшибки());
           //Word.ActiveWindow.Close();
           Word="";
       КонецПопытки
   КонецЕсли;
   
   Закрыть();
КонецПроцедуры
19 AeDen
 
27.09.06
20:13
О как...  У меня слюни текут...
20 NS
 
27.09.06
20:37
Разделителя страниц только нет, но как только придумаю как - сделаю его восстановление(он пропадает в момент сохранения в html)
21 Advan
 
27.09.06
20:42
В КЗ добавь
22 NS
 
27.09.06
20:50
Потом - с разделителем страниц разберусь, и добавлю.
23 romix
 
модератор
27.09.06
22:35
Кстати Excel (и даже OpenOffice) тоже может открывать HTML, если его переименовать в XLS.
24 mrist
 
27.09.06
22:38
(22) готов купить окончательный вариант и считаю это нормальным
например, в свое время здорово выручила аська от Сереженко
25 NS
 
27.09.06
22:38
(23) Но это никак не поможет преобразовать ТД в .DOC :)
В Эксель всяко лучше сохранять напрямую, чем через html...
26 NS
 
27.09.06
22:39
(24) Я не торгую разработками на встроенном языке 1С :)
Так что если получится с разделителем - то бесплатно :)
27 NS
 
28.09.06
13:43
Говорят что иногда на Таблицах вместо одинарной - двойная рамка вылезает...
Как только продемонстрируют сразу подправлю.
28 NS
 
28.09.06
13:59
(+27) Ложная тревога - это был старый вариант трансяции. К новому пока ни одной претензии. :)
29 GROOVY
 
28.09.06
15:32
Чегото я не въехал чечем внешняя обработка то используется?
30 NS
 
28.09.06
15:33
(29) Чтоб можно было менять и тестировать в процессе работы пользователей.
И чтоб можно было подменять на другую, и использовать в других конфигурациячх и т.д.
31 Aleksey_3
 
28.09.06
15:33
Вот если бы он умел работать без Word`а, тогда было бы еще лучше.
32 NS
 
28.09.06
15:44
(31) А как пользователи без Ворда будут просматривать результат (Вордовский документ)???