【发布时间】:2012-12-20 16:07:50
【问题描述】:
由于一些并发问题,我不得不创建一个包含多个工作表的工作簿。在执行结束时,有些工作表会有数据,而有些则没有。我使用执行 SQL 任务创建工作表。
我正在尝试遍历工作簿并删除不超过一行的工作表。换句话说,如果行数不大于 1,则删除工作表。对此问题的任何指针将不胜感激。如果您需要有关我的问题的更多详细信息,请告诉我。提前谢谢你。
编辑
以下是我从 MSDN 获得的脚本任务。我将其修改为可以访问 excel 工作表并计算行数,现在我要做的就是当 count = 1 时删除工作表。有人可以帮我吗?
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Data.OleDb;
using System.IO;
namespace ST_c346c80b4e6747688383c47a9f3e6f78.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
public void Main()
{
string count = "";
string fileToTest;
string tableToTest;
string connectionString;
fileToTest = Dts.Variables["ExcelFile"].Value.ToString();
tableToTest = Dts.Variables["ExcelTable"].Value.ToString();
Dts.Variables["ExcelTableExists"].Value = false;
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + fileToTest + ";Extended Properties=Excel 8.0";
string SQL = "SELECT COUNT (*) FROM [" + tableToTest + "$]";
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
using (OleDbCommand cmd = new OleDbCommand(SQL, conn))
{
using (OleDbDataReader reader = cmd.ExecuteReader())
{
reader.Read();
count = reader[0].ToString();
//if (count = 1)
}
}
conn.Close();
}
//return count;
}
}
}
编辑
经过进一步调查,我发现我需要添加 excel 互操作程序集才能使其正常工作。我没有那个选项,因为这个解决方案将被移植到 140 台不同的机器上。
【问题讨论】:
-
我从未尝试在 SSIS 包中添加或删除工作表,但如果我必须这样做,我的第一个想法是使用脚本任务(甚至是外部脚本)。那么问题就变成了,how to delete a worksheet from .NET?
-
这是我目前正在努力的方向。我希望完全设置它并在博客上介绍它以帮助处于相同情况的其他人。
-
总是有固定的张数吗?还是这是动态的?
-
是的。它将永远是固定的。