powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / XML-Word
25 сообщений из 37, страница 1 из 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
25 сообщений из 37, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / XML-Word
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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