powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / XML-Word
37 сообщений из 37, показаны все 2 страниц
XML-Word
    #37040847
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Генерация XML-Word файлов.

Это конечно не образец кодинга, но в качестве идеи сойдет.
Возможности ворда представлены не все, делал только то, что мне в конкретный момент нужно было.
Если есть интерес, могу рассказать как что делать.
...
Рейтинг: 0 / 0
XML-Word
    #37050762
mys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mys
Гость
А вы сами запускать пробовали?
Свойство Ajustment класса ParagraphProperties в одном месте используется как Ajustment, в другом как A d justment...
...
Рейтинг: 0 / 0
XML-Word
    #37050765
mys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mys
Гость
Вернее наоборот, Adjustment правильно )
...
Рейтинг: 0 / 0
XML-Word
    #37050868
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем метод Test() нерабочий :-)
Поэтому я и спросил, что если кому интересно, то покажу как что делать.
Там напрямую через проперти ничего делать не надо.
Сейчас простенький пример набросаю.
...
Рейтинг: 0 / 0
XML-Word
    #37050935
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, например

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Class Test.Word Extends %RegisteredObject
{
/// d ##class(Test.Word).CreateDoc1("e:\temp\1.doc")
ClassMethod CreateDoc1(filename as %String)
{
	 
 s obj=##class(Word.Document).%New()
 s obj.Body.Section.Properties.Margin.Top= 500  //Верхний отступ по умолчанию не нравится.
 d obj.AddParagraph().SetSpacing( 1 . 5 ).SetIndent( 7000 ).SetTab( 10500 )
 d obj.AddText("Директору ",,"Times New Roman", 12 )
 d obj.AddText("ООО «Рога и Копыта»", 1 )
 d obj.AddText("Хитровану Александру Васильевичу", 1 )
 d obj.AddText("от менеджера по отмыванию", 1 )
 d obj.AddText("Василия Ивановича Пупкина")
 
 d obj.AddParagraph().SetSpacing( 1 . 5 ).SetAdjust("center")
 d obj.AddText("", 1 ,"Times New Roman", 16 ,"b")
 d obj.AddText(, 1 ).AddText(, 1 ).AddText(, 1 ).AddText(, 1 )
 d obj.AddText("заявление.")
 
 d obj.AddParagraph().SetSpacing( 1 . 5 ).SetTab( 7500 ).SetTab( 10300 )
 d obj.AddText("Прошу предоставить мне очередной отпуск с 15.01.2011 на 24 календарных дня", 1 ,"Times New Roman", 12 )
 d obj.AddText(, 1 ).AddText(, 1 )
 
 d obj.AddTab().AddText($tr($zd($h, 4 ),"/",".")).AddText("  ")
 d obj.AddTab("u")
 d obj.SaveToFile(filename)
}

}
...
Рейтинг: 0 / 0
XML-Word
    #37052012
mys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mys
Гость
Спасибо за пример.
Очень интересная идея и реализация.
...
Рейтинг: 0 / 0
XML-Word
    #37147517
mys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mys
Гость
Дошли руки наконец до тестирования вашего генератора.
Единицы длины, которые у вас значатся как неизвестные в коментариях, ни что иное как твипсы (100 твипсов = 17.639 мм).
...
Рейтинг: 0 / 0
XML-Word
    #37147806
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже не уверен, что вообще раньше про такую слышал
Спасибо :-)
...
Рейтинг: 0 / 0
XML-Word
    #37148400
mys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mys
Гость
А делали ли вы генерацию оглавления?
...
Рейтинг: 0 / 0
XML-Word
    #37148503
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, у нас не было необходимости.
В принципе, можно подумать.
...
Рейтинг: 0 / 0
XML-Word
    #37148629
mys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mys
Гость
Жалко что не используется контейнер <w:styles>.
С его помощью можно наделать стилей и применять их к повторяющимся элементам документа. Это неплохо сокращает объем документа с большим количеством элементов с повторяющимся оформлением.
...
Рейтинг: 0 / 0
XML-Word
    #37148645
mys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mys
Гость
Вернее, судя по примеру, стили используются только для форматирования таблиц.
...
Рейтинг: 0 / 0
XML-Word
    #37148696
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если хотите, стили прикручу :-)
Там по сути и для таблиц используется обрезок.
Просто когда долго работаешь над одним куском, то к к концу это уже так надоедает, что хочется дотянуть до какого-нибудь приемлимого результата и бросить.

По-поводу размеров, там у меня может на самым оптимальным образом сделано (типа установки шрифта на каждый тег <w:r>), но этот формат в принципе какой-то нехороший с точки зрения объемов. Думаю, может быть попробовать сразу генерить в формат 2007 офиса.
...
Рейтинг: 0 / 0
XML-Word
    #37148797
