powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Генерация XML-Excel файлов
24 сообщений из 49, страница 2 из 2
Генерация XML-Excel файлов
    #37023819
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Пока не понял, что за алгоритм сжатия у них. Но вроде не zip?
В документации к методам указан используемый алгоритм .

Блок А.Н.А какие ограничения xml формата для вас критичны?
Всё то, к чему привык пользователь: ЭЦП, шифрация данных, графики, изображения и т.п.
Для разработчика: поддержка Excel с версии 97, функции постобработки типа AutoFit , документируемость SDK.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37023839
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я человек темный, zlib это же еще не совсем zip?

А какой метод генерации используете? Activate?
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37023857
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.zlib это же еще не совсем zip? Zlib

Zip
Блок А.Н.А какой метод генерации используете? Activate? Ни в коем случае . Не нужно забывать про ActiveX и x64.

PS: спасибо за поддержку, особенно за марсианские яблони и ви... Впрочем, нет. Только за яблони.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37023937
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По zip надо подумать, похоже zlib это какая-то заготовка к нему, про те же заголовки нефига непонятно. Если всерьез займусь xlsx - а повод к этому есть, хотя бы претензия на маленький размер, если у нас тут файлы по 200Мб, которые через веб передаются.

Про яблони - так это нам нужно спасибо сказать вам.
Вы единственный, кого я замечаю борющимся за каше на чужом поле. Обычно я избегаю встревать в такие дискуссии, но тут что-то зацепило.
Еще мне кажется, что мы призы с krvsa(сорри) незаслуженно получили, особенно если с вами сравнивать, хотя это фигня, конечно.
И русский отдел маркетинга ИС зря получает свою зарплату, если он вообще есть.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37024098
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н., Шаблон хранится на диске, сжимаем через $zf, читаем и отправляем через csp.
Блок А.Н.В любом случае, напрямую через теги это сильно страшно, ошибиться же легко? Если честно, не понял почему. Сделали базовый интерфейс и больше про теги никто не вспоминает, на вход передать глобал определенной структуры...
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37024259
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А там шрифты-границы, и всякие объединения ячеек через глобал удобно передавать?
Или не используете?
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37024294
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н., не могу вспонить ситуацию, когда что-то нельзя передать через глобал... :)
Код: plaintext
1.
2.
s @gl@("row",row,"c",cell,"class")="myclass"
s @gl@("merges", 1 ,"ref")="A$1:B$1"
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37190597
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefint,

Приветствую!
если есть возможность, можете описать или скинуть что нить такое, что бы понять как именно нужно работать из Cache с файлами MS Office Excel 2007. Ну очень заинтересовала эта темка. Особенно интересует часть про разархивирование и архивирование

Заранее спасибо
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37192198
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007, постараюсь выложить пример в ближайшее время.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37192499
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefint, ок буду ждать
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37211604
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет ты про меня не забыл?

doublefint
Код: plaintext
1.
2.
3.
4.
5.
<row>
        <c t="inlineStr">
		<is><t>Привет мир!</t></is>
	</c>
</row>
с - column или cell, @t - type, v - value, is - inline string, t - text

Такое формирование данных - это файл sheet1.xml верно?
я написал так:
Код: plaintext
1.
2.
3.
<sheetData>
 <row r="4"><c r="B4" t="inlineStr"><is><t>Привет мир!</t></is></row>
</sheetData>
выдал ошибку:
Код: plaintext
1.
<removedPart>Замененный компонент: часть /xl/worksheets/sheet1.xml с ошибкой XML. Недопустимый знак xml. Строка  2 , столбец  571 .</removedPart>

с чем это связано? не подскажешь?
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37211688
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я написал так:
Код: plaintext
1.
2.
3.
<sheetData>
 <row r="4"><c r="B4" t="inlineStr"><is><t>Привет мир!</t></is></c></row>
