Невозможно создание объекта контейнером activex excel application

  • Remove From My Forums
  • Вопрос

  • Добрый день! подскажите пожалуйста есть скрипт в windows xp работает а на 7 нет:((( Заранее благодарю!

    Set objFS = CreateObject(«Scripting.FileSystemObject»)

    Set objDialog = CreateObject(«UserAccounts.CommonDialog»)
    objDialog.Filter = «All Files|*.*»
    objDialog.FilterIndex = 1
    objDialog.InitialDir = objFS.GetParentFolderName(WScript.ScriptFullName)
    intResult = objDialog.ShowOpen
    If intResult = 0 Then Wscript.Quit
    strFilePath = objDialog.FileName

    Const FOR_READING = 1

    Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING)

    Set objExcel = CreateObject(«Excel.Application»)
    objExcel.Visible = False
    objExcel.Workbooks.Add
    objExcel.ActiveWorkbook.Worksheets(1).Range(«C:C»).NumberFormat = «@» ‘ текстовый формат
    objExcel.ActiveWorkbook.Worksheets(1).Range(«F:F»).NumberFormat = «@»
    objExcel.Cells(1, 1).Value = «Дата платежа»
    objExcel.Cells(1, 2).Value = «Плательщик»
    objExcel.Cells(1, 3).Value = «Р/С плательщика»
    objExcel.Cells(1, 4).Value = «Банк плательщика»
    objExcel.Cells(1, 5).Value = «Получатель»
    objExcel.Cells(1, 6).Value = «Р/С получателя»
    objExcel.Cells(1, 7).Value = «Банк получателя»
    objExcel.Cells(1, 8).Value = «Сумма»

    n = 2
    While Not objTS.AtEndOfStream
     str = objTS.ReadLine
     If str = «СекцияДокумент=Платежное поручение» Then
      str2 = «»
      While str <> «КонецДокумента»
       str = objTS.ReadLine
       str2 = str2 & str & «;»
      Wend
      ‘ Дата
      pos1 = InStr(str2, «Дата=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-5
       If l>0 Then
        value = Trim(Mid(str2, pos1+5, l))
        objExcel.Cells(n, 1).Value = value
       End If
      End If
      ‘ Плательщик
      pos1 = InStr(str2, «Плательщик1=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-12
       If l>0 Then
        value = Trim(Mid(str2, pos1+12, l))
        objExcel.Cells(n, 2).Value = value 
       End If 
      Else
       pos1 = InStr(str2, «Плательщик=») ‘ Если нет поля «Плательщик1»
       If pos1>0 then
        pos2 = InStr(pos1, str2, «;»)
        l = pos2-pos1-11
        If l>0 Then
         value = Trim(Mid(str2, pos1+11, l))
         objExcel.Cells(n, 2).Value = value 
        End If 
       End If
      End If
      ‘ Р/с плательщика
      pos1 = InStr(str2, «ПлательщикРасчСчет=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-19
       If l>0 Then
        value = Trim(Mid(str2, pos1+19, l))
        objExcel.Cells(n, 3).Value = value
       End If
      Else
       pos1 = InStr(str2, «ПлательщикСчет=») ‘ Если нет поля «ПлательщикРасчСчет»
       If pos1>0 then
        pos2 = InStr(pos1, str2, «;»)
        l = pos2-pos1-15
        If l>0 Then
         value = Trim(Mid(str2, pos1+15, l))
         objExcel.Cells(n, 3).Value = value
        End If
       End If
      End If
      ‘ Банк плательщика
      pos1 = InStr(str2, «ПлательщикБанк1=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-16
       If l>0 Then
        value = Trim(Mid(str2, pos1+16, l))
        objExcel.Cells(n, 4).Value = value
       End If
      End If
      ‘ Получатель
      pos1 = InStr(str2, «Получатель1=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-12
       If l>0 Then
        value = Trim(Mid(str2, pos1+12, l))
        objExcel.Cells(n, 5).Value = value
       End If
      Else
       pos1 = InStr(str2, «Получатель=») ‘ Если нет поля «Получатель1»
       If pos1>0 then
        pos2 = InStr(pos1, str2, «;»)
        l = pos2-pos1-11
        If l>0 Then
         value = Trim(Mid(str2, pos1+11, l))
         objExcel.Cells(n, 5).Value = value
        End If
       End If
      End If
      ‘ Р/с получателя
      pos1 = InStr(str2, «ПолучательРасчСчет=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-19
       If l>0 Then
        value = Trim(Mid(str2, pos1+19, l))
        objExcel.Cells(n, 6).Value = value
       End If
      Else
       pos1 = InStr(str2, «ПолучательСчет=») ‘ Если нет поля «ПолучательРасчСчет»
       If pos1>0 then
        pos2 = InStr(pos1, str2, «;»)
        l = pos2-pos1-15
        If l>0 Then
         value = Trim(Mid(str2, pos1+15, l))
         objExcel.Cells(n, 6).Value = value
        End If
       End If  
      End If
      ‘ Банк получателя
      pos1 = InStr(str2, «ПолучательБанк1=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-16
       If l>0 Then
        value = Trim(Mid(str2, pos1+16, l))
        objExcel.Cells(n, 7).Value = value
       End If
      End If
      ‘ Сумма
      pos1 = InStr(str2, «Сумма=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-6
       If l>0 Then
        value = Trim(Mid(str2, pos1+6, l))
        objExcel.Cells(n, 8).Value = value
       End If
      End If

                  
      n = n + 1
     End If
    Wend

    Set objRange = objExcel.ActiveWorkbook.Worksheets(1).UsedRange
    objRange.EntireColumn.Autofit()
    objExcel.Visible = True

Ответы

    • Помечено в качестве ответа

      2 сентября 2011 г. 8:37

    • Снята пометка об ответе
      MalobukvEditor
      2 сентября 2011 г. 11:16
    • Помечено в качестве ответа
      Dmitry DavydovModerator
      14 сентября 2011 г. 12:08
  • > Set objFS = CreateObject(«Scripting.FileSystemObject»)

    только что проверил на Windows 7 Ultimate. создал [test.js] — работает

    var fs = new ActiveXObject("Scripting.FileSystemObject");
    WScript.Echo("" + fs);
    

    если у вас не работает, то откройте cmd, run as administrator
    и вызовите:  

    C:WindowsSystem32>regsvr32 scrrun.dll

    • Предложено в качестве ответа
      MalobukvEditor
      9 сентября 2011 г. 5:56
    • Помечено в качестве ответа
      Dmitry DavydovModerator
      14 сентября 2011 г. 12:09

  • Remove From My Forums
  • Вопрос

  • Добрый день! подскажите пожалуйста есть скрипт в windows xp работает а на 7 нет:((( Заранее благодарю!

    Set objFS = CreateObject(«Scripting.FileSystemObject»)

    Set objDialog = CreateObject(«UserAccounts.CommonDialog»)
    objDialog.Filter = «All Files|*.*»
    objDialog.FilterIndex = 1
    objDialog.InitialDir = objFS.GetParentFolderName(WScript.ScriptFullName)
    intResult = objDialog.ShowOpen
    If intResult = 0 Then Wscript.Quit
    strFilePath = objDialog.FileName

    Const FOR_READING = 1

    Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING)

    Set objExcel = CreateObject(«Excel.Application»)
    objExcel.Visible = False
    objExcel.Workbooks.Add
    objExcel.ActiveWorkbook.Worksheets(1).Range(«C:C»).NumberFormat = «@» ‘ текстовый формат
    objExcel.ActiveWorkbook.Worksheets(1).Range(«F:F»).NumberFormat = «@»
    objExcel.Cells(1, 1).Value = «Дата платежа»
    objExcel.Cells(1, 2).Value = «Плательщик»
    objExcel.Cells(1, 3).Value = «Р/С плательщика»
    objExcel.Cells(1, 4).Value = «Банк плательщика»
    objExcel.Cells(1, 5).Value = «Получатель»
    objExcel.Cells(1, 6).Value = «Р/С получателя»
    objExcel.Cells(1, 7).Value = «Банк получателя»
    objExcel.Cells(1, 8).Value = «Сумма»

    n = 2
    While Not objTS.AtEndOfStream
     str = objTS.ReadLine
     If str = «СекцияДокумент=Платежное поручение» Then
      str2 = «»
      While str <> «КонецДокумента»
       str = objTS.ReadLine
       str2 = str2 & str & «;»
      Wend
      ‘ Дата
      pos1 = InStr(str2, «Дата=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-5
       If l>0 Then
        value = Trim(Mid(str2, pos1+5, l))
        objExcel.Cells(n, 1).Value = value
       End If
      End If
      ‘ Плательщик
      pos1 = InStr(str2, «Плательщик1=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-12
       If l>0 Then
        value = Trim(Mid(str2, pos1+12, l))
        objExcel.Cells(n, 2).Value = value 
       End If 
      Else
       pos1 = InStr(str2, «Плательщик=») ‘ Если нет поля «Плательщик1»
       If pos1>0 then
        pos2 = InStr(pos1, str2, «;»)
        l = pos2-pos1-11
        If l>0 Then
         value = Trim(Mid(str2, pos1+11, l))
         objExcel.Cells(n, 2).Value = value 
        End If 
       End If
      End If
      ‘ Р/с плательщика
      pos1 = InStr(str2, «ПлательщикРасчСчет=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-19
       If l>0 Then
        value = Trim(Mid(str2, pos1+19, l))
        objExcel.Cells(n, 3).Value = value
       End If
      Else
       pos1 = InStr(str2, «ПлательщикСчет=») ‘ Если нет поля «ПлательщикРасчСчет»
       If pos1>0 then
        pos2 = InStr(pos1, str2, «;»)
        l = pos2-pos1-15
        If l>0 Then
         value = Trim(Mid(str2, pos1+15, l))
         objExcel.Cells(n, 3).Value = value
        End If
       End If
      End If
      ‘ Банк плательщика
      pos1 = InStr(str2, «ПлательщикБанк1=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-16
       If l>0 Then
        value = Trim(Mid(str2, pos1+16, l))
        objExcel.Cells(n, 4).Value = value
       End If
      End If
      ‘ Получатель
      pos1 = InStr(str2, «Получатель1=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-12
       If l>0 Then
        value = Trim(Mid(str2, pos1+12, l))
        objExcel.Cells(n, 5).Value = value
       End If
      Else
       pos1 = InStr(str2, «Получатель=») ‘ Если нет поля «Получатель1»
       If pos1>0 then
        pos2 = InStr(pos1, str2, «;»)
        l = pos2-pos1-11
        If l>0 Then
         value = Trim(Mid(str2, pos1+11, l))
         objExcel.Cells(n, 5).Value = value
        End If
       End If
      End If
      ‘ Р/с получателя
      pos1 = InStr(str2, «ПолучательРасчСчет=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-19
       If l>0 Then
        value = Trim(Mid(str2, pos1+19, l))
        objExcel.Cells(n, 6).Value = value
       End If
      Else
       pos1 = InStr(str2, «ПолучательСчет=») ‘ Если нет поля «ПолучательРасчСчет»
       If pos1>0 then
        pos2 = InStr(pos1, str2, «;»)
        l = pos2-pos1-15
        If l>0 Then
         value = Trim(Mid(str2, pos1+15, l))
         objExcel.Cells(n, 6).Value = value
        End If
       End If  
      End If
      ‘ Банк получателя
      pos1 = InStr(str2, «ПолучательБанк1=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-16
       If l>0 Then
        value = Trim(Mid(str2, pos1+16, l))
        objExcel.Cells(n, 7).Value = value
       End If
      End If
      ‘ Сумма
      pos1 = InStr(str2, «Сумма=»)
      If pos1>0 then
       pos2 = InStr(pos1, str2, «;»)
       l = pos2-pos1-6
       If l>0 Then
        value = Trim(Mid(str2, pos1+6, l))
        objExcel.Cells(n, 8).Value = value
       End If
      End If

                  
      n = n + 1
     End If
    Wend

    Set objRange = objExcel.ActiveWorkbook.Worksheets(1).UsedRange
    objRange.EntireColumn.Autofit()
    objExcel.Visible = True

Ответы

    • Помечено в качестве ответа

      2 сентября 2011 г. 8:37

    • Снята пометка об ответе
      MalobukvEditor
      2 сентября 2011 г. 11:16
    • Помечено в качестве ответа
      Dmitry DavydovModerator
      14 сентября 2011 г. 12:08
  • > Set objFS = CreateObject(«Scripting.FileSystemObject»)

    только что проверил на Windows 7 Ultimate. создал [test.js] — работает

    var fs = new ActiveXObject("Scripting.FileSystemObject");
    WScript.Echo("" + fs);
    

    если у вас не работает, то откройте cmd, run as administrator
    и вызовите:  

    C:WindowsSystem32>regsvr32 scrrun.dll

    • Предложено в качестве ответа
      MalobukvEditor
      9 сентября 2011 г. 5:56
    • Помечено в качестве ответа
      Dmitry DavydovModerator
      14 сентября 2011 г. 12:09

#1

Polin

    Новый участник

  • Members
  • Pip

  • 6 сообщений
  • ФИО:Полина

Отправлено 03 ноября 2005 — 12:47

Подскажите новичку как из Internet explorer открыть окно Excel, создать новую книгу, не сохраняя ее и записать в ячейку значение (допустим в A1 поставить «Hello world».) Третьи сутки бьюсь :help: — все бестолку…

Заранее спасибо.

  • 0

  • Наверх


#2

Clauster

Clauster

  • ФИО:Худобородов Валерий
  • Город:Espoo

Отправлено 03 ноября 2005 — 14:05

Берёте любой экселевский файл, щёлкаете по нему правой кнопкой, выбираете Open with… Далее выбираете в списке IE, открывается файл, в ячейку А1 пишете Hello world! :friends:
PS: в следующий раз выбирайте правильный раздел форума, а то оффтоп полный

  • 0

  • Наверх


#3

Case

Case

  • ФИО:Панкратов Вячеслав
  • Город:Украина, Киев.

Отправлено 03 ноября 2005 — 15:57

Похоже на задачку «из домашнего задания». См. FAQ: Как задавать вопросы

PS
Перенесено из форума «Форумы проектов > Сервер тестировщиков и QA»

  • 0

  • Наверх


#4

Polin

Polin

    Новый участник

  • Members
  • Pip

  • 6 сообщений
  • ФИО:Полина

Отправлено 07 ноября 2005 — 05:36

Извиняюсь за оффтопик.
На самом деле задача производственная, институты уже давно закончены, появились жизненные реалии.
По существу никто не может что-либо посоветовать?
Заранее спасибо.

  • 0

  • Наверх


#5

Polin

Polin

    Новый участник

  • Members
  • Pip

  • 6 сообщений
  • ФИО:Полина

Отправлено 07 ноября 2005 — 06:59

Описываю задачу (чтобы не показалось оффтопом или школьным заданием):
есть MS SQL сервер, на нем крутится рабочая база. Хотим получать отчеты, организовав intranet систему. НО пользователям нужно, чтоб любой отчет был доступен и в Excel’е (они уже привыкли, у нас сейчас Excel, который подсоединяется к MS SQL). Собственно и вырасла проблемма генерить эксель из тех данных, которые приходят с сервера. Нашла как это сделать на VB:

set ExcelApp = CreateObject(«Excel.Application») — получаю ошибку
«Невозможно создание объекта контейнером ActiveX: ‘Excel.Application'»

  • 0

  • Наверх


#6

barancev

barancev

  • ФИО:Алексей Баранцев
  • Город:Россия, Москва

Отправлено 07 ноября 2005 — 07:43

Если всякому позволить из IE открывать Excel — это ж какая дыра в системе безопасности получится…

А нельзя на стороне сервера генерировать отчет из БД в Excel и отдавать клиенту готовый xsl-файл? Типа две ссылки — 1) посмотреть отчет в формате HTML, 2) посмотреть отчет в формате Excel, и в зависимости от того, по какой ссылке пошел пользователь, генерировать отчет в том или другом формате.

  • 0

  • Наверх


#7

Polin

Polin

    Новый участник

  • Members
  • Pip

  • 6 сообщений
  • ФИО:Полина

Отправлено 07 ноября 2005 — 08:06

Это можно, но если несколько пользователей одновременно ваяют 1 отчет с разными параметрами — как формировать файл? Как-то его уникально называть, а потом (раз в день например) вычищать определенную папку?
С точки зрения безопасности — сетка внутренняя, корпоративная, так что это не станет проблеммой.

  • 0

  • Наверх


#8

Polin

Polin

    Новый участник

  • Members
  • Pip

  • 6 сообщений
  • ФИО:Полина

Отправлено 07 ноября 2005 — 09:18

Всем большое спасибо, у меня все получилось. Все упиралось в политику безопасности IE.

  • 0

  • Наверх


#9

greyver

greyver

  • ФИО:Вербенко Сергей Анатольевич
  • Город:Москва, Зеленоград

Отправлено 07 ноября 2005 — 10:15

Всем большое спасибо, у меня все получилось. Все упиралось в политику безопасности IE.

Просмотр сообщения

Позволю себе процитировать Алексея. :help:

Если всякому позволить из IE открывать Excel — это ж какая дыра в системе безопасности получится…

Пользователи вашей системой будут иметь доступ в Интернет? Если да, то может случиться ОЙ. :smile:

  • 0

  • Наверх


#10

Pet[EG]

Pet[EG]

  • ФИО:Петраш А.Ю.
  • Город:Харьков, Укр

Отправлено 07 ноября 2005 — 10:55

Это можно, но если несколько пользователей одновременно ваяют 1 отчет с разными параметрами — как формировать файл? Как-то его уникально называть, а потом (раз в день например) вычищать определенную папку?

Просмотр сообщения

Позволю себе вкрутить свои 5 копеек. Учитывая что вы отдаете его по http, то стоит xsl файл не сохранять на диске на сервере, а прямо отдавать в поток пользователю. И никаких проблем с именованием.

  • 0

  • Наверх


#11

Polin

Polin

    Новый участник

  • Members
  • Pip

  • 6 сообщений
  • ФИО:Полина

Отправлено 07 ноября 2005 — 11:09

Позволю себе процитировать Алексея.  :lol:

Если всякому позволить из IE открывать Excel — это ж какая дыра в системе безопасности получится…

Пользователи вашей системой будут иметь доступ в Интернет? Если да, то может случиться ОЙ. :help:

Просмотр сообщения

Будут. Через прокси и файрвол. Систему безопасности придется подвинуть… Я оставляю возможность отказаться от открытия непойми чего… Юзерам только надо будет это досконально обьяснить :rtfm: :smile: … Или попытаться найти разрешение на выполнение ActiveX компонентов только с конкретного IP, что конечно лучше…

а прямо отдавать в поток пользователю

А это как можно сделать? В поток — в смысле сохранять прямо в Excel и писать на диск с информацией пользователю «Сохранено в c:katalogreport.xls»?

  • 0

  • Наверх


#12

Clauster

Clauster

  • ФИО:Худобородов Валерий
  • Город:Espoo

Отправлено 08 ноября 2005 — 11:09

По существу никто не может что-либо посоветовать?

Просмотр сообщения

Так и задавайте вопросы по существу. Какой вопрос, такой и ответ… :smile:

  • 0

  • Наверх


Люди умные, объясните, что происходит, ибо «нич-чего не понимаю»(С). Ситуация: WSH 5.6, Excel 2003. Имеется следующий JS-скрипт:

Код: Выделить всё

var Excel;
var WSH = new ActiveXObject("WScript.Shell");

while(!Excel){
   try {
      // пытаемся подключиться к запущенному экземпляру Excel
      Excel = GetObject("", "Excel.Application");
   } catch(a) {
      WScript.Sleep(1000);
   }
}
WScript.Echo("Excel closing...");
Excel.Application.Quit();

Вроде все правильно — в бесконечном цикле ожидаем запуска Excel. Если к нему удалось подключиться, выходим из цикла, выдаем сообщение «Excel closing…» и после его закрытия закрываем Excel. Результаты же запуска скрипта озадачивают не на шутку!

Первый вариант запуска: Сначала запускаем Excel. Затем запускаем скрипт. Он отрабатывает, как и должен — подключается к Excel, выдает сообщение и закрывает Excel.

Второй вариант, ради которого, собсно, и затевался сыр-бор: сначала запускаем скрипт. Он, как и положено, крутится в цикле, периодически пробуя подключиться к Excel. Запускаем Excel. Ждем… (Excel запущен и активен!) еще ждем… и еще ждем… . Нифига. Но стоит переключиться из окна Excel на любое другое окно (да хоть мышкой по панели задач щелкнуть), как тут же выскакиваем окошко «Excel closing…».
То есть такое впечатление, как будто сразу после запуска Excel его OLE сервер неактивен или не создан. Но как только окно Excel теряет фокус, то OLE сервер тут же создается, либо активизируется, позволяя подключиться к себе…

Казалось бы, бред полный. Но факты — упрямая вещь. Кто поопытнее меня, разъясните, в чем замес. А то я уже просто не знаю что и думать…

зарегистрировал dll в сиcтеме
код bat файла регистрации:

C:WINDOWSMicrosoft.NETFrameworkv4.0.30319regasm.exe QueryObjects.dll /register
gacutil.exe -u QueryObjects
tlbexp.exe QueryObjects.dll
gacutil.exe -i QueryObjects.dll
C:WINDOWSMicrosoft.NETFrameworkv4.0.30319regasm.exe QueryObjects.dll /tlb /codebase

пытаюсь:

createobject(«QueryObjects.ServerInfo»)

выдает ошибку: «Невозможно создание объекта контейнером ActiveX»
код ошибки: 800a01ad

на файл доступы дал все для всех
в реестре dll зарегистрирована

компоненты С++ установил все что мог

больше не знаю что пробовать

задан 18 ноя 2015 в 9:29

Anton Colomiiciuc's user avatar

оказалось всё проше

dll заточена под 32-разрядную систему

так я использовал это для classic ASP, нужно было просто разрешить 32-разрядные приложения для пула приложений

ответ дан 18 ноя 2015 в 12:07

Anton Colomiiciuc's user avatar

Понравилась статья? Поделить с друзьями:
  • Невозможно редактировать документ word что делать
  • Невозможно редактировать документ excel
  • Невозможно редактировать excel файл
  • Невозможно разорвать связи в excel
  • Невозможно применить команду к указанному диапазону excel