mys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mys
Гость
Да стили уже сам прикрутил. Это не сложно. )))
А по поводу объемов и формата 2007, если отдается по web, то просто включаем у веб сервера архивацию и получаем примерно тот же по объемам результат. Зато пользователям с более старым офисом не надо ставить FileFormatConverter...
...
Рейтинг: 0 / 0
XML-Word
    #37149491
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы стили прикрутили к моим наработкам, или у вас уже до этого были свои?
Если к моим, то мне было бы интересно включить их в то, что у меня есть ;-)
...
Рейтинг: 0 / 0
XML-Word
    #37156930
mys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mys
Гость
1. Добавил немного геттеров и сеттеров.
2. Изменил твипсы на мм, где увидел.
3. Добавил стили. Вроде работает...
...
Рейтинг: 0 / 0
XML-Word
    #37157851
mys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mys
Гость
У вас ошибка в задании подчеркнутого текста. Надо так:
Код: plaintext
1.
2.
3.
4.
5.
Method SetUnderline() As Word.RecordProperties
{
	s ..Underline=##class(Word.Value).%New("single")
	q %this
}
...
Рейтинг: 0 / 0
XML-Word
    #37158008
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не вижу ошибку в задании подчеркивания, у меня вроде это работает
Код: plaintext
s:$f(attribute,"u") record.Properties.Underline=##class(Word.Value).%New("single")
Допускаю, что где-то есть мертвые методы, так как я сначала начал делать через методы компонентов, а потом переделал через методы документа, и что-то осталось неиспользуемым, возможно, там ошибки.

В миллиметрах, пожалуй, удобнее, но чтобы не переделывать программы, их использующие, я сделаю другие рядом.

Со стилями пока не врубился, как вы их подключаете к конкретной записи.
...
Рейтинг: 0 / 0
XML-Word
    #37158516
mys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mys
Гость
1. Ошибочный метод в классе Word.RecordProperties
2. Стили можно подключать к параграфу или к записи
К параграфу:
Код: plaintext
1.
2.
3.
 s d=##class(Word.Document).%New()
 d d.SetStyle("i1","paragraph").SetName("heading 1")
 d d.AddParagraph().SetReference("i1")
К записи аналогично, только надо в класс свойств записи добавить аналогичное свойствам параграфа свойство
Код: plaintext
Property Reference As Word.Value(XMLNAME = "w:pStyle");
И создать аналогичные методы для работы со стилями.
...
Рейтинг: 0 / 0
XML-Word
    #37158780
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В классе Word.RecordProperties у меня сейчас нет методов :-)
...
Рейтинг: 0 / 0
XML-Word
    #37160257
mys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mys
Гость
Блок А.Н.,

А тестировали ли вы, какой максимальный размер выходного документа можно сделать вашим методом? Ведь документ формируется в памяти процесса, а память в процессе каше довольно лимитирована. Наверное имеет смысл делать частичную сериализацию по ходу формирования документа, например при добавлении следующего параграфа, предыдущий сериализовать и удалять...
...
Рейтинг: 0 / 0
XML-Word
    #37160343
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С нехваткой памяти столкнулся в XML-Excel.
Точно размер не скажу, но документ 1000*20 ячеек еще формируется, а 10000*20 уже нет. Это вообще говоря, маловато.
С учетом того, что (навскидку) на каждую ячейку в памяти приходится не меньше двух объектов, а каждый объект вряд ли занимает меньше 50 байт, то суммарный объем в памяти ориентировочно 10000*20*2*50~20 Мб

У нас есть еще генератор эксель-файлов, который работает с потоками, он может генерить файлы в сотни мегабайт, но в нем "одно неверное движение и вы в жопе" - а потом ищи в этой сотне тысяч строк, где ты задал неверное смещение.
Через объектный работать поприятнее, да и можно какую-нибудь защиту от себя поставить

В ворде сложнее посчитать, но там на запись еще больше получается объектов. Правда можно и записи делать большими, и как-то структуру оптимизировать (те же стили).

Если с этим столкнутся пользователи, то на первое время придется увеличить лимит памяти на процесс, если этого не хватит, то что-то думать дальше.

С сериализацией не очень понял. Сейчас все классы Registered, предлагаете сделать их хранимыми и сохранять на диск, чтобы не жрали память? Правда XML.Writer будет при записи в XML их поднимать в память, интересно будет этот момент отруливать.
...
Рейтинг: 0 / 0
XML-Word
    #37160865
mys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mys
Гость
Частичная серализация, это значит использовать не %XML.Writer для всего дерева объектов документа, а вызывать XMLExport у узлов дерева, после чего эти узлы благополучно удалять.
...
Рейтинг: 0 / 0
XML-Word
    #37166168
mys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mys
Гость
...
Рейтинг: 0 / 0
XML-Word
    #37210303
