Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Генерация XML-Excel файлов  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3069
Блог
Блок А.Н.
Пока не понял, что за алгоритм сжатия у них. Но вроде не zip?

В документации к методам указан используемый алгоритм.

Блок А.Н.
А какие ограничения xml формата для вас критичны?

Всё то, к чему привык пользователь: ЭЦП, шифрация данных, графики, изображения и т.п.
Для разработчика: поддержка Excel с версии 97, функции постобработки типа AutoFit, документируемость SDK.
19 дек 10, 23:53    [9964048]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3494
Я человек темный, zlib это же еще не совсем zip?

А какой метод генерации используете? Activate?
20 дек 10, 00:12    [9964080]     Ответить | Цитировать Сообщить модератору
 Re: Генерация XML-Excel файлов  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3069
Блог
Блок А.Н.
zlib это же еще не совсем zip?
  • Zlib
  • Zip
    Блок А.Н.
    А какой метод генерации используете? Activate?
    Ни в коем случае. Не нужно забывать про ActiveX и x64.

    PS: спасибо за поддержку, особенно за марсианские яблони и ви... Впрочем, нет. Только за яблони.
  • 20 дек 10, 00:36    [9964104]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    Блок А.Н.
    Member

    Откуда: Новосибирск
    Сообщений: 3494
    По zip надо подумать, похоже zlib это какая-то заготовка к нему, про те же заголовки нефига непонятно. Если всерьез займусь xlsx - а повод к этому есть, хотя бы претензия на маленький размер, если у нас тут файлы по 200Мб, которые через веб передаются.

    Про яблони - так это нам нужно спасибо сказать вам.
    Вы единственный, кого я замечаю борющимся за каше на чужом поле. Обычно я избегаю встревать в такие дискуссии, но тут что-то зацепило.
    Еще мне кажется, что мы призы с krvsa(сорри) незаслуженно получили, особенно если с вами сравнивать, хотя это фигня, конечно.
    И русский отдел маркетинга ИС зря получает свою зарплату, если он вообще есть.
    20 дек 10, 05:36    [9964291]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    doublefint
    Member

    Откуда: Беларусь, Минск
    Сообщений: 760
    Блок А.Н., Шаблон хранится на диске, сжимаем через $zf, читаем и отправляем через csp.
    Блок А.Н.
    В любом случае, напрямую через теги это сильно страшно, ошибиться же легко?
    Если честно, не понял почему. Сделали базовый интерфейс и больше про теги никто не вспоминает, на вход передать глобал определенной структуры...
    20 дек 10, 10:01    [9964691]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    Блок А.Н.
    Member

    Откуда: Новосибирск
    Сообщений: 3494
    А там шрифты-границы, и всякие объединения ячеек через глобал удобно передавать?
    Или не используете?
    20 дек 10, 11:25    [9965142]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    doublefint
    Member

    Откуда: Беларусь, Минск
    Сообщений: 760
    Блок А.Н., не могу вспонить ситуацию, когда что-то нельзя передать через глобал... :)
    s @gl@("row",row,"c",cell,"class")="myclass"
    s @gl@("merges",1,"ref")="A$1:B$1"
    
    20 дек 10, 11:41    [9965222]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    Ymka2007
    Member

    Откуда:
    Сообщений: 884
    doublefint,

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

    Заранее спасибо
    30 мар 11, 16:21    [10446868]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    doublefint
    Member

    Откуда: Беларусь, Минск
    Сообщений: 760
    Ymka2007, постараюсь выложить пример в ближайшее время.
    31 мар 11, 13:07    [10450946]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    Ymka2007
    Member

    Откуда:
    Сообщений: 884
    doublefint, ок буду ждать
    31 мар 11, 14:40    [10451866]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    Ymka2007
    Member

    Откуда:
    Сообщений: 884
    Привет ты про меня не забыл?

    doublefint
    <row>
            <c t="inlineStr">
    		<is><t>Привет мир!</t></is>
    	</c>
    </row>
    
    с - column или cell, @t - type, v - value, is - inline string, t - text

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

    с чем это связано? не подскажешь?
    12 апр 11, 12:20    [10505475]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    Ymka2007
    Member

    Откуда:
    Сообщений: 884
    я написал так:
    <sheetData>
     <row r="4"><c r="B4" t="inlineStr"><is><t>Привет мир!</t></is></c></row>
    </sheetData>
    
    забыл тег закрыть </c>
    )))
    12 апр 11, 12:50    [10505686]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    doublefint
    Member

    Откуда: Беларусь, Минск
    Сообщений: 760
    Ymka2007, не забыл. Были проблемы (переезжали с 2008 на 2010 ;), был сильно занят, прошу прощения.
    Собственно, сам пример (сильно упрощенный):
    +

    /// Сложная страница, которая сформирует новые 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)

    К сообщению приложен файл (ooxml.zip - 12Kb) cкачать
    13 апр 11, 05:00    [10509913]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    doublefint
    Member

    Откуда: Беларусь, Минск
    Сообщений: 760
    Размер приложений ограничен, не смог добавить сам упаковщик
    Это файл pkzipc.exe (брал из комплекта FAR-managera), его надо поместить в каталог: csp\user\zipper
    13 апр 11, 05:06    [10509914]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    Ymka2007
    Member

    Откуда:
    Сообщений: 884
    doublefint,

    Спасибо большое, есть что почерпнуть
    я тут вот еще что выяснил про передачу string:
    <row r="1">
     <c r="B1" t="str">
      <v>TTTT</v>
     </c>
    </row>
    
    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, работаю над передачей данных и формированием ссылочной целостности стилей
    если нитересует тоже могу скинуть поделиться
    13 апр 11, 11:32    [10511069]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    doublefint
    Member

    Откуда: Беларусь, Минск
    Сообщений: 760
    Ymka2007, спасибо, буду знать. Мне идея с шаблонами нравится из-за возможности быстро разработать его с помощью визуальных средств (Excel, Word) и хранения кучи разметки вне базы данных.
    13 апр 11, 14:06    [10512446]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    Блок А.Н.
    Member

    Откуда: Новосибирск
    Сообщений: 3494
    Теперь создание больших файлов.
    Генератор не выжирает память процесса, так как ячейки переделал на хранимые объекты в глобале процесса.
    Стало немножко медленнее, так как теперь при обращении объекты открываются/закрываются.

    К сообщению приложен файл (Excel.rar - 7Kb) cкачать
    7 дек 11, 11:47    [11719773]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    Блок А.Н.
    Member

    Откуда: Новосибирск
    Сообщений: 3494
    Упс, под каше 2011 не работает.
    8 дек 11, 10:59    [11727263]     Ответить | Цитировать Сообщить модератору
    Между сообщениями интервал более 1 года.
     Re: Генерация XML-Excel файлов  [new]
    DragonVDA
    Member

    Откуда:
    Сообщений: 2
    вклинюсь в обсуждение со своей проблемой http://www.sql.ru/forum/1084615/oracle-to-excel

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


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

    очень интересует нумерация страниц и форматирование данных внутри одной ячейки
    24 мар 14, 15:16    [15778047]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    Блок А.Н.
    Member

    Откуда: Новосибирск
    Сообщений: 3494
    DragonVDA,

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

    Текущая версия в этой ветке слегка багнутая, но так как особо никто интереса не проявил, я более свежие не выкладывал.
    16 апр 14, 17:29    [15892261]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    Блок А.Н.
    Member

    Откуда: Новосибирск
    Сообщений: 3494
    И да, генерация заточена чисто под каше.
    16 апр 14, 17:30    [15892263]     Ответить | Цитировать Сообщить модератору
    Между сообщениями интервал более 1 года.
     Re: Генерация XML-Excel файлов  [new]
    Charlie2017
    Member

    Откуда:
    Сообщений: 1
    Блок А.Н.
    Текущая версия в этой ветке слегка багнутая, но так как особо никто интереса не проявил, я более свежие не выкладывал.

    Есть интерес! Если вы ещё не забросили, поделитесь, пожалуйста. :-)
    12 июл 17, 09:58    [20635758]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    Блок А.Н.
    Member

    Откуда: Новосибирск
    Сообщений: 3494
    Charlie2017,

    Я больше в той организации не работаю, а выносить код (хоть и написанный собой) посчитал неэтичным, да и правила той организации это прямо запрещают. Так что сейчас у меня ничего нет, а мои коллеги, насколько я в курсе, на этот форум не заходят.
    Есть своя ветка этой разработки у ребят из СибЭКО, некоторые форум этот читают. Возможно, поделятся.
    12 июл 17, 10:46    [20635969]     Ответить | Цитировать Сообщить модератору
     Re: Генерация XML-Excel файлов  [new]
    drakut
    Member

    Откуда: Москва
    Сообщений: 77
    Charlie2017,

    Попробуйте для работы с XLSX-файлами использовать вариант из моего поста: http://www.sql.ru/forum/1262232/namerennoe-ignorirovanie-tegov-pri-correlate-i-next-klassa-xml-reader - сможете распарсить файл любой структуры, так как вы уже будуте обращаться с файлом как с набором объектов, а это гораздо удобнее. Плюс сэкономите время на изобретение своих классов. Пока единственная проблема, с которой я столкнолся и не решил - парсинг больших файлов, по 10-15 мб (пока резал файл на приемлемые сторонним инструментом)
    17 июл 17, 14:23    [20650327]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
    Все форумы / Caché Ответить