- 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.FileNameConst 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
WendSet 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.FileNameConst 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
WendSet 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
-
- 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!
PS: в следующий раз выбирайте правильный раздел форума, а то оффтоп полный
-
0
- Наверх
#3
Case
Case
- ФИО:Панкратов Вячеслав
- Город:Украина, Киев.
Отправлено 03 ноября 2005 — 15:57
Похоже на задачку «из домашнего задания». См. FAQ: Как задавать вопросы
PS
Перенесено из форума «Форумы проектов > Сервер тестировщиков и QA»
-
0
- Наверх
#4
Polin
Polin
-
- Members
-
- 6 сообщений
Новый участник
- ФИО:Полина
Отправлено 07 ноября 2005 — 05:36
Извиняюсь за оффтопик.
На самом деле задача производственная, институты уже давно закончены, появились жизненные реалии.
По существу никто не может что-либо посоветовать?
Заранее спасибо.
-
0
- Наверх
#5
Polin
Polin
-
- Members
-
- 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
-
- 6 сообщений
Новый участник
- ФИО:Полина
Отправлено 07 ноября 2005 — 08:06
Это можно, но если несколько пользователей одновременно ваяют 1 отчет с разными параметрами — как формировать файл? Как-то его уникально называть, а потом (раз в день например) вычищать определенную папку?
С точки зрения безопасности — сетка внутренняя, корпоративная, так что это не станет проблеммой.
-
0
- Наверх
#8
Polin
Polin
-
- Members
-
- 6 сообщений
Новый участник
- ФИО:Полина
Отправлено 07 ноября 2005 — 09:18
Всем большое спасибо, у меня все получилось. Все упиралось в политику безопасности IE.
-
0
- Наверх
#9
greyver
greyver
- ФИО:Вербенко Сергей Анатольевич
- Город:Москва, Зеленоград
Отправлено 07 ноября 2005 — 10:15
Всем большое спасибо, у меня все получилось. Все упиралось в политику безопасности IE.
Позволю себе процитировать Алексея.
Если всякому позволить из IE открывать Excel — это ж какая дыра в системе безопасности получится…
Пользователи вашей системой будут иметь доступ в Интернет? Если да, то может случиться ОЙ.
-
0
- Наверх
#10
Pet[EG]
Pet[EG]
- ФИО:Петраш А.Ю.
- Город:Харьков, Укр
Отправлено 07 ноября 2005 — 10:55
Это можно, но если несколько пользователей одновременно ваяют 1 отчет с разными параметрами — как формировать файл? Как-то его уникально называть, а потом (раз в день например) вычищать определенную папку?
Позволю себе вкрутить свои 5 копеек. Учитывая что вы отдаете его по http, то стоит xsl файл не сохранять на диске на сервере, а прямо отдавать в поток пользователю. И никаких проблем с именованием.
-
0
- Наверх
#11
Polin
Polin
-
- Members
-
- 6 сообщений
Новый участник
- ФИО:Полина
Отправлено 07 ноября 2005 — 11:09
Позволю себе процитировать Алексея.
![]()
Если всякому позволить из IE открывать Excel — это ж какая дыра в системе безопасности получится…
Пользователи вашей системой будут иметь доступ в Интернет? Если да, то может случиться ОЙ.
Будут. Через прокси и файрвол. Систему безопасности придется подвинуть… Я оставляю возможность отказаться от открытия непойми чего… Юзерам только надо будет это досконально обьяснить
… Или попытаться найти разрешение на выполнение ActiveX компонентов только с конкретного IP, что конечно лучше…
а прямо отдавать в поток пользователю
А это как можно сделать? В поток — в смысле сохранять прямо в Excel и писать на диск с информацией пользователю «Сохранено в c:katalogreport.xls»?
-
0
- Наверх
#12
Clauster
Clauster
- ФИО:Худобородов Валерий
- Город:Espoo
Отправлено 08 ноября 2005 — 11:09
По существу никто не может что-либо посоветовать?
Так и задавайте вопросы по существу. Какой вопрос, такой и ответ…
-
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
оказалось всё проше
dll заточена под 32-разрядную систему
так я использовал это для classic ASP, нужно было просто разрешить 32-разрядные приложения для пула приложений
ответ дан 18 ноя 2015 в 12:07