SSIS добавить пользовательский заголовок в файл Excel
Мы сбрасываем данные в файл Excel с помощью служб SSIS. Необходимо добавить пользовательский заголовок в файл Excel.
Код ниже работал в течение многих лет. (на разных Windows (Win7,Win10) и разных офисных версиях (Office2007 и Office2013).
string ExcelTarget = Dts.Variables["ExcelTarget"].Value.ToString();
int ReportDayDiff = (int)Dts.Variables["ReportDayDiff"].Value;
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(ExcelTarget, 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);
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Sheets["Orders"];
xlWorkSheet.PageSetup.PrintTitleRows = "$1:$1";
xlWorkBook.Save();
xlWorkSheet.PageSetup.CenterHeader = "&B&\"Calibri\"&22 SellerCloud Orders - " + DateTime.Now.AddDays(ReportDayDiff).ToString("MM/dd/yyy");
xlWorkBook.Save();
xlWorkBook.Close(true, Type.Missing, Type.Missing); // first parameter is SaveChanges
xlApp.Quit();
Dts.TaskResult = (int)ScriptResults.Success;
Перестал работать после недавнего обновления для системы безопасности Windows.
Отлично работает в Visual Studio, но выдает ошибки в агенте SQL Server.
Ошибка от агента SQL Server
Выполняется от имени пользователя: Office\ Администратор. Microsoft (R) SQL Server Execute Package Utility версии 14.0.1000.169 для 64-разрядной версии Copyright (C) 2017 Microsoft. Все права защищены. Начато: 15:01:22 PM Ошибка: 2018-05-16 15:01:25.64 Код: 0x00000001 Источник: описание задачи сценария: Исключение было вызвано целью вызова. Ошибка завершения DTExec: выполнение пакета вернуло DTSER_FAILURE (1). Начато: 15:01:22. Закончено: 15:01:25. Прошло: 2.687 секунд. Не удалось выполнить пакет. Шаг не удался.
1 ответ
Исключение было сгенерировано целью вызова
Это исключение является общим, я думаю, вы должны добавить некоторую обработку ошибок в код скрипта, чтобы получить реальное исключение.
Но я думаю, что это справочная проблема, агент SQL может не иметь доступа к microsoft.interop.excel.dll
путь, или эта сборка должна быть переустановлена в GAC.
Есть похожая статья, которая содержит больше деталей и обходных путей: