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

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

Код: 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
11.01.2011, 10:46
    #37052012
mys
mys
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-Word
Спасибо за пример.
Очень интересная идея и реализация.
...
Рейтинг: 0 / 0
03.03.2011, 18:09
    #37147517
mys
mys
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-Word
Дошли руки наконец до тестирования вашего генератора.
Единицы длины, которые у вас значатся как неизвестные в коментариях, ни что иное как твипсы (100 твипсов = 17.639 мм).
...
Рейтинг: 0 / 0
03.03.2011, 21:20
    #37147806
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-Word
Даже не уверен, что вообще раньше про такую слышал
Спасибо :-)
...
Рейтинг: 0 / 0
04.03.2011, 10:48
    #37148400
mys
mys
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-Word
А делали ли вы генерацию оглавления?
...
Рейтинг: 0 / 0
04.03.2011, 11:20
    #37148503
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-Word
Нет, у нас не было необходимости.
В принципе, можно подумать.
...
Рейтинг: 0 / 0
04.03.2011, 12:00
    #37148629
mys
mys
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-Word
Жалко что не используется контейнер <w:styles>.
С его помощью можно наделать стилей и применять их к повторяющимся элементам документа. Это неплохо сокращает объем документа с большим количеством элементов с повторяющимся оформлением.
...
Рейтинг: 0 / 0
04.03.2011, 12:04
    #37148645
mys
mys
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-Word
Вернее, судя по примеру, стили используются только для форматирования таблиц.
...
Рейтинг: 0 / 0
04.03.2011, 12:19
    #37148696
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-Word
Если хотите, стили прикручу :-)
Там по сути и для таблиц используется обрезок.
Просто когда долго работаешь над одним куском, то к к концу это уже так надоедает, что хочется дотянуть до какого-нибудь приемлимого результата и бросить.

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

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

Со стилями пока не врубился, как вы их подключаете к конкретной записи.
...
Рейтинг: 0 / 0
10.03.2011, 21:39
    #37158516
mys
mys
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-Word
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
11.03.2011, 05:42
    #37158780
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-Word
В классе Word.RecordProperties у меня сейчас нет методов :-)
...
Рейтинг: 0 / 0
11.03.2011, 18:01
    #37160257
mys
mys
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-Word
Блок А.Н.,

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

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

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

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

С сериализацией не очень понял. Сейчас все классы Registered, предлагаете сделать их хранимыми и сохранять на диск, чтобы не жрали память? Правда XML.Writer будет при записи в XML их поднимать в память, интересно будет этот момент отруливать.
...
Рейтинг: 0 / 0
12.03.2011, 10:44
    #37160865
mys
mys
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-Word
Частичная серализация, это значит использовать не %XML.Writer для всего дерева объектов документа, а вызывать XMLExport у узлов дерева, после чего эти узлы благополучно удалять.
...
Рейтинг: 0 / 0
15.03.2011, 16:52
    #37166168
mys
mys
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-Word
...
Рейтинг: 0 / 0
11.04.2011, 16:08
    #37210303
2acid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML-Word
Добрый день!
есть ли у кого-нить примерчик с генерацией таблицы ?
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / XML-Word / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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