目的: V20305G –[物料清單匯出]鈕 – 套表匯出 / 不套表匯出
- get_SS_FILES - 取得套表檔案
處理說明: 1>依勾選的資料s,當成參數,傳至後端(*.js)
//取得目前所勾選資料,再匯出
for (var i = 0; i < CHK_PK_OBJ.PK_LIST.length; i++) {
cur_rec = CHK_PK_OBJ.ALL_LIST[i];
if (!(JSON.stringify(cur_rec) === '{}')) {
Tmp_DataAry1.push(cur_rec);
}
}
//將目前子畫面的資料(Table)轉成 JSON字串
let Tmp_DataString1 = JSON.stringify(Tmp_DataAry1);
//因為[備註]欄位 有/n .. 等特殊字元 , JSON.stringify 會 Error
var np = {};
np = {
DataString1: Tmp_DataString1,
};
2>取得套表檔案(*.cs)
string Tmp_FName = "V20305_物料清單匯出.xlsx"; //套表的檔案名稱 ,
string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\";
string pathFName = documentPath + Tmp_FName;
FileStream fs = null;
Workbook wk = null;
fs = myfunc.get_SS_FILES(Tmp_FName);
wk = new Workbook();
wk.LoadFromStream(fs);
3>若不用套表(*.cs)
string[] outFieldArray = {"提領編號","交修單號","維修交修單號","工單號碼","序號",
"展BOM件號","展BOM件號名稱","圖號","索引","技令號碼",
"WP","提料件號","零件名稱","記錄項次","需求數量",
"需求單位","更換情形","超量原因","子件工單號碼","子件序號",
"備註","機種","可修件更換原因說明","拆挪LRU交修單號","拆挪子件序號",
"故障現象說明","請料者","狀態"};
for (int i = 0; i < outFieldArray.Length; i++)
{
ws.Range[myfunc.GetExcelPos(i, 0)].Text = outFieldArray[i];
}
string[] outFieldArray = {"提領編號","交修單號","維修交修單號","工單號碼","序號",
"展BOM件號","展BOM件號名稱","圖號","索引","技令號碼",
"WP","提料件號","零件名稱","記錄項次","需求數量",
"需求單位","更換情形","超量原因","子件工單號碼","子件序號",
"備註","機種","可修件更換原因說明","拆挪LRU交修單號","拆挪子件序號",
"故障現象說明","請料者","狀態"};
for (int i = 0; i < outFieldArray.Length; i++)
{
ws.Range[myfunc.GetExcelPos(i, 0)].Text = outFieldArray[i];
}
//取得目前所勾選資料,再匯出
for (var i = 0; i < CHK_PK_OBJ.PK_LIST.length; i++) {
cur_rec = CHK_PK_OBJ.ALL_LIST[i];
if (!(JSON.stringify(cur_rec) === '{}')) {
Tmp_DataAry1.push(cur_rec);
}
}
let Tmp_DataString1 = JSON.stringify(Tmp_DataAry1);
//console.log("Tmp_DataString1:", Tmp_DataString1);
//因為[備註]欄位 有/n .. 等特殊字元 , JSON.stringify 會 Error
var np = {};
np = {
DataString1: Tmp_DataString1,
};
2>*.cs
[HttpPost]
public void Material_XlsOut()
{
//取得參數值
var c = HttpContext.Current;
NameValueCollection nvc = c.Request.Form;
// 1>將 SS_FILES.FBOLD 存成 Local檔案
//取得目前子畫面的欄位值
string Tmp_DataString1 = nvc["DataString1"]; //Tmp_DataString: 將目前子畫面的資料. JSON字串
//將 table 字串轉成 DataTable
//DataTable DataTable1 = (DataTable)JsonConvert.DeserializeObject(Tmp_DataString1, (typeof(DataTable)));
DataTable dt1 = myfunc.JSON2dt(Tmp_DataString1);
string Tmp_Sql = "";
string Tmp_Str = "";
string Tmp_Str1 = "";
string Tmp_RtnMsg;
string Tmp_FName = "V20305_物料清單匯出.xlsx"; //套表的檔案名稱 ,
//documentPath = c:\\inetpub\wwwroot\TLS5\TLSWEB_AMM5\document\
string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\"; //取得實實的路徑
string pathFName = documentPath + Tmp_FName;
//需要擷取大量資料時,DataReader 是很好的選擇,因為資料不會快取至記憶體。
//OracleDataReader reader;
FileStream fs = null;
Workbook wk = null;
//MemoryStream mstream = new MemoryStream();
string FileName = "V20305_物料清單匯出_" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx";
string FileName1 = documentPath + FileName;
MemoryStream mstream = new MemoryStream();
HttpCookie MyCookie;
int row = 0;
try
{
//套表設定 - 欄位寬度佳
// 取得 Template SS_FILES
fs = myfunc.get_SS_FILES(Tmp_FName);
wk = new Workbook();
wk.LoadFromStream(fs);
//2 > 主機.Local檔案 XLS 讀入 FStream
Worksheet ws = wk.Worksheets[0];//獲取第一個工作表
//非套表設定 - 欄位寬度不佳
//string[] outFieldArray = {"提領編號","交修單號","維修交修單號","工單號碼","序號",
// "展BOM件號","展BOM件號名稱","圖號","索引","技令號碼",
// "WP","提料件號","零件名稱","記錄項次","需求數量",
// "需求單位","更換情形","超量原因","子件工單號碼","子件序號",
// "備註","機種","可修件更換原因說明","拆挪LRU交修單號","拆挪子件序號",
// "故障現象說明","請料者","狀態"};
//for (int i = 0; i < outFieldArray.Length; i++)
//{
// ws.Range[myfunc.GetExcelPos(i, 0)].Text = outFieldArray[i];
//}
////AMM_UOC
string Tmp_RPNOAF, Tmp_OGONOAF, Tmp_MRPNOAF, Tmp_SAPNO_, Tmp_SEQOAF;
string Tmp_PN, Tmp_C_NM;
//AMM_UOCD
string Tmp_FIG, Tmp_IND, Tmp_TMNOXX, Tmp_WP, Tmp_FACPN, Tmp_RQCAGE;
string Tmp_C_NM_, Tmp_ITMUOCD, Tmp_NQTYAH, Tmp_C_UNIT, Tmp_RSTHAH, Tmp_RSTHAH_;
string Tmp_OVERAHD, Tmp_FRNOAF_S, Tmp_SN, Tmp_NOTE, Tmp_EIAC, Tmp_FACHRN;
string Tmp_RMRPNOAF, Tmp_RMSBSN, Tmp_FRMK, Tmp_EMPLYID, Tmp_EMPLYID_;
string Tmp_STAUOCD, Tmp_STAUOCD_;
int Tmp_cnt1 = dt1.Rows.Count;
int Tmp_cnt2;
DataTable dt2 = new DataTable();
for (int i = 0; i < dt1.Rows.Count; i++)
{
//PK AMM_FM
Tmp_RPNOAF = dt1.Rows[i]["RPNOAF"].ToString();
Tmp_OGONOAF = dt1.Rows[i]["OGONOAF"].ToString();
Tmp_MRPNOAF = dt1.Rows[i]["MRPNOAF"].ToString();
Tmp_SAPNO_ = dt1.Rows[i]["SAPNO_"].ToString();
Tmp_SEQOAF = dt1.Rows[i]["SEQOAF"].ToString();
Tmp_PN = dt1.Rows[i]["PN"].ToString();
Tmp_C_NM = dt1.Rows[i]["C_NM"].ToString();
Tmp_Sql = " SELECT dense_rank() over(order by A.PN,A.RPNOAF,A.EIAC,A.EI_LCN,A.EI_ALC,A.NHA_LCN,A.NHA_ALC,A.LCN,A.ALC) as RNK, "
+ " A.RPNOAF,A.AMMNO,A.EIAC,A.EI_LCN,A.EI_ALC,A.NHA_LCN,A.NHA_ALC,A.LCN,A.ALC,"
+ " A.PN,A.CAGE,A.NSN,A.RQPN,A.RQCAGE, A.FACPN,"
+ " B.FIG,B.IND,B.TMNOXX,B.WP,B.ITMUOCD, "
+ " B.NQTYAH,B.C_UNIT,B.RSTHAH,B.OVERAHD,B.FRNOAF_S,"
+ " B.SN,B.NOTE,B.EIAC,B.FACHRN,B.RMRPNOAF,B.RMSBSN,"
+ " B.FRMK,B.EMPLYID,B.STAUOCD "
+ " FROM AMM_UOC A, AMM_UOCD B "
+ " WHERE A.RPNOAF = B.RPNOAF "
+ " AND A.EIAC = B.EIAC "
+ " AND A.EI_LCN = B.EI_LCN "
+ " AND A.EI_ALC = B.EI_ALC "
+ " AND A.NHA_LCN = B.NHA_LCN "
+ " AND A.NHA_ALC = B.NHA_ALC "
+ " AND A.LCN = B.LCN "
+ " AND A.ALC = B.ALC "
+ " and B.EFF='Y' ";
//交修單號
if (!myfunc.checkisnull(Tmp_RPNOAF))
{
Tmp_Sql = Tmp_Sql + " AND A.RPNOAF =" + myfunc.AA(Tmp_RPNOAF);
};
dt2 = myfunc.SqlOpen(dt2, Tmp_Sql);
Tmp_cnt2 = dt2.Rows.Count;
for (int j = 0; j < dt2.Rows.Count; j++)
{
//Detail AMM_UOC,AMM_UOCD
Tmp_FIG = dt2.Rows[j]["FIG"].ToString();
Tmp_IND = dt2.Rows[j]["IND"].ToString();
Tmp_TMNOXX = dt2.Rows[j]["TMNOXX"].ToString();
Tmp_WP = dt2.Rows[j]["WP"].ToString();
Tmp_FACPN = dt2.Rows[j]["FACPN"].ToString();
Tmp_RQCAGE = dt2.Rows[j]["RQCAGE"].ToString();
Tmp_Sql = " SELECT C_NM "
+ " FROM SP_BASE@TLS_245 "
+ " WHERE PN=" + myfunc.AA(Tmp_FACPN)
+ " AND CAGE=" + myfunc.AA(Tmp_RQCAGE);
Tmp_C_NM_ = myfunc.SqlValue(Tmp_Sql);
Tmp_ITMUOCD = dt2.Rows[j]["ITMUOCD"].ToString();
Tmp_NQTYAH = dt2.Rows[j]["NQTYAH"].ToString();
Tmp_C_UNIT = dt2.Rows[j]["C_UNIT"].ToString();
Tmp_RSTHAH = dt2.Rows[j]["FIG"].ToString();
//public static string get_KEYCODE_NM(string par_TBLNM, string par_KEY_NAME, string par_KEY_CODE)
Tmp_RSTHAH_ = myfunc.get_KEYCODE_NM("AMM_UOCD", "RSTHAH", Tmp_RSTHAH);
Tmp_OVERAHD = dt2.Rows[j]["OVERAHD"].ToString();
Tmp_FRNOAF_S = dt2.Rows[j]["FRNOAF_S"].ToString();
Tmp_SN = dt2.Rows[j]["SN"].ToString();
Tmp_NOTE = dt2.Rows[j]["NOTE"].ToString();
Tmp_EIAC = dt2.Rows[j]["EIAC"].ToString();
Tmp_FACHRN = dt2.Rows[j]["FACHRN"].ToString();
Tmp_RMRPNOAF = dt2.Rows[j]["RMRPNOAF"].ToString();
Tmp_RMSBSN = dt2.Rows[j]["RMSBSN"].ToString();
Tmp_FRMK = dt2.Rows[j]["FRMK"].ToString();
Tmp_EMPLYID = dt2.Rows[j]["EMPLYID"].ToString();
Tmp_EMPLYID_ = myfunc.getEmp_NM(Tmp_EMPLYID);
Tmp_STAUOCD = dt2.Rows[j]["STAUOCD"].ToString();
Tmp_STAUOCD_ = myfunc.get_KEYCODE_NM("AMM_UOCD", "STAUOCD", Tmp_STAUOCD);
//寫入 EXCEL檔案
row = row + 1;
ws.Range[myfunc.GetExcelPos(0, row)].Text = Tmp_OGONOAF;
ws.Range[myfunc.GetExcelPos(1, row)].Text = Tmp_RPNOAF;
ws.Range[myfunc.GetExcelPos(2, row)].Text = Tmp_MRPNOAF;
ws.Range[myfunc.GetExcelPos(3, row)].Text = Tmp_SAPNO_;
ws.Range[myfunc.GetExcelPos(4, row)].Text = Tmp_SEQOAF;
ws.Range[myfunc.GetExcelPos(5, row)].Text = Tmp_PN;
ws.Range[myfunc.GetExcelPos(6, row)].Text = Tmp_C_NM;
ws.Range[myfunc.GetExcelPos(7, row)].Text = Tmp_FIG;
ws.Range[myfunc.GetExcelPos(8, row)].Text = Tmp_IND;
ws.Range[myfunc.GetExcelPos(9, row)].Text = Tmp_TMNOXX;
ws.Range[myfunc.GetExcelPos(10, row)].Text = Tmp_WP;
ws.Range[myfunc.GetExcelPos(11, row)].Text = Tmp_FACPN;
ws.Range[myfunc.GetExcelPos(12, row)].Text = Tmp_C_NM_;
ws.Range[myfunc.GetExcelPos(13, row)].Text = Tmp_ITMUOCD;
ws.Range[myfunc.GetExcelPos(14, row)].Text = Tmp_NQTYAH;
ws.Range[myfunc.GetExcelPos(15, row)].Text = Tmp_C_UNIT;
ws.Range[myfunc.GetExcelPos(16, row)].Text = Tmp_RSTHAH_;
ws.Range[myfunc.GetExcelPos(17, row)].Text = Tmp_OVERAHD;
ws.Range[myfunc.GetExcelPos(18, row)].Text = Tmp_FRNOAF_S;
ws.Range[myfunc.GetExcelPos(19, row)].Text = Tmp_SN;
ws.Range[myfunc.GetExcelPos(20, row)].Text = Tmp_NOTE;
ws.Range[myfunc.GetExcelPos(21, row)].Text = Tmp_EIAC;
ws.Range[myfunc.GetExcelPos(22, row)].Text = Tmp_FACHRN;
ws.Range[myfunc.GetExcelPos(23, row)].Text = Tmp_RMRPNOAF;
ws.Range[myfunc.GetExcelPos(24, row)].Text = Tmp_RMSBSN;
ws.Range[myfunc.GetExcelPos(25, row)].Text = Tmp_FRMK;
ws.Range[myfunc.GetExcelPos(26, row)].Text = Tmp_EMPLYID_;
ws.Range[myfunc.GetExcelPos(27, row)].Text = Tmp_STAUOCD_;
} // for j=
} // for i=
wk.SaveToStream(mstream, FileFormat.Version2007);
wk.SaveToFile(FileName1, FileFormat.Version2007);
} //try
catch (Exception e)
{
Console.WriteLine(e);
Tmp_Str = "錯誤:匯出檔案失敗,訊息如下:<br>"
+ e.Message;
MyCookie = new HttpCookie("Rtn_Msg", HttpUtility.UrlEncode(Tmp_Str));
HttpContext.Current.Response.Cookies.Add(MyCookie);
HttpContext.Current.Response.End();
}
finally
{
wk.Dispose();
fs.Close();
fs.Dispose();
}
//Tmp_Cnt = 6;
Tmp_Str = "已匯出完成!!(" + row.ToString() + "筆)<br>"
+ "檔案名稱(" + FileName + ")";
MyCookie = new HttpCookie("Rtn_Msg", HttpUtility.UrlEncode(Tmp_Str));
HttpContext.Current.Response.Cookies.Add(MyCookie);
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + "\"");
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.BinaryWrite(mstream.ToArray());
HttpContext.Current.Response.End();
}
沒有留言:
張貼留言