using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace FCM0000 { public partial class fMaterial_Import : Form { DataTable dt = new dsMSSQL.ItemsDataTable();// dsPurchase.PurchaseDataTable(); DataTable dtExcel = new DataTable(); public fMaterial_Import() { InitializeComponent(); this.FormClosed += __Closed; } private void __Load(object sender, EventArgs e) { // TODO: 이 코드는 데이터를 'dsMSSQL.Items' 테이블에 로드합니다. 필요한 경우 이 코드를 이동하거나 제거할 수 있습니다. //this.ta.Fill(this.dsMSSQL.Items); } void __Closed(object sender, FormClosedEventArgs e) { } private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { OpenFileDialog od = new OpenFileDialog(); od.Filter = "excel|*.xlsx|all files|*.*"; od.InitialDirectory = FCOMMON.Util.CurrentPath + "model"; od.FilterIndex = 1; od.RestoreDirectory = true; if (od.ShowDialog() != System.Windows.Forms.DialogResult.OK) return; textBox1.Text = od.FileName; } libxl.Book book;// = new libxl.BinBook(); private void button1_Click(object sender, EventArgs e) { int ColumnNameNo = (int)numericUpDown2.Value; if (textBox1.Text.isEmpty()) { FCOMMON.Util.MsgE("파일을 선택하세요"); textBox1.Focus(); return; } if (!System.IO.File.Exists(textBox1.Text)) { FCOMMON.Util.MsgE("입력하신 파일이 존재하지 않습니다."); textBox1.Focus(); textBox1.SelectAll(); return; } dtExcel.Columns.Clear(); dtExcel.Rows.Clear(); dtExcel.AcceptChanges(); dtExcel.Columns.Add("SID"); dtExcel.Columns.Add("Delete"); dtExcel.Columns.Add("Name"); dtExcel.Columns.Add("Model"); dtExcel.Columns.Add("Unit"); dtExcel.Columns.Add("Memo"); if(book == null) { book = new libxl.XmlBook(); book.setKey(FCOMMON.info.libxlCompany, FCOMMON.info.libxlKey); } try { book.load(textBox1.Text); } catch (Exception ex) { FCOMMON.Util.MsgE(ex.Message); return; } int sheetNum = (int)nudSheetNo.Value; if (sheetNum >= book.sheetCount()) { FCOMMON.Util.MsgE("입력한 시트 번호는 존재하지 않습니다."); book = null; return; } var sheet = book.getSheet(sheetNum); var MaxRow = sheet.lastRow(); var MinRow = sheet.firstRow(); if (MaxRow > nudE.Maximum) { nudE.Maximum = MaxRow; nudS.Maximum = MaxRow; } nudE.Value = MaxRow; //엑셀에서읽어지는 최대값을 설정 MinRow = (int)Math.Max(MinRow, this.nudDispRowMin.Value - 1); MaxRow = (int)Math.Min(MaxRow, this.nudDispRowMax.Value - 1); if (MinRow <= (ColumnNameNo - 1)) { FCOMMON.Util.MsgI("시작줄을 제목줄 보다 커야 합니다. 자동으로 +1 증가합니다."); MinRow = ColumnNameNo; nudS.Value = MinRow; } var MaxCol = sheet.lastCol(); var MinCol = sheet.firstCol(); MaxCol = (int)Math.Min(MaxCol, nudCE.Value - 1); MinCol = (int)Math.Max(MinCol, nudCS.Value - 1); //제목줄을 처리한다. 181029 List cols = new List(); try { for (int r = MinRow; r <= MaxRow; r++) { var v_sid = sheet.readStr(r, 0); var v_cate = sheet.readStr(r, 4); var v_memo = sheet.readStr(r, 23); //이름 var v_name = sheet.readStr(r, 21); if (v_name.isEmpty()) v_name = sheet.readStr(r, 2); if (v_name.isEmpty()) v_name = sheet.readStr(r, 1); //모델 var v_model = sheet.readStr(r, 22); if (v_model.isEmpty()) v_model = sheet.readStr(r, 1); if (v_model.isEmpty()) v_model = sheet.readStr(r, 2); //삭제여부 var v_del = sheet.readStr(r, 8); //이름이나 sid가없으면 처리하지 않음 if (v_name.Trim() == "") continue; //품명과 sid 없는 건 제외 if (v_sid.Trim() == "") continue; DataRow dr = dtExcel.NewRow(); dr["sid"] = v_sid; dr["delete"] = v_del; dr["name"] = v_name; dr["model"] = v_model; dr["unit"] = v_cate; dr["memo"] = v_memo; if (dr != null) { dtExcel.Rows.Add(dr); } } dtExcel.AcceptChanges(); } catch (Exception ex) { FCOMMON.Util.MsgE("불러오는 중 오류 발생\n" + ex.Message); } // // book = null; this.bs.DataSource = dtExcel; this.dataGridView1.DataSource = dtExcel; this.bn.BindingSource = this.bs; if (this.bs.Count < 1) { FCOMMON.Util.MsgE("입력된 자료가 없습니다.\n\n지정된 엑셀의 1번째 칸에 값이 없다면 입력되지 않습니다."); } } private void button3_Click(object sender, EventArgs e) { if (dtExcel == null || dtExcel.Rows.Count < 1) { FCOMMON.Util.MsgE("등록 가능한 자료가 없습니다."); return; } System.Text.StringBuilder sb = new StringBuilder(); sb.AppendLine("다음 자료를 추가하시겠습니까?"); sb.AppendLine(); sb.AppendLine("'저장 완료' 메세지가 나올때 까지 기다려 주세요."); sb.AppendLine(); sb.AppendLine("실행 하려면 '예' 를 누르세요"); var dlg = FCOMMON.Util.MsgQ(sb.ToString()); if (dlg != System.Windows.Forms.DialogResult.Yes) return; dt.Clear(); dt.AcceptChanges(); this.progressBar1.Value = 0; this.progressBar1.Maximum = (int)nudE.Value; // dtExcel.Rows.Count; if (checkBox1.Checked) ta.DeleteImport(textBox2.Text, FCOMMON.info.Login.gcode); int dup = 0; int add = 0; int cnt = 0; int err = 0; //12,13 var dtTarget = new dsMSSQL.ItemsDataTable(); try { var sheet = book.getSheet((int)nudSheetNo.Value); var MinRow = (int)nudS.Value; var MaxRow = (int)nudE.Value; for (int r = MinRow; r <= MaxRow; r++) { cnt += 1; if (this.progressBar1.Value < this.progressBar1.Maximum) this.progressBar1.Value += 1; //화면 업데이트 this.Text = string.Format("{0}/{1} : {2:N2}% 추가:{3},오류:{4},넘김:{5}", r, MaxRow, ((progressBar1.Value * 1.0) / progressBar1.Maximum) * 100.0,add,err,dup); //if(cnt % 10 == 0) Application.DoEvents(); var v_sid = sheet.readStr(r, 0); v_sid = v_sid.Replace("_", "").Replace("-", "").Replace(" ", "").Replace(".", ""); var v_cate = sheet.readStr(r, 4); var v_memo = sheet.readStr(r, 23); //이름 var v_name = sheet.readStr(r, 2); //if (v_name.isEmpty()) v_name = sheet.readStr(r, 2); if (v_name.isEmpty()) v_name = sheet.readStr(r, 1); //모델 var v_model = sheet.readStr(r, 22); if (v_model.isEmpty()) v_model = sheet.readStr(r, 1); if (v_model.isEmpty()) v_model = sheet.readStr(r, 2); //삭제여부 var v_del = sheet.readStr(r, 8); //이름이나 sid가없으면 처리하지 않음 if (v_name.Trim().isEmpty()) continue; //품명과 sid 없는 건 제외 if (v_sid.Trim().isEmpty()) continue; //이 sid 의 중복검사 //중복은 처리하지 않는다. if (ta.ExistSID("EET1P", v_sid) > 0) { //해당 sid데이터가 잇으므로 업데이트를 한다 Boolean disable = v_del == "X" ? true : false; dup += ta.UpdateMatrial(v_name, v_model, v_cate, disable, "EET1P", v_sid); // dup += 1; continue; } try { //데이터추가 var newdr = dt.NewRow() as dsMSSQL.ItemsRow; if (v_name.Length > 180) v_name = v_name.ToString().Substring(0, 170); // continue; //너무긴것도 뺸다. //dtExcel.Columns.Add("SID"); //dtExcel.Columns.Add("Delete"); //dtExcel.Columns.Add("Name"); //dtExcel.Columns.Add("Model"); //dtExcel.Columns.Add("Unit"); //dtExcel.Columns.Add("Memo"); newdr.sid = v_sid; if (v_del == "X") newdr.disable = true; else newdr.disable = false; newdr.name = v_name.Trim(); newdr.cate = v_cate.Trim(); newdr.unit = newdr.cate; newdr.price = 0; newdr.model = v_model.Trim(); newdr.memo = v_memo.Trim(); newdr.scale = 1; newdr.gcode = "EET1P"; newdr.wuid = "DEV"; newdr.wdate = DateTime.Now; //newdr.unit = "--"; newdr.import = textBox2.Text; dt.Rows.Add(newdr); add += ta.Update(newdr); newdr.Delete(); dtTarget.AcceptChanges(); //add += 1; } catch (Exception ex) { err += 1; } //Application.DoEvents(); //DataRow dr = dtExcel.NewRow(); //dr["sid"] = v_sid; //dr["delete"] = v_del; //dr["name"] = v_name; //dr["model"] = v_model; //dr["unit"] = v_cate; //dr["memo"] = v_memo; //실제 추가한다 } FCOMMON.Util.MsgI("Save OK\n중복:" + dup.ToString() + "\n전체:" + cnt.ToString() + "\n에러:" + err.ToString()); } catch (Exception ex) { FCOMMON.Util.MsgE("불러오는 중 오류 발생\n" + ex.Message); } } private void panel1_Paint(object sender, PaintEventArgs e) { } } }