彩色Excel标题工作表标题C#

问题描述 投票:0回答:1

以下是我的代码。

代码从db读取记录。它为每个经销商创建一个文件。每个文件的内部都是经销商合同,代码根据找到的服务类型创建工作表。

我需要添加文件中每个工作表的标题(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

}

}

c# sql excel
1个回答
0
投票

我不相信你可以使用OleDbConnection类进行那种格式化。但是,还有其他方法可以直接写入Excel文件。我使用Spire.XLS来执行此操作,在某些情况下,我使用了Microsoft.Office.Interop.Excel类。其他我没有使用但已经听过的库包括NPOI,ClosedXml和EPPlus。

© www.soinside.com 2019 - 2024. All rights reserved.