Excel невозможно получить свойство open класса workbook

Произошла исключительная ситуация (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

   CTmuB

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

   CTmuB

1 — 06.02.12 — 14:15

на компьютере установлен Microsoft Office Excel 2003

при создании новых файлов проблем нет

   smaharbA

2 — 06.02.12 — 14:17

Ексель = СоздатьОбъект(«Excel.Application»);

Книги=Ексель.WorkBooks;

Если Книги.Count=0 Тогда

   Книги.Add();

КонецЕсли;

   CTmuB

3 — 06.02.12 — 14:20

(2) файл уже существует, в нем 5 листов

   smaharbA

4 — 06.02.12 — 14:21

(3) а ты попробуй, потом расскажешь

   smaharbA

5 — 06.02.12 — 14:21

Ексель = СоздатьОбъект(«Excel.Application»);

Книги=Ексель.WorkBooks;

Если Книги.Count=0 Тогда

   Книги.Add();

КонецЕсли;

Книга = Книги.Open(ИмяПапкиДанных+»ИмяФайла.xls»);

   CTmuB

6 — 06.02.12 — 14:24

(4) в условие не зашёл

   smaharbA

7 — 06.02.12 — 14:26

если не заходит, значит все будет работать, если заходит то же будет работать

   miki

8 — 06.02.12 — 14:26

(6)скобочки?

да и не нужно условие.

   CTmuB

9 — 06.02.12 — 14:32

(8) ну вот и я не понимаю каким оно там боком нужно, но в силу (4) решил попробовать

   smaharbA

10 — 06.02.12 — 14:33

(8) да, тут не нужно, просто когда обращаешься к некоторым свойствам приложения без наличия хотя бы одной книги получаем банан

   miki

11 — 06.02.12 — 14:47

пароля нет на файле? Интерактиво открывается?

   Jaffar

12 — 06.02.12 — 14:52

СокрЛП(ИмяПапкиДанных) не поможет?

   CTmuB

13 — 06.02.12 — 14:53

(11) да

он же ранее был создан

   CTmuB

14 — 06.02.12 — 14:53

Excel.WorkBooks.Add()

   CTmuB

15 — 06.02.12 — 14:53

(12) Microsoft Office Excel: Невозможно получить свойство Open класса Workbooks

   CTmuB

16 — 06.02.12 — 14:54

(12) Это ошибка OLE объекта а не 1С

   aka AMIGO

17 — 06.02.12 — 15:00

странно..

у меня вот такой код, сейчас проверил, работает:

   Эксель = СоздатьОбъект(«Excel.Application»);

   Книга = Эксель.WorkBooks.Open(ЕхФайл);

   Лист = Книга.WorkSheets(НомерЛистаЕксель);

правда, ЕхФайл и НомерЛистаЕксель — реквизиты диалога обработки.

   aka AMIGO

18 — 06.02.12 — 15:01

кстати, в отладчике с

ИмяПапкиДанных+»ИмяФайла.xls»

всё нормально?

   dk

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 — кинь пустой файл эхеля

   aka AMIGO

20 — 06.02.12 — 15:09

(19)я тут кофе выпил, кофейная гуща подсказывает: на первом :)

   CTmuB

21 — 06.02.12 — 15:25

(20) на первом точно не вылетит

   CTmuB

22 — 06.02.12 — 15:25

не понял почему, но проблема решилась

   CTmuB

23 — 06.02.12 — 15:25

перезагрузкой компьютера

   aka AMIGO

24 — 06.02.12 — 15:41

(23)интересно :)

какая ось стоит?

   Fish

25 — 06.02.12 — 15:44

(23) Кстати, будете смеяться, но на предыдущей работе, админы даже ж..у не отрывали, если пользователь не перезагрузил первым делом компьютер. Многие проблемы решались банальной перезагрузкой компа. А общее название этих проблем: Неведомая Ёба..я Ху..я :))))

   aka AMIGO

26 — 06.02.12 — 15:45

(25)ты угадал, я смеюсь :)

   aka AMIGO

27 — 06.02.12 — 15:48

+26 напомнило мне одну неисправность в авте.. искра в баллон ушла, не схватывается двиг, хить задавись.. я с ног сбился, прозванивал цепи, чистил контакты.. приятель пришел: посмотри предохранитель..

блин-же..

как просто, в конце концов оказалось :)

вот тебе та-же перезагрузка :)

   1Сергей

28 — 06.02.12 — 15:51

(25) пользователи терминальный сервер перезагружали?

   CTmuB

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.

Понравилась статья? Поделить с друзьями:
  • Excel не удается продолжить выполнение кода vcruntime140 dll
  • Excel не удается подключиться к принтеру
  • Excel не удается очистить буфер обмена возможно буфер обмена используется другим приложением
  • Excel не удается отобразить связанный рисунок возможно этот файл был перемещен
  • Excel не удается открыть файл так как формат или расширение этого файла являются недопустимыми excel