因為同事有支重要的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;
}
}
沒有留言:
張貼留言