目的: V80202I: 整機抽換紀錄匯出- 匯出XLS, 套表
V80202K: F16V_CHECK - 匯出XLS, 不套表(直接填寫報表標題)
處理說明: 1>匯出套表 - V80202I: 整機抽換紀錄匯出 (SS_FILES)
2>匯出不套表 - V80202K: F16V_CHECK匯出 (直接寫XLS欄位標題)
一.套表 - 匯出 xls
1>*.js
// 專案別(PROJID)
var cmp_sub_PROJID = get_cmp_txt1('專案別', 'sub_PROJID', 80, 110);
var cmp_pick_sub_PROJID = get_pick_btn0('挑選專案別', 'sub_btn_PROJID',
'../api/V80202IAPI/get_sub_PROJIDPick',
['PROJID'], ['sub_PROJID'], J_pickstore_sub_PROJID, J_pickcolumns_sub_PROJID);
cmp_sub_PROJID.items.push(cmp_pick_sub_PROJID);
var np = {};
np["PROJID"] = Ext.getCmp("sub_PROJID").getValue();
np["ACNO_"] = Ext.getCmp("sub_ACNO_").getValue();
Ext.getCmp('s_form').submit({
url: '../../api/V80202IAPI/XlsOut',
method: 'POST',
async: false,
standardSubmit: true, //若要傳送檔案至前端, standardSubmit必需設為 true
params: np,
});
//顯示結果訊息..
var mask = new Ext.LoadMask(Ext.getBody(), {
msg: '處理中,請稍待...'
});
mask.show();//使用 mask 需手動呼叫show() 方法下
//每1秒檢核一次,是否已完成, 若已完成,則不再檢核
var timer = setInterval(function () {
var r = r_cookies('EX_DFile');
//console.log("r_cookies=", r);
if (!checkisnull(r)) {
mysuccessalert(r);
clearInterval(timer);
mask.hide();
timer = null;
}
}, 1000); //1000ms = 1sec
} // end of function Call_V120602B() {
2>*.cs
// 1>將 SS_FILES.FBOLD 存成 Local檔案 - 因為需讀取 BODY , 所以需 conn , 透過 reader 讀取
OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));//
OracleCommand cmd = new OracleCommand();
conn.Open();
conn.ClientInfo = User.Identity.Name;
conn.ModuleName = BaseSYS + "_" + BaseMODID;
conn.ActionName = ActionName;
cmd.Connection = conn;
string Tmp_Str = "";
string Tmp_FName = "V80202_整機抽換紀錄_匯出格式.xlsx"; //套表的檔案名稱 ,
//documentPath = c:\\inetpub\wwwroot\TLS5\TLSWEB_AMM5\document\
string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\"; // 取得實實的路徑
string pathFName = documentPath + Tmp_FName;
//需要擷取大量資料時,DataReader 是很好的選擇,因為資料不會快取至記憶體。
OracleDataReader reader;
Workbook wk = null;
MemoryStream mstream = new MemoryStream();
string FileName = "V80202_整機抽換紀錄_匯出格式_" + Tmp_PROJID +"_"+Tmp_ACNO_+ ".xlsx";
string FileName1 = documentPath + FileName;
HttpCookie MyCookie;
try
{
wk = new Workbook();
//1>將 SS_FILES. FBODY , 存至Local目錄.檔案
if (File.Exists(pathFName))
{
File.Delete(pathFName);
}
Tmp_Sql = " SELECT FNAME,FBODY "
+ " FROM SS_FILES "
+ " WHERE 1 = 1 "
+ " AND FNAME = " + myfunc.AA(Tmp_FName);
cmd.CommandText = Tmp_Sql;
reader = cmd.ExecuteReader();
byte[] file = null;
//FileMode.OpenOrCreate: 開啟檔案若無檔案則新增
//FileAccess.ReadWrite: 允許檔案讀取/寫入
FileStream fs = File.Open(pathFName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
BinaryWriter bw = new BinaryWriter(fs);
if (reader.HasRows)
{
if (reader.Read())
{
file = (byte[])reader["FBODY"];
//fs.Write(file,0,50000);
bw.Write(file);
wk.LoadFromStream(fs);
bw.Close();
fs.Close();
}
}
二.不套表 - 匯出 xls
1>*.cs
wk = new Workbook();
Worksheet ws = wk.Worksheets[0];//獲取第一個工作表
//共 6 欄, Card# Noum 區域 工單情況 工號 版本
//不套表 , 匯出欄位標題
string[] outFieldArray = { "Card #","Noum","區域", "工單情況", "工號", "版本",};
for (int i = 0; i < outFieldArray.Length; i++)
{
ws.Range[myfunc.GetExcelPos(i, 0)].Text = outFieldArray[i];
}
DataTable dt = new DataTable();
Tmp_Sql = "SELECT PLANCARD,Noum,ACAREA,STAT,SAPNO,ED,ACNO "
+ " FROM "
+ : ;
dt = myfunc.SqlOpen(dt, Tmp_Sql);
Tmp_Cnt = dt.Rows.Count;
//Tmp_Str = "已匯出完成!! ("+Tmp_Cnt.ToString() +"筆) ";
for (int i = 0; i < dt.Rows.Count; i++)
{
//Card# Noum 區域 工單情況 工號 版本
//PLANCARD,NOUM,ACAREA ,STAT ,SAPNO,ED,ACNO
ws.Range[myfunc.GetExcelPos(0, i + 1)].Text = dt.Rows[i]["PLANCARD"].ToString();
ws.Range[myfunc.GetExcelPos(1, i + 1)].Text = dt.Rows[i]["NOUM"].ToString();
沒有留言:
張貼留言