</sheetData>
забыл тег закрыть </c>
)))
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37213271
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007, не забыл. Были проблемы (переезжали с 2008 на 2010 ;), был сильно занят, прошу прощения.
Собственно, сам пример (сильно упрощенный):

Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
/// Сложная страница, которая сформирует новые xml данные, 
/// запакует их в формат xls, 
/// отдаст пользователю
Class csp.out Extends %CSP.Page {

/// подменим на excel
Parameter CONTENTTYPE = "application/excel";

///Parameter CHARSET не определен, так как будем отдавать Excel


/// "text/html";
/// Пишет файл с данными
/// см. исходный файл : template\xl\worksheets\sheet1.xml
ClassMethod wSheet1() As %String
{
 ;Код ниже просто скопирован из файла шаблона и оставлен как есть
 &html<<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <worksheet 
     xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" 
     xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">>
     ;<dimension ref="A1:D2"/> - вывод этой строки подавляем, так как данных у нас будет больше
     &html<<sheetViews>
      <sheetView workbookViewId="0">
      <pane xSplit="2" ySplit="1" topLeftCell="C2" activePane="bottomRight" state="frozenSplit"/>
      <selection pane="bottomLeft" activeCell="A2" sqref="A2"/>
      <selection pane="topRight" activeCell="C1" sqref="C1"/>
      <selection pane="bottomRight" activeCell="C2" sqref="C2"/>
     </sheetView>
     </sheetViews>
     <sheetFormatPr defaultRowHeight="12.75"/>
     <cols>
      <col min="1" max="1" width="10" customWidth="1"/>
      <col min="2" max="2" width="8.7109375" customWidth="1"/>
      <col min="3" max="3" width="19.42578125" customWidth="1"/>
      <col min="4" max="4" width="14.28515625" customWidth="1"/>
     </cols>
     <sheetData>>
      
      ;Обратите внимание на описание заголовков колонок 
      ;вместо строковых значений - ссылки справочник в файле sharedStrings.xml
      
      &html<<row r="1" spans="1:4" ht="15.75" thickBot="1">
       <c r="A1" s="1" t="s"><v> 0 </v></c>
       <c r="B1" s="1" t="s"><v> 1 </v></c>
       <c r="C1" s="1" t="s"><v> 2 </v></c>
       <c r="D1" s="1" t="s"><v> 3 </v></c>
      </row>>
      
      /******ДИНАМИЧЕСКАЯ ЧАСТЬ ОТЧЕТА**************/
      d ##class(test.data).%KillExtent() ;каждый раз разный отчет
      d ##class(test.data).Populate( 1000 )
      &sql(Declare rs Cursor For
       Select code,name,amount Into :code,:name,:amount
       From test.data
      ) &sql(Open rs)
      s i= 0 
      for { &sql(Fetch rs) q:SQLCODE
       s i=i+ 1  &html<<row><c><v>#(i)#</v></c>> ;числовые данные отдаем сразу
       
       ;текстовые значения пакуем в инлайн-стринг 
       &html<
            <c t="inlineStr"><is><t>#(code)#</t></is></c>
            <c t="inlineStr"><is><t>#(name)#</t></is></c>
       > 
       ;опять числовые
       &html<<c><v>#(amount)#</v></c>
       </row>>
       
      } &sql(Close rs)
      
    ;дальше снова просто копия из файла шаблона  
    &html<</sheetData>
    <autoFilter ref="A1:D2"/>
     <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
     <pageSetup paperSize="9" orientation="portrait" horizontalDpi="300" verticalDpi="300" r:id="rId1"/>
     </worksheet>
 >
}

/// Перед тем как отдать файл 
/// копируем каталог шаблона во временный каталог
/// в каталог генерим новый файл со своими данными
/// зипуем каталог в файл, выдаем на странице
ClassMethod OnPage() As %Status
{
 ;Определяем абсолютные пути
 s cspPath=$system.CSP.GetFileName(%request.URL) ;csp-приложение
 
 #define FILE ##class(%File)
 s appPath=$$$FILE.GetDirectory(cspPath) ;по нему определили каталог
 s templatePath=appPath_"\Template\" ;предопределенное положение шаблона
  
 ;создаем случайный каталог для отчета
 s ext="xlsx"
 s tempFile=$$$FILE.TempFilename("xlsx") ;будущий архив
 s tempDir=$$$FILE.GetDirectory(tempFile) ;абсолютный путь к временному каталогу
 s var=$$$FILE.GetFilename(tempFile) ;нужна только "случайная" часть от имени временного файла
 s var=$p(var,"."_ext)
 s tempDir=tempDir_var ;абсолютный путь к временному каталогу нового отчета
 
 ;копируем файлы шаблона
 d $$$FILE.CopyDir(templatePath,tempDir, 1 , 1 , 1 ) ;надо бы проверить
 
 ;файл с новыми данными 
 s dataFile=tempDir_"\xl\worksheets\sheet1.xml" ;предопределенное положение файла с данными (см. стандарт)
 ;записываем его 
 open dataFile:"WNUK\UTF8\" ;Открываем для записи - проверить
 use dataFile d ..wSheet1()
 close dataFile
 
 ;архивируем результат
 s zipper=appPath_"zipper\pkzipc.exe" ;путь к архиватору
 s cmd=zipper_" -add -move -attr=all -dir -path=relative -nozip "_tempFile_" "_tempDir_"\*.*"
 ;w "cmd: ",cmd
 d $zf(- 1 ,cmd) ;мне повезет!
 
 ;отдаем на страницу
 s file=$$$FILE.%New(tempFile)
 d file.Open("RU:/TRANSLATE=0")
 d file.OutputToDevice()
 d file.Close() k file
 
 Q $$$OK
}

ClassMethod OnPreHTTP() As %Boolean [ ServerOnly =  1  ] {
 s %response.ContentType = "application/excel"
 d %response.SetHeader("content-disposition","attachment; filename=Report.xlsx")
 Q  1 
}
}

