Color Excel Header WorkSheet Header C # - PullRequest
       0

Color Excel Header WorkSheet Header C #

0 голосов
/ 01 декабря 2018

Ниже мой код.

Код читает записи из БД.Он создает файл для каждого дилера.Внутри каждого файла заключены дилерские контракты, код создает рабочий лист на основе найденного типа услуг.

Мне нужно добавить для окраски заголовок (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

}

}

1 Ответ

0 голосов
/ 03 декабря 2018

Я не верю, что вы можете выполнить такое форматирование с помощью класса OleDbConnection.Однако есть и другие способы записи непосредственно в файл Excel.Для этого я использую Spire.XLS, в некоторых случаях я использовал классы Microsoft.Office.Interop.Excel.Другие библиотеки, которые я не использовал, но слышал о них, включают NPOI, ClosedXml и EPPlus.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...