由于一些并发问题,我被迫创建一个包含多个工作表的工作簿。在执行结束时,有些工作表会有数据,而有些则没有。我使用执行 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 台不同的机器上。