본문 바로가기

Study/Programming

C# Excel Upload

반응형
public class ExcelService
    {
        MessageUtil msgUtil = new MessageUtil();

        #region Member Values

        private Excel.Application xlApp = null;
        private Excel.Workbook xlWorkBook = null;
        private Excel.Worksheet xlWorkSheet = null;

        #endregion

        #region Constructor

        /// <summary>
        /// Constructor
        /// </summary>
        public ExcelService()
        {
            // 생성자;
        }

        #endregion

        #region Excel Upload

        public string ExcelOpen()
        {
            try
            {
                OpenFileDialog openFile = new OpenFileDialog();
                openFile.Title = "File Open";
                openFile.Filter = "Excel Files|*.xls;*.xlsx|All Files|*.*";
                openFile.RestoreDirectory = true;

                if (openFile.ShowDialog() != DialogResult.OK) return null;

                return openFile.FileName;
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// Excel Uploading
        /// </summary>
        /// <param name="OriColName"> ColumnName </param>
        /// <returns> Excel DataSet </returns>
        public DataSet ExcelUpload(string[] OriColName)
        {
            string strFilePath = null;

            strFilePath = this.ExcelOpen();

            if (string.IsNullOrEmpty(strFilePath)) return null;

            try
            {
                this.xlApp = new Excel.Application();
                this.xlWorkBook = xlApp.Workbooks.Open(strFilePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                                Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                this.xlWorkSheet = (Excel.Worksheet)xlWorkBook.Sheets.get_Item(1);

                this.xlApp.Visible = false;
                this.xlApp.DisplayAlerts = false;
            }
            catch (Exception ex)
            {
                throw ex;
                return null;
            }

            OleDbConnection ODCon = null;
            OleDbCommand ODCmd = null;
            OleDbDataAdapter ODAdt = null;
            DataSet DS = null;

            try
            {
                ODCon = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFilePath + ";Extended Properties='Excel 8.0;HDR=YES'");
                ODCmd = new OleDbCommand("SELECT * FROM [" + xlWorkSheet.Name + "$]", ODCon);
                ODAdt = new OleDbDataAdapter();
                ODAdt.SelectCommand = ODCmd;
                DS = new DataSet();
                ODAdt.Fill(DS);
                ODCon.Close();

                if (OriColName.Count() != 0)
                {
                    for (int iLoop = 0; iLoop < OriColName.Count(); iLoop++)
                    {
                        DS.Tables[0].Columns[iLoop].Caption = DS.Tables[0].Columns[iLoop].ColumnName;
                        DS.Tables[0].Columns[iLoop].ColumnName = OriColName[iLoop];
                    }
                }

                return DS;
            }
            catch (Exception ex)
            {
                throw ex;
                return null;
            }
        }

        #endregion

        #region Excel Memory Kill

        /// <summary>
        /// Excel Process Memory Kill
        /// </summary>
        public void ExcelDispose()
        {
            try
            {
                xlApp.Quit();

                Process[] proc = Process.GetProcessesByName("EXCEL");
                foreach (Process p in proc)
                {
                    if (p.MainWindowTitle == "") p.Kill();
                }

                xlApp = null;
            }
            catch
            {
                return;
            }
        }

        #endregion

    }
반응형