Пакет не работает при развертывании в качестве задания в SQL Server 2005 - PullRequest
0 голосов
/ 02 апреля 2012

Я разработал пакет ssis, где я сохраняю результат в листе Excel в пути

E:\output\report\Account_28 Mar 2012.xls

Теперь я снова открываю файл по указанному выше пути, записываю немного содержимого в указанные ячейки и сохраняю его обратно. Это работает нормально, если в моем решении против 2008 я развернул этот пакет на сервере сам, никаких проблем вообще, если я запускаю в своем решении. Все отлично работает

Но если я возьму свой пакет и конфигурацию из решения и развернуюсь на сервере как задание и запусту его, это выдаст мне эту ошибку

Microsoft Excel не может получить доступ к файлу E: \ output \ report \ ExpiredAccount_28 Mar 2012.xls. Есть несколько Возможные причины: Имя файла или путь не существует. ? файл используется другой программой. ? Книга, которую вы пытаетесь имя сохраняемого файла совпадает с именем текущей открытой книги.

Я не понимаю, почему происходит сбой, когда я запускаю здесь работу?

Среда: SQL Server Business Intelligence Development Studio 2008, SQL Server 2005, Windows Server 2008

Error

: Возможно, вы не авторизованы для доступа к этой информации. Эта ошибка происходит, когда есть криптографическая ошибка. Убедитесь, что правильно ключ доступен. Ошибка завершения: 2012-03-28 10: 39: 45.49 Код: 0x00000001 Источник: обновить содержимое файла Описание: System.Reflection.TargetInvocationException: исключение было брошенный целью вызова. ---> System.Runtime.InteropServices.COMException (0x800A03EC): Microsoft Excel не может получить доступ к файлу 'E: \ output \ report \ Account_28 Mar 2012.xls Мар 2012.xls '. Есть несколько возможных причин: Имя файла или путь не существует. ? Файл используется другой программой. ? Книга, которую вы пытаетесь сохранить, имеет то же имя, что и В настоящее время открытая рабочая тетрадь. в ST_889a4dfd8e9647039213f39fd4c966ab.csproj.ScriptMain.Main () --- Конец внутренней трассировки стека исключений --- в System.RuntimeMethodHandle._InvokeMethodFast (Цель объекта, Объект [] аргументы, SignatureStruct & sig, MethodAttributes methodAttributes,
RuntimeTypeHandle typeOwner) в System.RuntimeMethodHandle.InvokeMethodFast (Цель объекта, Объект [] аргументы, подпись sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) в System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder Binder, Object [] параметры, CultureInfo культура, Boolean skipVisibilityChecks) в System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder Binder, Object [] параметры, CultureInfo culture)
в System.RuntimeType.InvokeMember (имя строки, BindingFlags bindingFlags, Binder Binder, Цель объекта, Объект [] provideArgs,
Модификаторы ParameterModifier [], CultureInfo culture, String [] namedParams) в System.Type.InvokeMember (имя строки, BindingFlags invokeAttr, Binder Binder, Object target, Object [] args, КультураИнфо культура) на Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript () Ошибка завершения DTExec: выполнение пакета вернуло DTSER_FAILURE (1).
Начато: 10:39:34 Закончено: 10:39:45 Прошло: 10,53 секунды. Не удалось выполнить пакет. Шаг не пройден.

Посмотрите код, который я использую для открытия файла Excel и его сохранения обратно

public void Main()
{
    try
    {
        string StartDate = string.Empty;
        string EndDate = string.Empty;
        string Reportname = "Employee list"
        string Countryname = "India"
        string Filename = Dts.Variables["User::FileName"].Value.ToString() + ".xls";
        string CurrentDate = Dts.Variables["User::CurrentDate"].Value.ToString();
        string strStarDate = Dts.Variables["User::StartDateTime"].Value.ToString();
        string strEndDate = Dts.Variables["User::EndDateTime"].Value.ToString();

        Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
        Microsoft.Office.Interop.Excel.Workbook wb = app.Workbooks.Open(Filename, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing);

        Worksheet sheet = (Worksheet)wb.Sheets["Accounts"];
        Range excelRange = sheet.UsedRange;
        Range rng1 = sheet.get_Range("B1", "C1");
        sheet.get_Range("$B1", "$C1").HorizontalAlignment = XlHAlign.xlHAlignLeft;
        sheet.get_Range(rng1.Cells[1, 1], rng1.Cells[1, 2]).Merge(Type.Missing);
        rng1.Value2 = Countryname;

        Range rng2 = sheet.get_Range("B2", "B2");
        sheet.get_Range("$B2", "$C2").HorizontalAlignment = XlHAlign.xlHAlignLeft;

        sheet.get_Range(rng2.Cells[1, 1], rng2.Cells[1, 2]).Merge(Type.Missing);
        rng2.Value2 = Reportname;
        sheet.get_Range("B1", "B1").Font.Bold = true;
        sheet.get_Range("B1", "B1").Font.Size = 14;
        sheet.get_Range("B2", "B2").Font.Bold = true;
        sheet.get_Range("B2", "B2").Font.Size = 14;
        Range rng3 = sheet.get_Range("A3", "A3");
        sheet.get_Range("$A3", "$B3").HorizontalAlignment = XlHAlign.xlHAlignLeft;
        sheet.get_Range(rng3.Cells[1, 1], rng3.Cells[1, 2]).Merge(Type.Missing);
        rng3.Value2 = "TimeFrame  : " + strStarDate + " " + strEndDate;
        Range rng5 = sheet.get_Range("C3", "C3");
        rng5.Value2 = "Report Run Date : " + "  " + CurrentDate; ;
        sheet.get_Range("A4", "A4").Font.Bold = true;
        sheet.get_Range("A4", "A4").Font.Size = 11;
        //  sheet.get_Range("B3", "B3").ColumnWidth = 56;
        sheet.get_Range("A4", "A4").Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
        //Color.Violet.ToArgb(); 

        sheet.get_Range("B4", "B4").Font.Bold = true;
        sheet.get_Range("B4", "B4").Font.Size = 11;
        sheet.get_Range("B4", "B4").Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);

        sheet.get_Range("C4", "C4").Font.Bold = true;
        sheet.get_Range("C4", "C4").Font.Size = 11;
        sheet.get_Range("C4", "C4").Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);

        sheet.get_Range("D4", "D4").Font.Bold = true;
        sheet.get_Range("D4", "D4").Font.Size = 11;
        sheet.get_Range("D4", "D4").Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);

        wb.RefreshAll();
        wb.Save();
        app.Workbooks.Close();
        app.Quit();
    }

    catch (Exception ex)
    {
        throw ex;
    }
}

1 Ответ

1 голос
/ 29 января 2015

(Ответ от ОП в редактировании вопроса. Преобразован в вики-ответ сообщества. См. Вопрос без ответов, но проблема решена в комментариях (или расширена в чате) )

ОП написал:

как я это решил

Под component services > Computers > My Computer > DCOM Config + Microsoft Excel application > properties > Identity Tab > Select the Interactive User > Ok.

затем в коде я сделал это изменение, чтобы явно закрыть файл, который был открыт app.Workbooks.Close();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...