2008年3月6日 星期四

.NET 元件Excel Wrapper的應用

image

因為同事有支重要的Excel排程程式,為了保留所有的格式、計算邏輯以及報表,所以寫了一支專門撈取Oracle ERP訂單資料至Excel檔裡的程式,其中呼叫Excel API的部分是朋友iTSE幫我寫的.NET元件ExcelWrapper.dll,他很大方的讓我放上來,如果有要source code的朋友請跟我聯絡,我再發mail給您。

我把其中產生新檔的code貼上來,雖然寫的不是很好是硬擠出來的,不過對有類似需求的朋友不妨可以參考看看。

 

try
{
    //copy原始檔案至指定目錄
    System.IO.File.Copy(Application.StartupPath + "\\source\\XXX.xls", txtPatch.Text + txtYYMM.Text + "_XXX.xls", true);

    int ColIdx = 0;
    int RowIdx = 7;
    //開啟Excel檔 選擇第一個工作表
    _excel = new ExcelWrapper.ExcelWrapper();
    _excel.OpenFile(txtPatch.Text + txtYYMM.Text + "_MPS.xls", txtPass.Text);
    _excel.SelectWorksheet(1);

    // 連接Oracle
    using (System.Data.OracleClient.OracleConnection oraCn = new OracleConnection())
    {
        oraCn.ConnectionString = global::ExcelReporter.Properties.Settings.Default.ConnectionStringApps;
        System.Data.OracleClient.OracleCommand oCm = new OracleCommand();
        oCm.Connection = oraCn;
        oCm.CommandText = @"begin " +
                          @" DBMS_APPLICATION_INFO.SET_CLIENT_INFO(FND_PROFILE.VALUE('ORG_ID')); " +
                          @"end;";
        oraCn.Open();
        oCm.ExecuteNonQuery();
        oCm.Parameters.Add("p_yymm", OracleType.VarChar).Value = txtYYMM.Text;

        oCm.CommandText =
            @"select to_char(ol.request_date,'YYYY/MM/DD') request_date,......略";

        // 利用DataReader將資料寫入Excel
        System.Data.OracleClient.OracleDataReader ord = oCm.ExecuteReader();
        string sOrderNum = "";
        string sDate = "";
        //...略

        while (ord.Read())
        {
            sOrderNum = "";
            sDate = "";
            //...略

            // 需求日
            sDate = ord[0].ToString();

            // 單號
            sOrderNum = ord[1].ToString();
            //...略

            _excel.SetData(RowIdx, ColIdx + 3, sOrderNum);
            _excel.SetData(RowIdx, ColIdx + 5, sDate);
            //...略

            RowIdx++;

            row++;
        }
        ord.Close();
    }

    // Excel存檔
    _excel.Save();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
finally
{
    if (_excel != null)
    {
        // 離開Excel
        _excel.Quit();
        _excel = null;
    }
}

沒有留言: