我开发了一个ssis包,我将结果存储在路径
中的Excel工作表中E:\output\report\Account_28 Mar 2012.xls
现在我再次从上面的路径打开文件,在指定的单元格中写入一些内容,然后将其保存回来。如果在我的解决方案vs 2008中,我可以在服务器中自行部署此软件包,如果我在我的解决方案中运行,则没有任何问题。一切正常
但是,如果我从解决方案中获取我的包和配置并作为作业部署在服务器中并运行它会给我这个错误
Microsoft Excel无法访问该文件 E:\ output \ report \ ExpiredAccount_28 Mar 2012.xls。有几个 可能的原因:?文件名或路径不存在。 ?该 另一个程序正在使用该文件。 ?你正在尝试的工作簿 保存与当前打开的工作簿具有相同的名称。
我不明白为什么我在这里工作时失败了?
环境:SQL Server Business Intelligence Development Studio 2008,SQL Server 2005,Windows Server 2008
错误
:您可能无权访问此信息。这个错误 发生加密错误时发生。验证是否正确 密钥可用。结束错误错误: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 Mar 2012.xls'。有几个可能的原因:文件名 或路径不存在。 ?该文件正被另一个程序使用。 ?您要保存的工作簿与a具有相同的名称 目前打开的工作簿。在 ST_889a4dfd8e9647039213f39fd4c966ab.csproj.ScriptMain.Main()--- 内部异常堆栈跟踪结束--- at System.RuntimeMethodHandle._InvokeMethodFast(Object target,Object [] 参数,SignatureStruct& sig,MethodAttributes methodAttributes,
RuntimeTypeHandle typeOwner)at System.RuntimeMethodHandle.InvokeMethodFast(Object target,Object [] arguments,Signature sig,MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化, 布尔值skipVisibilityChecks)at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化)
在System.RuntimeType.InvokeMember(String name,BindingFlags bindingFlags,Binder binder,Object target,Object [] providedArgs,
ParameterModifier []修饰符,CultureInfo文化,String [] system.Type.InvokeMember(String name, 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;
}
}
答案 0 :(得分:1)
(在问题编辑中由OP回答。转换为社区维基答案。请参阅Question with no answers, but issue solved in the comments (or extended in chat))
OP写道:我是如何解决的
在
component services > Computers > My Computer > DCOM Config + Microsoft Excel application > properties > Identity Tab > Select the Interactive User > Ok
下。然后在代码中我做了这个更改,以显式关闭打开的文件
app.Workbooks.Close();