2acid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
есть ли у кого-нить примерчик с генерацией таблицы ?
...
Рейтинг: 0 / 0
XML-Word
    #37210543
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, таблички я генерю, завтра набросаю пример, если будет время. Заодно выложу последнюю версию.
Правда наработки коллеги mys я еще не сделал (использование стилей внутри текста, изменение единиц измерения)
Готовые есть, но как-то наши внутренние бланки наверно нехорошо публиковать, да к тому же там есть вызовы других программ.
...
Рейтинг: 0 / 0
XML-Word
    #37211275
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
tabledemo
 s obj=##class(Word.Document).%New()
 s obj.Style("tbl").Type="table"
 s obj.Style("tbl").TableProperties.Borders.InsideH.Size= 20 
 s obj.Style("tbl").TableProperties.Borders.InsideV.Size= 10 
 s obj.Style("tbl").TableProperties.Borders.InsideH.Type="dotted"
 s obj.Style("tbl").TableProperties.Borders.InsideV.Type="single"
 s obj.Style("tbl").TableProperties.Borders.Bottom.Type="none"
 d obj.AddParagraph()
 d obj.AddText("qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq", 1 )
 d obj.AddTable().SetStyle("tbl")
 d obj.SwitchTableCell( 1 , 1 ).AddParagraph().SetAdjust("center")
 d obj.SetCellWidth( 3000 )
 d obj.AddText("row 1-1")
 d obj.SwitchTableCell( 1 , 2 ).AddParagraph().SetAdjust("left")
 d obj.SetCellWidth( 5000 )
 d obj.AddText("row 1-2")
 d obj.SwitchTableCell( 2 , 1 ).AddParagraph()
 d obj.SwitchTableCell( 2 , 2 ).AddParagraph().SetAdjust("right")
 d obj.AddText("row 2-2")
 
 d obj.SwithToBody()
 d obj.AddParagraph() 
 d obj.AddText("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww", 1 )
 d obj.SaveToFile("e:\1.doc")
...
Рейтинг: 0 / 0
XML-Word
    #37212207
2acid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за пример, не совсем понял как расположить таблицу в произвольном месте, поэтому добавил в класс
Код: plaintext
Word.TableProperties2
еще одно свойство
Код: plaintext
"w:tblInd"
и вот тогда получилось сдвинуть табличку
...
Рейтинг: 0 / 0
XML-Word
    #37321134
2acid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

сформированный документ можно как-нить просмотреть в ОО или на другом бесплатном софте ?
...
Рейтинг: 0 / 0
XML-Word
    #37321147
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2acid , если ОО или другой "бесплатном софт" откроет простенький файл, сохранённый в Ворде в том формате - значит откроет и так сделаный файл.
Формат ведь одинаковый...
...
Рейтинг: 0 / 0
XML-Word
    #37321399
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa 2acid , если ОО или другой "бесплатном софт" откроет простенький файл, сохранённый в Ворде в том формате - значит откроет и так сделаный файл.
Формат ведь одинаковый...

почему же формат одинаковый
у MSOffice, свой формат docx
у OO, формат OpenDocumenFormat

а MSOffice, только обещали что у себя они будут открывать ODF, но они не обещали что будут сохранять в точно таком же

сейчас есть проблема, если сгенерить этим классом документ, то он откроется нормально в MSOffice, но вот что то плохо отобразиться в OO, судя по всему что то не хватает, только узнать бы чего.
...
Рейтинг: 0 / 0
XML-Word
    #37321406
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorпочему же формат одинаковый
у MSOffice, свой формат docx
у OO, формат OpenDocumenFormat
Я писал про одинаковый формат файла сделаного на Кащее и Ворде... Про формат ОО не писал...
...
Рейтинг: 0 / 0
XML-Word
    #37321584
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мучаются люди, хотят забороть хитро-жадную Майкрософт
...
Рейтинг: 0 / 0
XML-Word
    #37322417
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже и государство бодает Майкрософт :) и его Офис:
С первого июня вступил в силу ГОСТ Р ИСО/МЭК
26300-2010, в котором в качестве стандартного формата для офисных
приложений определён Open Document Format 1.0 (ODF). С практической
стороны, вступление в силу нового ГОСТа означает преодоление всех
барьеров, мешающих предприятиям и гражданам взаимодействовать гос.
учреждениями через отправку документов в формате ODF.
...
Рейтинг: 0 / 0
XML-Word
    #37839019
Darkhan Darkhan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как сделать док файл, если структура документа заранее не известно?
...
Рейтинг: 0 / 0
XML-Word
    #37839057
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Darkhan Darkhan,

Не понял вопроса.
...
Рейтинг: 0 / 0
XML-Word
    #37839073
Darkhan Darkhan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.,

Структура создаваемого файла не известно за ранее. Структуру определяет пользователь (может администратор, главное чтобы не копаться в программном коде) и записывает в ХМЛ(пример) и определяет как и что и где должна выходить...
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / XML-Word
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]