Проблема с Excel, специфическая

Тема в разделе "Lotus - Программирование", создана пользователем savl, 19 окт 2012.

  1. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Есть сервер, теперь на нем есть Excel 2003, на сервере есть агент, который делает Excel файлик.
    Суть проблемы:
    Запускаем агент получаем ошибку: "Cannot create automation object"
    Перезагрузили сервак, запускаем все работает, файлик приехал по почте.
    Допилили агент, запускаем и получаем: "Cannot create automation object" Оо
    Перезапустили сервак, запускаем все работает, файлик приехал по почте.
    Ничего с агентом не делали, запускаем и получаем: "Cannot create automation object" >_<

    Третий раз ребутить не стали, нечали разбираться.
    1. Процесса Excel не висит в системе, ок.
    2. Файлы и сам Excel создаются и запускаются, ок.
    3. Логи винды по данной тематике пустые.

    Лотусовый лок показал на строкус кодом:
    Код (LotusScript):
    Set object = CreateObject("Excel.Application")
    Будто OLE-класс не найден... Но такое только после успешной отработки агентом 1 раз, причем только после ребута.

    На серваке Win2Kx64, Excel 2003 x32.
    Если кто сталкивался или если кто знает особенности x64 и 32-битного Excel, подскажите пож-та, что это происходит вообще???
     
  2. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Бала такая же фигня, причем на клиенте тоже (в рамках одной сессии).
    Как обычно тупять и глючат СОМ объекты не полностью подчищая за собой.

    Код (LotusScript):
    Sub CloseMSobj(execName As String)
    On Error Goto ErrH
    Dim objs As Variant
    Dim strSQL As String
    Dim strWMI As String
    strWMI = "winmgmts:"
    strSQL = "Select * From Win32_Process "
    strSQL = strSQL & {where Name = '} & execName &{'}
    Set objs = GetObject(strWMI).ExecQuery(strSQL)
    If Not objs Is Nothing Then
    Forall obj In objs
    obj.Terminate
    End Forall
    End If
    Quit:
    Exit Sub
    ErrH:
    Resume Quit
    End Sub
    Код где то на этом форуме был. Убивает висящие процессы.

    С ним работало нормально, пока на сервер не кинули битый excel файл, который повесил агент менеджер, после чего на сервер стал передавать txt предварительно сконвертированный на машине пользователи из excel.
     
  3. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    может формировать excel файл с помощью xml? без оле
    Код (LotusScript):
    Set ResStream=ns.CreateStream()
    'заполяем шапку xml
    ResStream.WriteText(_
    {<?xml version="1.0"?>}+el+_
    {<?mso-application progid="Excel.Sheet"?>}+el+_
    {<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"}+el+_  
    {xmlns:o="urn:schemas-microsoft-com:office:office"}+el+_
    {xmlns:x="urn:schemas-microsoft-com:office:excel"}+el+_
    {xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"}+el+_
    {xmlns:html="http://www.w3.org/TR/REC-html40">}+el+_
    {<Styles>}+el+_
    {<Style ss:ID="Default" ss:Name="Normal">}+el+_
    {<Alignment/>}+el+_
    {<Borders/>}+el+_
    {<Font x:CharSet="204"/>}+el+_
    {<Interior/>}+el+_
    {<NumberFormat/>}+el+_
    {<Protection/>}+el+_
    {</Style>}+el+_
    .......
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    kizarek
    Процесса в системе нет, это проверяли, да и на клиенте постоянно можно создать не один экземпляр Excel, это тоже проверено. И убиваю процессы немного иначе: вот так
    yerke
    Вот с XML не хочется возиться, ни времени ни желания особенного... Да и версии могут различаться.
    .xls и .xlsx весьма различны...

    Раньше эти отчеты делали только на клиенте, теперь один отчет они хотят получать раз в месяц.
    Но вот такая вот засада...
     
  5. NetWood

    NetWood Lotus team
    Lotus team

    Регистрация:
    17 апр 2008
    Сообщения:
    308
    Симпатии:
    0
  6. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Ну боян не боян)) не сталкивался просто)
    Что-то похожее на правду, но когда выставили "Текущий пользователь", то после ребута теперь тоже не работает, совсем не работает.
    Старт лотусового сервака происходит из под local System. Может есть еще советы?
     
  7. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
  8. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    nvy
    Думал, но не в этом году это будет.
     
  9. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    на сервере такая связка вообще валить сервер могет в легкую..
    в свое время я не искал решений создания в екселе отчетов на стороне сревера, т.к. сервак падал откровенно..
    отчеты были простые, то я посмотрел на то, как они выглядят в хмл (если в екселе сохранить отчет в формате xml, то не трудно понять как оно устроено) и создавал их в хмл формате с расширением xls, работало на ура :)
     
  10. NetWood

    NetWood Lotus team
    Lotus team

    Регистрация:
    17 апр 2008
    Сообщения:
    308
    Симпатии:
    0
    А попробуйте учетку админа указать явно. Так наверняка должно. "Текущий пользователь" не всегда помогает. Верно.

    Или создать спец юзера с админскими правами и им запускать. Тогда автором создаваемого EXCEL файла будет этот пользователь.
     
  11. oshmianski

    oshmianski Достойный программист
    Lotus team

    Регистрация:
    25 апр 2012
    Сообщения:
    521
    Симпатии:
    13
    Версии здесь не при чем. Пишите в xml (http://en.wikipedia.org/wiki/Microsoft_Office_XML_formats), один раз разберетесь, потом забудете про тормоза и проблемы OLE MS Office.
     
  12. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    NetWood, не помогло... Какая-то фигня...

    oshmianski2
    И как потом xls сделать? если просто переименовать, то сорри, будет ругаться при открытии, что тоже не надо.

    Kee_Keekkenen
    На другом сервере все крутиться и проблем нет, тут дело в чем-то другом. Сам все пути и имена файлов прописаны жестко.
    А у меня тут скрипт полуавтомат, сам выбирает что и как делать... Может и в этом проблема.
     
  13. NetWood

    NetWood Lotus team
    Lotus team

    Регистрация:
    17 апр 2008
    Сообщения:
    308
    Симпатии:
    0
    А сервер часом не терминальный? И как на него ставили домино и Excel? Если под терминалом и криво, то допускаю такие коленца.
     
  14. oshmianski

    oshmianski Достойный программист
    Lotus team

    Регистрация:
    25 апр 2012
    Сообщения:
    521
    Симпатии:
    13
    Можно делать двумя способами:
    1) выгружать данные в ЧИСТЫЙ xml, создавать xsl-файл и через xslt получать xml MS Excel'я.
    2) сразу писать xml с разметкой MS Office Open xml. Тут xml сразу можно открыть MS Excel'ем, никакой xsl не нужен.
     
  15. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    NetWood
    Удаленный, ставили через подключение по teamviewer.
    Насчет кривизны ставки не скажу, поставили только 2 компанента word и excel.

    Сейчас одну вещь проверим, после этого возможно все пройдет
     
  16. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.080
    Симпатии:
    300
    когда-то делал так...
    xml:<!--shcode--><pre><code class='xml'><priceitem>
    <art>LBC-1</art>
    <grp> Материалы для оформления СТО </grp>
    <prodname>Лайтбокс формованный</prodname>
    <price>4063</price>
    <quantity>343</quantity>
    </priceitem>
    <priceitem>
    <art>DS-2</art>
    <grp> Материалы для оформления СТО </grp>
    <prodname>стойка</prodname>
    <price>6000</price>
    <quantity>30</quantity>
    </priceitem>[/CODE]
    шаблон для хухеля:<!--shcode--><pre><code class='xml'><?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet
    xmlns="urn:schemas-microsoft-com:eek:ffice:spreadsheet"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"

    xmlns:eek:="urn:schemas-microsoft-com:eek:ffice:eek:ffice"
    xmlns:x="urn:schemas-microsoft-com:eek:ffice:excel"
    xmlns:ss="urn:schemas-microsoft-com:eek:ffice:spreadsheet"
    xmlns:html="http://www.w3.org/TR/REC-html40"
    version="1.0">
    <xsl:strip-space elements="*"/>
    <xsl:eek:utput indent="yes"/>
    <xsl:template match="/">
    <xsl:processing-instruction name="mso-application">progid="Excel.Sheet"</xsl:processing-instruction>
    <Workbook
    xmlns="urn:schemas-microsoft-com:eek:ffice:spreadsheet"
    xmlns:eek:="urn:schemas-microsoft-com:eek:ffice:eek:ffice"
    xmlns:x="urn:schemas-microsoft-com:eek:ffice:excel"
    xmlns:ss="urn:schemas-microsoft-com:eek:ffice:spreadsheet"
    xmlns:html="http://www.w3.org/TR/REC-html40">
    <DocumentProperties xmlns="urn:schemas-microsoft-com:eek:ffice:eek:ffice">
    <Title>test</Title>
    </DocumentProperties>
    <Worksheet ss:Name="Test">
    <Table x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="51.326732673267323"
    ss:DefaultRowHeight="12.831683168316831">
    <xsl:apply-templates
    select="descendant::document/@* | descendant::document/node()"/>
    </Table>
    </Worksheet>
    <WorksheetOptions xmlns="urn:schemas-microsoft-com:eek:ffice:excel">
    <FitToPage/>
    <Print>
    <FitHeight>1</FitHeight>
    <ValidPrinterInfo/>
    <PaperSizeIndex>9</PaperSizeIndex>
    <Scale>100</Scale>
    <HorizontalResolution>600</HorizontalResolution>
    <VerticalResolution>600</VerticalResolution>
    </Print>
    <Selected/>
    <ProtectObjects>False</ProtectObjects>
    <ProtectScenarios>False</ProtectScenarios>
    </WorksheetOptions>
    </Workbook>
    </xsl:template>
    <xsl:template match="priceitem">
    <xsl:element name="Row">
    <xsl:for-each select="descendant::text()">
    <xsl:element name="Cell">
    <Data ss:Type="String">
    <xsl:apply-templates select="."/>
    </Data>
    </xsl:element>
    </xsl:for-each>
    </xsl:element>
    </xsl:template>
    </xsl:stylesheet>[/CODE]
     
  17. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Да вот разобрались, классика жанра: "Горе от ума".
    Агент должен был работать на сервере, поэтому перед тем как его выставить Enable я его проверял.
    Запускал по кнопке, через RunOnServer. Таким образом работает только один раз.
    Админ, запустил через консоль, все отработало. Попробовали через консоль еще раз: ошибка доступа к файлу.
    Тут понятно, процесс не закрыл, но сам факт 2 раза подряд Excel создался.
    Сделали агент на запуск каждые 30 минут, все работает как часы.
    Стыд и позор моим познаниям :(

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

    NetWood Lotus team
    Lotus team

    Регистрация:
    17 апр 2008
    Сообщения:
    308
    Симпатии:
    0
    В копилку знаний. Намедни, ни с того ни с сего, перестал работать Excel DCOM на одном сервере с ошибкой Cannot create automation object. В логах вижу невозможность подключения к серверу Domino. Стал разбираться. Оказалось, что поменяли имя хоста на Сервере, а в настройках Domino нет. Итого, для правильной работы с DCOM, кроме настроек dcomcnfg, должны совпадать:
    1. имя хоста в настройках WIN
    2. в закладках Сервер/Основные/Полностью определенное имя узла Интернета
    3. и Сервер/Порты/Сетевые порты/TCPIP сетевой адрес.
    Такие дела.
     
  19. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Уже сколько писали про то, что MS Office и сервер - вещи не совместимые, но продолжаем есть кактус... :)

    Вопрос я так понимаю уже решен, но несколько заметок на будущее:

    1. ВСЕГДА, до вызова CreateObject пробуйте получить объект с помощью GetObject.
    2. Можно легко принтами LS создать XML файл Excel. Немного разобраться, там только "шапка" файла, всё остальное вообще примитивно. Можно использовать заготовку сделанную с помощью самого Excel.
    3. Excel на ура открывает обычные HTML фалы, даже если вы их переименуете в XLS.
    4. Apache POI и куча других библиотек построенных на аналогичной технологии или поверх того же POI.
     
  20. imendan

    imendan Well-Known Member

    Регистрация:
    22 сен 2010
    Сообщения:
    97
    Симпатии:
    0
    Приветствую, Savl! Вы уже перенесли его на Java? Дело в том, что у меня этот вопрос висит долго. Очень долго мучаюсь с Set Client = CreateObject("MSSOAP.SoapClient30")
    Вычитал весь инет. Никак не получается. Нужен ХЭЛП
     
Загрузка...
Похожие Темы - Проблема Excel специфическая
  1. RzvCH
    Ответов:
    3
    Просмотров:
    905
  2. Zloikaktus
    Ответов:
    0
    Просмотров:
    11
  3. c0de3r
    Ответов:
    5
    Просмотров:
    133
  4. DobermannTT
    Ответов:
    10
    Просмотров:
    139
  5. SoulPaladin
    Ответов:
    4
    Просмотров:
    135

Поделиться этой страницей