いくつかの並行性の問題のために、私は複数のシートでワークブックを作成することを余儀なくされました。実行の最後に、一部のシートにはデータが含まれ、一部のシートにはデータが含まれません。SQL実行タスクを使用してシートを作成します。
ブックをループして、1行を超えないシートを削除しようとしています。つまり、行数が1以下の場合は、シートを削除してください。この質問へのポインタをいただければ幸いです。私の質問の詳細が必要な場合はお知らせください。前もって感謝します。
編集
以下は、MSDNから取得したスクリプトタスクです。エクセルシートに到達して行数をカウントできるように変更しました。カウント=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の異なるマシンに移植されるため、このオプションはありません。