Сценарий C # не может быть выполнен в моей работе при развертывании с сервера ssis на Sql

C. Men спросил: 28 апреля 2018 в 09:36 в: c#

У меня есть сценарий C # в моем пакете SSIS, который я могу запустить на своем компьютере без каких-либо проблем. Но когда я развертываю его на своем сервере и выполняю пакет из задания sql, я получаю сообщение об ошибке. С предложением try / catch я получаю это в txt-файле:

Message :Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).<br/>
StackTrace :   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Activator.CreateInstance(Type type)
   at ST_86c290165eda4c9a962b68fdf181801f.ScriptMain.Main()

Может кто-нибудь объяснить мне, в чем проблема?

Драйверы ACE.OLEDB 12.0 и 16.0 установлены на сервере (SQL Server 2014 SP2 CU11)

Как я могу изменить свой скрипт для изменения шрифта без использования взаимодействия?

Вот мой сценарий C #

#region Namespaces
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;
#endregionnamespace ST_86c290165eda4c9a962b68fdf181801f
{
    [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {   
        public void Main()
        {
                String FilePath = Dts.Variables["User::excelPath"].Value.ToString();
                Excel.Application excelApp = new Excel.Application();
                Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(FilePath);
                Excel.Sheets excelSheets = excelWorkbook.Worksheets;                Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(1);
                Excel.Range excelCell = (Excel.Range)excelWorksheet.Cells;
                excelCell.Font.Name = "Arial";
                excelWorkbook.Save();
                excelWorkbook.Close(true);
                excelApp.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
        Dts.TaskResult = (int)ScriptResults.Success;
        }        #region ScriptResults declaration
        enum ScriptResults
        {
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        };
        #endregion    }
}

1 ответ

spodger ответил: 28 апреля 2018 в 09:53

CLSID {00024500-0000-0000-C000-000000000046} относится к Microsoft.Office.Interop.Excel.

Я бы посоветовал вам установить Excel на свой сервер. Я не знаю, существует ли определенная установка "Interop", но она может быть доступна в пользовательской настройке Excel.