Ниже мой код.
Код читает записи из БД.Он создает файл для каждого дилера.Внутри каждого файла заключены дилерские контракты, код создает рабочий лист на основе найденного типа услуг.
Мне нужно добавить для окраски заголовок (background = green, letters = white) каждого рабочего листа в файле,Я не программист C # и пытался, но не получил ожидаемый результат.
Пожалуйста, не могли бы вы дать мне руку с этим ...
Заранее спасибо.
Мари
#region Namespaces
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.IO;
using System.Data.OleDb;
using System.Data.SqlClient;
#endregion
namespace ST_130aa2d588a24d5f94597808384fc061
{
/// <summary>
/// ScriptMain is the entry point class of the script. Do not change the name, attributes,
/// or parent of this class.
/// </summary>
[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
/// <summary>
/// This method is called when this script task executes in the control
flow.
/// Before returning from this method, set the value of Dts.TaskResult to
indicate success or failure.
/// To open Help, press F1.
/// </summary>
public void Main()
{
string datetime = DateTime.Now.ToString("yyyyMMdd");
try
{
//Declare Variables
string ExcelFileName =
Dts.Variables["User::ExcelFileName"].Value.ToString();
string FolderPath =
Dts.Variables["User::FolderPath"].Value.ToString();
string TableName =
Dts.Variables["User::TableName"].Value.ToString();
string ColumnNameForGrouping =
Dts.Variables["User::ColumnNameForGrouping"].Value.ToString();
string DealerNumber =
Dts.Variables["User::DealerNumber"].Value.ToString();
ExcelFileName = ExcelFileName + "_" + datetime;
OleDbConnection Excel_OLE_Con = new OleDbConnection();
OleDbCommand Excel_OLE_Cmd = new OleDbCommand();
//Construct ConnectionString for Excel
string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + FolderPath + ExcelFileName
+ ";" + "Extended Properties=\"Excel 12.0 Xml;HDR=YES;\"";
//drop Excel file if exists
File.Delete(FolderPath + "\\" + ExcelFileName + ".xlsx");
//USE ADO.NET Connection from SSIS Package to get data from
table
SqlConnection myADONETConnection = new SqlConnection();
myADONETConnection = (SqlConnection)
(Dts.Connections["DBConn"].AcquireConnection(Dts.Transaction) as
SqlConnection);
//Read distinct Group Values for each Excel Sheet
string query = "SELECT[maxNumServices] FROM[SSISDB].[dbo].
[View_RPT_Coupons_step1] where sdealernumber = '"+ DealerNumber + "' GROUP
BY[maxNumServices] ORDER BY min([maxNumServ])";
// MessageBox.Show(query, "query", MessageBoxButtons.OK ) ;
//MessageBox.Show(query.ToString());
SqlCommand cmd = new SqlCommand(query, myADONETConnection);
//myADONETConnection.Open();
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
myADONETConnection.Close();
//Loop through values for ColumnNameForGroup
foreach (DataRow dt_row in dt.Rows)
{
string ColumnValue = "";
object[] array = dt_row.ItemArray;
ColumnValue = array[0].ToString();
//Load Data into DataTable from SQL ServerTable
string queryString =
"SELECT [Dealer],[Contract Number],[First Name],[Last Name],[Address],
[VIN],[Model],iif(len([Sale Odometer]) = 0, convert(NVARCHAR(2),[Sale
Odometer]), REPLACE(CONVERT(VARCHAR, CONVERT(MONEY, [Sale Odometer]), 1),
'.00', '')) [Sale Odometer],[Coverage],[Oil Type],convert(NVARCHAR(2),
[Term Months]) [Term Months],iif(len([Term Mileage]) = 0,
convert(NVARCHAR(2), [Term Mileage]), REPLACE(CONVERT(VARCHAR,
CONVERT(MONEY, [Term Mileage]), 1), '.00', '')) [Term
Mileage],convert(NVARCHAR(3), [Month Interval]) [Month
Interval],Convert(NVARCHAR(10), [Effective Date]) [Effective Date],
[Service Type],iif(len([Service Interval]) = 0, convert(NVARCHAR(2),
[Service Interval]), REPLACE(CONVERT(VARCHAR, CONVERT(MONEY, [Service
Interval]), 1), '.00', '')) [Service Interval],convert(NVARCHAR(2), [Total
Number of Services]) [Total Number of Services],convert(NVARCHAR(2),
[maxNumServ]) [maxNumServ],convert(NVARCHAR(20), [maxNumServices])
[maxNumServices],convert(NVARCHAR(2), [Service Number]) [Service Number],
[Coupon Description],iif(len([Mileage Due]) = 0, convert(NVARCHAR(2),
[Mileage Due]), REPLACE(CONVERT(VARCHAR, CONVERT(MONEY, [Mileage Due]),
1), '.00', '')) [Mileage Due],Convert(NVARCHAR(10), [Date Due]) [Date Due]
FROM (SELECT [sDealerNumber],[Dealer],[Contract Number],[First Name],[Last
Name],[Address],[VIN],[Model],iif(len([Sale Odometer]) = 0,
convert(NVARCHAR(2), [Sale Odometer]), REPLACE(CONVERT(VARCHAR,
CONVERT(MONEY, [Sale Odometer]), 1), '.00', '')) [Sale Odometer],
[Coverage],[Oil Type],convert(NVARCHAR(2), [Term Months]) [Term
Months],iif(len([Term Mileage]) = 0, convert(NVARCHAR(2), [Term Mileage]),
REPLACE(CONVERT(VARCHAR, CONVERT(MONEY, [Term Mileage]), 1), '.00', ''))
[Term Mileage],convert(NVARCHAR(3), [Month Interval]) [Month
Interval],Convert(NVARCHAR(10), [Effective Date]) [Effective Date],
[Service Type],iif(len([Service Interval]) = 0, convert(NVARCHAR(2),
[Service Interval]), REPLACE(CONVERT(VARCHAR, CONVERT(MONEY, [Service
Interval]), 1), '.00', '')) [Service Interval],convert(NVARCHAR(2), [Total
Number of Services]) [Total Number of Services],convert(NVARCHAR(2),
[maxNumServ]) [maxNumServ],convert(NVARCHAR(20), [maxNumServices])
[maxNumServices],convert(NVARCHAR(2), [Service Number]) [Service Number],
[Coupon Description],iif(len([Mileage Due]) = 0, convert(NVARCHAR(2),
[Mileage Due]), REPLACE(CONVERT(VARCHAR, CONVERT(MONEY, [Mileage Due]),
1), '.00', '')) [Mileage Due],Convert(NVARCHAR(10), [Date Due]) [Date
Due]FROM [SSISDB].[dbo].func_Rpt_Coupons_step1() WHERE sDealerNumber = '"
+ DealerNumber + "' and [maxNumServices] = '" + ColumnValue + "' UNION
ALL SELECT DISTINCT ' ',' ',' ',[First Name],[Last Name],' ',' ' AS
[VIN],' ' AS [Model],coalesce(NULL, ' ') AS [Sale Odometer],' ' AS
[Coverage],' ' AS [Oil Type],coalesce(NULL, ' '),coalesce(NULL, '
'),coalesce(NULL, ' '),coalesce(NULL, ' '),' ', coalesce(NULL, ' '),
coalesce(NULL, ' '), coalesce(NULL, ' '), convert(NVARCHAR(20),
[maxNumServices]) [maxNumServices] ,coalesce(NULL, ' ') ,'
',coalesce(NULL, ' '),coalesce(NULL, ' ') FROM [SSISDB].
[dbo].func_Rpt_Coupons_step1() WHERE sDealerNumber = '" + DealerNumber +
"' and [maxNumServices] = '" + ColumnValue + "' ) AS t ORDER BY[Last
Name],[First Name],[Contract Number],[Date Due]";
// MessageBox.Show(queryString,"queryString",
MessageBoxButtons.OK);
SqlDataAdapter adapter = new SqlDataAdapter(queryString,
myADONETConnection);
DataSet ds = new DataSet();
adapter.Fill(ds);
//Get Header Columns
string TableColumns = "";
// Get the Column List from Data Table so can create Excel
Sheet with Header
foreach (DataTable table in ds.Tables)
{
foreach (DataColumn column in table.Columns)
{
TableColumns += column + "],[";
}
}
// Replace most right comma from Columnlist
TableColumns = ("[" + TableColumns.Replace(",", "
Text,").TrimEnd(','));
TableColumns = TableColumns.Remove(TableColumns.Length -
2);
//MessageBox.Show(TableColumns);
//Use OLE DB Connection and Create Excel Sheet
Excel_OLE_Con.ConnectionString = connstring;
Excel_OLE_Con.Open();
Excel_OLE_Cmd.Connection = Excel_OLE_Con;
Excel_OLE_Cmd.CommandText = "Create table [" + ColumnValue
+ "] (" + TableColumns + ")";
Excel_OLE_Cmd.ExecuteNonQuery();
//Write Data to Excel Sheet from DataTable dynamically
foreach (DataTable table in ds.Tables)
{
String sqlCommandInsert = "";
String sqlCommandValue = "";
foreach (DataColumn dataColumn in table.Columns)
{
sqlCommandValue += dataColumn + "],[";
}
sqlCommandValue = "[" + sqlCommandValue.TrimEnd(',');
sqlCommandValue =
sqlCommandValue.Remove(sqlCommandValue.Length - 2);
sqlCommandInsert = "INSERT into [" + ColumnValue + "]
(" + sqlCommandValue + ") VALUES(";
int columnCount = table.Columns.Count;
foreach (DataRow row in table.Rows)
{
string columnvalues = "";
for (int i = 0; i < columnCount; i++)
{
int index = table.Rows.IndexOf(row);
columnvalues += "'" +
table.Rows[index].ItemArray[i] + "',";
}
columnvalues = columnvalues.TrimEnd(',');
var command = sqlCommandInsert + columnvalues + ")";
Excel_OLE_Cmd.CommandText = command;
Excel_OLE_Cmd.ExecuteNonQuery();
}
}
Excel_OLE_Con.Close();
}
Dts.TaskResult = (int)ScriptResults.Success;
}
catch (Exception exception)
{
// Create Log File for Errors
using (StreamWriter sw =
File.CreateText(Dts.Variables["User::FolderPath"].Value.ToString() + "\\"
+ Dts.Variables["User::ExcelFileName"].Value.ToString() + datetime +
".log"))
{
sw.WriteLine(exception.ToString());
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
}
#region ScriptResults declaration
/// <summary>
/// This enum provides a convenient shorthand within the scope of this
class for setting the
/// result of the script.
///
/// This code was generated automatically.
/// </summary>
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
}
}