我可以更改C#脚本中的某些内容以避免在DCOM设置中使用交互式用户吗?
我有一个ssis包,它将模板复制到文件夹中,并使用文件系统任务相应地命名它。然后在我的数据流任务中,我从查询中提取数据并写入刚刚创建的excel文件。这与“启动用户”Excel应用程序DCOM设置配合得很好。然后我有一个脚本任务重新格式化原始excel文件中的数据类型。但是,除非我将DCOM配置设置为使用“交互式用户”,否则该作业在脚本任务中失败。问题是,即使我的用户帐户已登录,它也无法工作,除非我主动将rdp导入服务器并在我的计算机上打开该窗口。是否有一种变通方法可以包含在代码或其他地方,以避免使用交互式用户设置?这是我的剧本:我可以更改C#脚本中的某些内容以避免在DCOM设置中使用交互式用户吗?,c#,sql-server,excel,ssis,C#,Sql Server,Excel,Ssis,我有一个ssis包,它将模板复制到文件夹中,并使用文件系统任务相应地命名它。然后在我的数据流任务中,我从查询中提取数据并写入刚刚创建的excel文件。这与“启动用户”Excel应用程序DCOM设置配合得很好。然后我有一个脚本任务重新格式化原始excel文件中的数据类型。但是,除非我将DCOM配置设置为使用“交互式用户”,否则该作业在脚本任务中失败。问题是,即使我的用户帐户已登录,它也无法工作,除非我主动将rdp导入服务器并在我的计算机上打开该窗口。是否有一种变通方法可以包含在代码或其他地方,以避
public void Main()
{
string datetime = DateTime.Now.ToString("yyyyMMddHHmm");
try
{
string FileName = Dts.Variables["User::FullDestinationFile"].Value.ToString();
//Init
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
xlApp.Visible = false;
//Set active worksheet
Workbook xlWorkbook = xlApp.Workbooks.Open(FileName);
Sheets xlSheets = xlWorkbook.Worksheets;
Worksheet sheet = (Worksheet)xlApp.Worksheets[1];
sheet.Select(Type.Missing);
//Set formatting on columns
Range pDate = sheet.Range[sheet.Cells[5, 1], sheet.Cells[sheet.UsedRange.Rows.Count, 1]];
pDate.NumberFormat = "General";
pDate.HorizontalAlignment = XlHAlign.xlHAlignCenter;
//Save and Close
xlWorkbook.Save();
xlWorkbook.Close(true);
Dts.TaskResult = (int)ScriptResults.Success;
}
catch (Exception exception)
{
// Create Log File for Errors
using (StreamWriter sw = File.CreateText(Dts.Variables["User::FullDestinationFile"].Value.ToString() + datetime + ".log"))
{
sw.WriteLine(exception.ToString());
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
}
我看到了您的问题,正如您所经历的,将互操作Excel bits与SSIS一起使用是一件痛苦的事情。我可以用两种方法来减少这种情况。1) 将Excel提取部分修改为SSRS报告,假设它安装在您的生态系统中,可以优雅地导出到Excel。不再需要Office和支付SQL Server box上的许可证费用,同时由于修补而增加了停机时间。然后,SSIS部分就变成了一个问题,即用一个好的文件名保存导出—更易于管理,并且有很多示例—另一种方法可能是使用类似的方法。是的,一开始会有很多返工,但它应该可以避免您遇到的交互性挑战,正如我上次回忆的那样,它实际上只是编写Excel格式的XML。互操作库正在旋转一个Excel实例来完成所有巫毒,它们做得很好,或者很普通