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

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#1
Есть сервер, теперь на нем есть Excel 2003, на сервере есть агент, который делает Excel файлик.
Суть проблемы:
Запускаем агент получаем ошибку: "Cannot create automation object"
Перезагрузили сервак, запускаем все работает, файлик приехал по почте.
Допилили агент, запускаем и получаем: "Cannot create automation object" Оо
Перезапустили сервак, запускаем все работает, файлик приехал по почте.
Ничего с агентом не делали, запускаем и получаем: "Cannot create automation object" >_<

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

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

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

Kizarek86

Well-Known Member
Lotus team
20.07.2007
861
6
31
Россея матушка!)
#2
Бала такая же фигня, причем на клиенте тоже (в рамках одной сессии).
Как обычно тупять и глючат СОМ объекты не полностью подчищая за собой.

Код:
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.
 

yerke

Well-Known Member
28.08.2007
392
0
33
Алматы
#3
может формировать excel файл с помощью xml? без оле
Код:
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+_ 
.......
 

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#4
kizarek
Процесса в системе нет, это проверяли, да и на клиенте постоянно можно создать не один экземпляр Excel, это тоже проверено. И убиваю процессы немного иначе: вот так
yerke
Вот с XML не хочется возиться, ни времени ни желания особенного... Да и версии могут различаться.
.xls и .xlsx весьма различны...

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

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#6
Ну боян не боян)) не сталкивался просто)
Что-то похожее на правду, но когда выставили "Текущий пользователь", то после ребута теперь тоже не работает, совсем не работает.
Старт лотусового сервака происходит из под local System. Может есть еще советы?
 

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#8
nvy
Думал, но не в этом году это будет.
 

Kee_Keekkenen

Well-Known Member
05.09.2006
639
6
Москва
#9
на сервере такая связка вообще валить сервер могет в легкую..
в свое время я не искал решений создания в екселе отчетов на стороне сревера, т.к. сервак падал откровенно..
отчеты были простые, то я посмотрел на то, как они выглядят в хмл (если в екселе сохранить отчет в формате xml, то не трудно понять как оно устроено) и создавал их в хмл формате с расширением xls, работало на ура :)
 

NetWood

Well-Known Member
Lotus team
17.04.2008
370
16
Питер
#10
Что-то похожее на правду, но когда выставили "Текущий пользователь", то после ребута теперь тоже не работает, совсем не работает.
А попробуйте учетку админа указать явно. Так наверняка должно. "Текущий пользователь" не всегда помогает. Верно.

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

oshmianski

Достойный программист
Lotus team
25.04.2012
546
13
#11
Вот с XML не хочется возиться, ни времени ни желания особенного... Да и версии могут различаться.
.xls и .xlsx весьма различны...
Версии здесь не при чем. Пишите в xml (http://en.wikipedia.org/wiki/Microsoft_Office_XML_formats), один раз разберетесь, потом забудете про тормоза и проблемы OLE MS Office.
 

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#12
NetWood, не помогло... Какая-то фигня...

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

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

oshmianski

Достойный программист
Lotus team
25.04.2012
546
13
#14
И как потом xls сделать? если просто переименовать, то сорри, будет ругаться при открытии, что тоже не надо.
Можно делать двумя способами:
1) выгружать данные в ЧИСТЫЙ xml, создавать xsl-файл и через xslt получать xml MS Excel'я.
2) сразу писать xml с разметкой MS Office Open xml. Тут xml сразу можно открыть MS Excel'ем, никакой xsl не нужен.
 

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#15
NetWood
Удаленный, ставили через подключение по teamviewer.
Насчет кривизны ставки не скажу, поставили только 2 компанента word и excel.

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 433
351
homepage.mac.com
#16
когда-то делал так...
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:office:spreadsheet"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"

xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40"
version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:processing-instruction name="mso-application">progid="Excel.Sheet"</xsl:processing-instruction>
<Workbook
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<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:office: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]
 

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#17
Да вот разобрались, классика жанра: "Горе от ума".
Агент должен был работать на сервере, поэтому перед тем как его выставить Enable я его проверял.
Запускал по кнопке, через RunOnServer. Таким образом работает только один раз.
Админ, запустил через консоль, все отработало. Попробовали через консоль еще раз: ошибка доступа к файлу.
Тут понятно, процесс не закрыл, но сам факт 2 раза подряд Excel создался.
Сделали агент на запуск каждые 30 минут, все работает как часы.
Стыд и позор моим познаниям :(

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

NetWood

Well-Known Member
Lotus team
17.04.2008
370
16
Питер
#18
В копилку знаний. Намедни, ни с того ни с сего, перестал работать Excel DCOM на одном сервере с ошибкой Cannot create automation object. В логах вижу невозможность подключения к серверу Domino. Стал разбираться. Оказалось, что поменяли имя хоста на Сервере, а в настройках Domino нет. Итого, для правильной работы с DCOM, кроме настроек dcomcnfg, должны совпадать:
1. имя хоста в настройках WIN
2. в закладках Сервер/Основные/Полностью определенное имя узла Интернета
3. и Сервер/Порты/Сетевые порты/TCPIP сетевой адрес.
Такие дела.
 

garrick

Well-Known Member
Lotus team
26.10.2009
865
68
Москва
#19
Уже сколько писали про то, что MS Office и сервер - вещи не совместимые, но продолжаем есть кактус... :)

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

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

imendan

Well-Known Member
22.09.2010
116
0
#20
Да вот разобрались, классика жанра: "Горе от ума".
Агент должен был работать на сервере, поэтому перед тем как его выставить Enable я его проверял.
Запускал по кнопке, через RunOnServer. Таким образом работает только один раз.
Админ, запустил через консоль, все отработало. Попробовали через консоль еще раз: ошибка доступа к файлу.
Тут понятно, процесс не закрыл, но сам факт 2 раза подряд Excel создался.
Сделали агент на запуск каждые 30 минут, все работает как часы.
Стыд и позор моим познаниям :)

Всем спасибо за помощь и желание помочь, данный механизм я переведу на java, но чуть позже.
Приветствую, Savl! Вы уже перенесли его на Java? Дело в том, что у меня этот вопрос висит долго. Очень долго мучаюсь с Set Client = CreateObject("MSSOAP.SoapClient30")
Вычитал весь инет. Никак не получается. Нужен ХЭЛП