Произошла исключительная ситуация (Microsoft Office Excel): Невозможно получить свойство Open класса Workbooks
При разработке в 1С, при попытке выполнить открытие COM-объекта Microsoft Excel на серверной базе данных 1С появляется ошибка «Произошла исключительная ситуация (Microsoft Office Excel): Невозможно получить свойство Open класса Workbooks».
Запуск обработки, вызвавшей данную ошибку, производится на серверной операционной системе Microsoft Windows 2012. Также возможна при запуске на ОС Windows 2008 Server. Права пользователя полные. Причем, запуск на операционной системе не относящейся к семейству серверных происходит без возникновения исключительной ситуации.
Сообщить(«Выгрузка в файл Microsoft Excel…»); Путь= КаталогВременныхФайлов() + «FILENAME.xls»; Файл= Новый Файл(Путь); Если Файл.Существует() = 0 Тогда ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.Записать(Путь, ТипФайлаТабличногоДокумента.XLS); КонецЕсли; Попытка ExcelПриложение = Новый COMОбъект(«Excel.Application»); Исключение Сообщить(«Ошибка при загрузке Microsoft Excel.» + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание); Возврат; КонецПопытки; ExcelФайл = ExcelПриложение.WorkBooks.Open(Путь); ExcelЛист = ExcelФайл.Worksheets(1); |
Возникновение ошибки происходит на предпоследней строке кода.
Решение для устранения исключительной ситуации:
Для нормальной работы MS Office, папка «Desktop» должна находиться в каталоге «systemprofile» системного каталога ОС. Причем, Windows 2003 имеет в своем составе такие папки.
Поэтому необходимо их создать в каталоге «Windows» операционной системы.
— для Windows 2008 Server x64:
C:WindowsSysWOW64configsystemprofileDesktop
— для Windows 2008 Server x86:
C:WindowsSystem32configsystemprofileDesktop
Оцените статью:
Загрузка…
Если Вы заметили ошибку, то выделите ее мышью и нажмите Ctrl+Enter
Победили предыдущую проблему — приложение Excel запускается.
Получили новую ошибку: -2146827284 Невозможно получить свойство Open класса Workbooks.
Возникала на вызове:
EXEC @iRetCode = sp_OAMethod @iXLApp, 'Workbooks.Open', @iDoc OUTPUT, @FileName
Всяческие изменения в вызове процедуры, выделение отдельно Workbooks никак не помогали.
Дело опять же оказалось в правах и в том, что операционка 64-битная:
— нужно проверить, что существует папка C:WindowsSysWOW64configsystemprofileDesktop — если нет, то нужно создать
— и учетной записи, под которой работает служба SQL Server нужно дать полные права на папку C:WindowsSysWOW64configsystemprofile и все ее подпапки.
После этих нехитрых действий всё должно заработать.
Ссылки, посвященные этой теме:
http://forum.foxclub.ru/read.php?29,488069
06.02.12 — 14:13
Подскажите где лыжи?
Excel = СоздатьОбъект(«Excel.Application»);
Книга = Excel.WorkBooks.Open(ИмяПапкиДанных+»ИмяФайла.xls»);
Книга = Excel.WorkBooks.Open(ИмяПапкиДанных+»ИмяФайла.xls»);
{C:BASEZS_EGEXTFORMSОБНОВИТЬ.ERT(83)}: Microsoft Office Excel: Невозможно получить свойство Open класса Workbooks
1 — 06.02.12 — 14:15
на компьютере установлен Microsoft Office Excel 2003
при создании новых файлов проблем нет
2 — 06.02.12 — 14:17
Ексель = СоздатьОбъект(«Excel.Application»);
Книги=Ексель.WorkBooks;
Если Книги.Count=0 Тогда
Книги.Add();
КонецЕсли;
3 — 06.02.12 — 14:20
(2) файл уже существует, в нем 5 листов
4 — 06.02.12 — 14:21
(3) а ты попробуй, потом расскажешь
5 — 06.02.12 — 14:21
Ексель = СоздатьОбъект(«Excel.Application»);
Книги=Ексель.WorkBooks;
Если Книги.Count=0 Тогда
Книги.Add();
КонецЕсли;
Книга = Книги.Open(ИмяПапкиДанных+»ИмяФайла.xls»);
6 — 06.02.12 — 14:24
(4) в условие не зашёл
7 — 06.02.12 — 14:26
если не заходит, значит все будет работать, если заходит то же будет работать
8 — 06.02.12 — 14:26
(6)скобочки?
да и не нужно условие.
9 — 06.02.12 — 14:32
(8) ну вот и я не понимаю каким оно там боком нужно, но в силу (4) решил попробовать
10 — 06.02.12 — 14:33
(8) да, тут не нужно, просто когда обращаешься к некоторым свойствам приложения без наличия хотя бы одной книги получаем банан
11 — 06.02.12 — 14:47
пароля нет на файле? Интерактиво открывается?
12 — 06.02.12 — 14:52
СокрЛП(ИмяПапкиДанных) не поможет?
13 — 06.02.12 — 14:53
(11) да
он же ранее был создан
14 — 06.02.12 — 14:53
Excel.WorkBooks.Add()
15 — 06.02.12 — 14:53
(12) Microsoft Office Excel: Невозможно получить свойство Open класса Workbooks
16 — 06.02.12 — 14:54
(12) Это ошибка OLE объекта а не 1С
17 — 06.02.12 — 15:00
странно..
у меня вот такой код, сейчас проверил, работает:
Эксель = СоздатьОбъект(«Excel.Application»);
Книга = Эксель.WorkBooks.Open(ЕхФайл);
Лист = Книга.WorkSheets(НомерЛистаЕксель);
правда, ЕхФайл и НомерЛистаЕксель — реквизиты диалога обработки.
18 — 06.02.12 — 15:01
кстати, в отладчике с
ИмяПапкиДанных+»ИмяФайла.xls»
всё нормально?
19 — 06.02.12 — 15:07
попробуй
Книга1 = Excel.WorkBooks.Add();
Книга2 = Excel.WorkBooks.Open(«C:1.xls»);
Книга3 = Excel.WorkBooks.Open(ИмяПапкиДанных+»ИмяФайла.xls»);
где вылетит?
C:1.xls — кинь пустой файл эхеля
20 — 06.02.12 — 15:09
(19)я тут кофе выпил, кофейная гуща подсказывает: на первом
21 — 06.02.12 — 15:25
(20) на первом точно не вылетит
22 — 06.02.12 — 15:25
не понял почему, но проблема решилась
23 — 06.02.12 — 15:25
перезагрузкой компьютера
24 — 06.02.12 — 15:41
(23)интересно
какая ось стоит?
25 — 06.02.12 — 15:44
(23) Кстати, будете смеяться, но на предыдущей работе, админы даже ж..у не отрывали, если пользователь не перезагрузил первым делом компьютер. Многие проблемы решались банальной перезагрузкой компа. А общее название этих проблем: Неведомая Ёба..я Ху..я :))))
26 — 06.02.12 — 15:45
(25)ты угадал, я смеюсь
27 — 06.02.12 — 15:48
+26 напомнило мне одну неисправность в авте.. искра в баллон ушла, не схватывается двиг, хить задавись.. я с ног сбился, прозванивал цепи, чистил контакты.. приятель пришел: посмотри предохранитель..
блин-же..
как просто, в конце концов оказалось
вот тебе та-же перезагрузка
28 — 06.02.12 — 15:51
(25) пользователи терминальный сервер перезагружали?
29 — 07.02.12 — 11:24
(24) ХР
Fish
30 — 07.02.12 — 11:26
(28) Нет. Свои локальные. Причём здесь терминальный сервер? :))
I’m trying to open a CSV then use the SaveAs method to save it as an XLS. Also vice-versa in another script. I accidentally had the file format codes wrong before and was not getting this error. The CSV would in fact open. I accidentally had made the CSV format 2 (which is actually SYLK) and the XLS, 6 (which is actually CSV).
I’ve looked all over, and most of what I can find has to do with using an incorrect argument (which I have checked multiple times). The rest is for ASP, and suggests changing permissions in Component Services (which probably wouldn’t be an issue anyway, since I can get the Open method to work with different formats).
So I’m at a loss as to how to proceed. If I can’t even use the Open method, then I’m kind of stuck. If it was as simple as thee SaveAs method not working for this task, I could get around that. But I need to be able to open an XLS using the Open method (since I’m also trying to do XLS to CSV). CSV to XLS can be fixed another way, probably, since the Open method seems to work sometimes.
Anyway, my code for the CSV to XLS is below. The XLS to CSV is essentially identical to this. It just flips the format codes and uses different paths for the files.
strName = "MidCSVTemp.csv"
strSaveName = Month(Now) & "." & Day(Now) & "." & Year(Now) & ".xls"
strPath = "C:UsersadamDocuments" & strName
strSavePath = "C:UsersadamDocuments" & strSaveName
'Options for Workbook.Open
intUpdateLinks = 0
boolReadOnly = False
intFormat = 6
'Options for SaveAs
intFileFormat = 56
Set objExcel = CreateObject("Excel.Application")
Set objWorkBook = objExcel.Workbooks.Open(strPath,intUpdateLinks,boolReadOnly,intFormat)
Call objWorkBook.SaveAs(strSavePath,intFileFormat)
Call objWorkbook.Close
I have some PowerShell scripts that invoke SQL commands, take the results and put them into a CSV file, then the CSV file is put into an excel workbook and it’s emailed out to a distribution list. I had no issues running these reports through Windows Scheduled tasks on my older Windows 2008 server running SQL 2008. But I have migrated over to Windows 2016 running SQL 2016. Now when I run this process through Scheduled tasks I get the following error:
Unable to get the Open property of the Workbooks class
At C:PowerShellscrpitsArtiReport3.ps1:607 char:1
+ $workbook = $excel.Workbooks.Open($csvFilePath)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException
If I run the PowerShell script manually I have no issues and everything runs fine. I’m using the same login to run the scripts manually as I do through scheduled tasks. Here is the script.
$query = "*SQL Query runs here*"
#Edit these peramters for the server this will be running on#
$smtpServer = "*server*";
$smtpFrom = "I3Reports@server.com";
$smtpTo = "*email list here*”
$messageSubject = "I3 Report";
#create anonymus loging for sending e-mail#
$User = "anonymous";
$PWord = ConvertTo-SecureString -String "anonymous" -AsPlainText -Force
$Creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user, $pword
$date = (Get-Date).AddDays(-1).ToString('yyyy-MM-dd')
$date = $date+"_I3Report.xls";
$csvFilePath = "c:Scriptsqueryresults.csv"
$excelFilePath = "c:scripts$date"
$instanceName = "*server*"
Import-Module "sqlps"
$results = Invoke-Sqlcmd -QueryTimeout 7200 -Query $query -ServerInstance $instanceName
# Output to CSV
$results | export-csv $csvFilePath -Delimiter " " -NoTypeInformation
#this line will remove all the quotation marks from the csv file
(Get-Content $csvFilePath) | % {$_ -replace '"', ""} | out-file -FilePath $csvFilePath -Force
# Convert CSV file to Excel
$excel = New-Object -ComObject excel.application
$excel.visible = $False
$excel.displayalerts=$False
$workbook = $excel.Workbooks.Open($csvFilePath) #<-- Program fails here
$workSheet = $workbook.worksheets.Item(1)
#$workSheet.cells.item(3,3) = "HOPLA"
#for freezing pane#
$workSheet.application.activewindow.splitcolumn = 0
$workSheet.application.activewindow.splitrow = 1
$workSheet.Range("A2").application.activewindow.freezepanes = $true
$resize = $workSheet.UsedRange
$resize.EntireColumn.AutoFit() | Out-Null
$xlExcel8 = 43
$workbook.SaveAs($excelFilePath, $xlExcel8)
$workbook.Close()
$excel.quit()
$excel = $null
send-mailmessage -from $smtpFrom -to $smtpTo -subject "$messageSubject" -body "Attachment" -Attachments $excelFilePath -smtpServer $smtpServer -Credential $creds;
As mentioned this works when I run it in PowerShell manually, but through scheduled tasks it gets that error and it references the section I noted in the code. I’ve been working on this for days and I can’t seem to figure out what is causing the issue. Any help or suggestions is welcomed. Thanks for taking the time.