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; } 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("Cate"); dtExcel.Columns.Add("Name"); dtExcel.Columns.Add("Model"); dtExcel.Columns.Add("Memo"); dtExcel.Columns.Add("Delete"); dtExcel.Columns.Add("Name0"); dtExcel.Columns.Add("Name1"); dtExcel.Columns.Add("Name2"); libxl.Book book;// = new libxl.BinBook(); 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)numericUpDown1.Value; if (sheetNum >= book.sheetCount()) { FCOMMON.Util.MsgE("입력한 시트 번호는 존재하지 않습니다."); book = null; return; } var sheet = book.getSheet(sheetNum); var MaxRow = sheet.lastRow(); var MinRow = sheet.firstRow(); MaxRow = (int)Math.Min(MaxRow, nudE.Value-1); MinRow = (int)Math.Max(MinRow, nudS.Value-1); if(MinRow <= (ColumnNameNo-1)) { FCOMMON.Util.MsgI("시작줄을 제목줄 보다 커야 합니다. 자동으로 +1 증가합니다."); MinRow = ColumnNameNo ; } 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_model = sheet.readStr(r, 22); var v_name0 = sheet.readStr(r, 21); var v_name1 = sheet.readStr(r, 2); var v_name2 = sheet.readStr(r, 1); var v_del = sheet.readStr(r, 8); var v_name = v_name0; if (v_name == "") v_name = v_name1; if (v_name == "") v_name = v_name2; if (v_name.Trim() == "") continue; //품명과 sid 없는 건 제외 if (v_sid.Trim() == "") continue; DataRow dr = dtExcel.NewRow(); dr["sid"] = v_sid; dr["cate"] = v_cate; dr["memo"] = v_memo; dr["model"] = v_model; dr["name"] = v_name; dr["name0"] = v_name0; dr["name1"] = v_name1; dr["name2"] = v_name2; dr["delete"] = v_del; 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 = dtExcel.Rows.Count; if (checkBox1.Checked) ta.DeleteImport(textBox2.Text); int cnt = 0; //12,13 foreach (DataRow dr in dtExcel.Rows) { cnt += 1; if(cnt % 1000 == 0) { ta.Update((dsMSSQL.ItemsDataTable)dt); dt.AcceptChanges(); Application.DoEvents(); } this.progressBar1.Value += 1; //데이터추가 var newdr = dt.NewRow() as dsMSSQL.ItemsRow; if (dr[0] == DBNull.Value) continue; //nullerror if (dr[2].ToString().Length > 180) continue; //너무긴것도 뺸다. newdr.sid = dr[0].ToString(); newdr.cate = dr[1].ToString(); newdr.name = dr[2].ToString(); newdr.model = dr[3].ToString(); newdr.memo = dr[4].ToString(); if(dr[5].ToString() == "X") newdr.disable=true; else newdr.disable =false; newdr.wuid = "DEV"; newdr.wdate =DateTime.Now; newdr.unit = "--"; newdr.import = textBox2.Text; dt.Rows.Add(newdr); } ta.Update((dsMSSQL.ItemsDataTable)dt); dt.AcceptChanges(); FCOMMON.Util.MsgI("Save OK"); } private void panel1_Paint(object sender, PaintEventArgs e) { } } }