Я разработал пакет 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;
}
}