И он же в виде проекта (см. приложение)
Тестировалось на WinXP, MS Office2007, Cache 2010.2.3 UTF8 (область USER, csp приложение \csp\user)
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37213272
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Размер приложений ограничен, не смог добавить сам упаковщик
Это файл pkzipc.exe (брал из комплекта FAR-managera), его надо поместить в каталог: csp\user\zipper
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37213726
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefint,

Спасибо большое, есть что почерпнуть
я тут вот еще что выяснил про передачу string:
Код: plaintext
1.
2.
3.
4.
5.
<row r="1">
 <c r="B1" t="str">
  <v>TTTT</v>
 </c>
</row>
Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
XSD Schema Code: 
<xsd:simpleType name="ST_CellType">
    <xsd:annotation>
        <xsd:documentation>Cell Type</xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="b">
            <xsd:annotation>
                <xsd:documentation>Boolean</xsd:documentation>
            </xsd:annotation>
        </xsd:enumeration>
        <xsd:enumeration value="n">
            <xsd:annotation>
                <xsd:documentation>Number</xsd:documentation>
            </xsd:annotation>
        </xsd:enumeration>
        <xsd:enumeration value="e">
            <xsd:annotation>
                <xsd:documentation>Error</xsd:documentation>
            </xsd:annotation>
        </xsd:enumeration>
        <xsd:enumeration value="s">
            <xsd:annotation>
                <xsd:documentation>Shared String</xsd:documentation>
            </xsd:annotation>
        </xsd:enumeration>
        <xsd:enumeration value="str">
            <xsd:annotation>
                <xsd:documentation>String</xsd:documentation>
            </xsd:annotation>
        </xsd:enumeration>
        <xsd:enumeration value="inlineStr">
            <xsd:annotation>
                <xsd:documentation>Inline String</xsd:documentation>
            </xsd:annotation>
        </xsd:enumeration>
    </xsd:restriction>
</xsd:simpleType>
http://schemas.liquid-technologies.com/OfficeOpenXML/2006/
search/"inlineStr"
и вот еще что, я тут тоже задумался над таким формированием отчетов
есть уже некий пакет классов, который позволяет формировать пока только стандартный пустой документ Excel2007 с помощью %XML.Adapter, работаю над передачей данных и формированием ссылочной целостности стилей
если нитересует тоже могу скинуть поделиться
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37214163
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007, спасибо, буду знать. Мне идея с шаблонами нравится из-за возможности быстро разработать его с помощью визуальных средств (Excel, Word) и хранения кучи разметки вне базы данных.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37562642
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь создание больших файлов.
Генератор не выжирает память процесса, так как ячейки переделал на хранимые объекты в глобале процесса.
Стало немножко медленнее, так как теперь при обращении объекты открываются/закрываются.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #37564591
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс, под каше 2011 не работает.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Генерация XML-Excel файлов
    #38594728
DragonVDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вклинюсь в обсуждение со своей проблемой http://www.sql.ru/forum/1084615/oracle-to-excel

на сколько я понимаю изложенными вами способом можно реализовать часть того что мне нужно
1. по размеченным диапазонам Excel вставка данных: результат может быть из запроса или текст, изображение (не обязательно из БД)
2. соблюдение всех начальных форматирований в шаблоне (размещение на листе тескольких диапазонов, в том числе рядом)
3. !контроль завершения процесса Excel.exe по окончании процесса!
4. способы добавления форматирования внутри данных, например: выделение цветом, зачеркивание, курсив для отдельных слов в ячейках и т.д.
5. авто нумерация страниц
6. создание авто содержания
7. группировки текста внутри диапазонов (в том числе не одинаковых данных, т.е. объединение по заранее заданному кол-ву ячеек)
8. формирование отчета должно быть приемлемо по скорости ("ненамного" превышать отработку запросов)


есть ли какие то видимые проблемы, которые не получится сделать? и на сколько корректно править шаблон Excel руками?

очень интересует нумерация страниц и форматирование данных внутри одной ячейки
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #38616780
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DragonVDA,

У меня генерация файла с нуля, впрочем, на мой взгляд, довольно простой интерфейс, для меня проблем не составляет.
С шаблонами я не работаю, уже существующий файл открыть не смогу, установленный эксель для создания файла не нужен.
Формат xml-excel, как он называется точно, я не знаю. Он выглядит как эксель и имеет многие возможности экселя, но не все.
В частности, нельзя вставить картинки, сводные таблицы, скрипты.
Форматирование ячеек есть, объединение, установка размеров тоже. С границами мне лень было разбираться, что-то есть, но не особо много, но доработать проблем не будет. Для отдельных слов в ячейке форматирование нельзя установить.
Генерация файла намного дольше выборки данных (но выборка данных обычно вообще ничтожна по времени), но в принципе сравнима с другими способами формирования отчетов по скорости, так что приемлимо.

Текущая версия в этой ветке слегка багнутая, но так как особо никто интереса не проявил, я более свежие не выкладывал.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #38616781
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И да, генерация заточена чисто под каше.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Генерация XML-Excel файлов
    #39487205
Charlie2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.Текущая версия в этой ветке слегка багнутая, но так как особо никто интереса не проявил, я более свежие не выкладывал.
Есть интерес! Если вы ещё не забросили, поделитесь, пожалуйста. :-)
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #39487268
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charlie2017,

Я больше в той организации не работаю, а выносить код (хоть и написанный собой) посчитал неэтичным, да и правила той организации это прямо запрещают. Так что сейчас у меня ничего нет, а мои коллеги, насколько я в курсе, на этот форум не заходят.
Есть своя ветка этой разработки у ребят из СибЭКО, некоторые форум этот читают. Возможно, поделятся.
...
Рейтинг: 0 / 0
Генерация XML-Excel файлов
    #39490195
drakut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Charlie2017,

Попробуйте для работы с XLSX-файлами использовать вариант из моего поста: http://www.sql.ru/forum/1262232/namerennoe-ignorirovanie-tegov-pri-correlate-i-next-klassa-xml-reader - сможете распарсить файл любой структуры, так как вы уже будуте обращаться с файлом как с набором объектов, а это гораздо удобнее. Плюс сэкономите время на изобретение своих классов. Пока единственная проблема, с которой я столкнолся и не решил - парсинг больших файлов, по 10-15 мб (пока резал файл на приемлемые сторонним инструментом)
...
Рейтинг: 0 / 0
24 сообщений из 49, страница 2 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Генерация XML-Excel файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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