Excel导入到datatable

  /// <summary>
        /// Excel导入DataTable
        /// </summary>
        /// <param name="strFileName"> 文件名称</param>
        /// <param name="isHead"> 是否包含表头 </param>
        /// <param name="iSheet"> Sheet</param>
        /// <param name="strErrorMessage"> 错误信息</param>
        /// <param name="iRowsIndex"> 导入的Excel的开始行 </param>
        /// <returns></returns>
        public static System.Data.DataTable GetDataFromExcel( string strFileName, bool isHead, int iSheet,
           string strErrorMessage, int iRowsIndex)
        {
            if (!strFileName.ToUpper().EndsWith(".XLSX"))
            {
                strErrorMessage = "文件类型与系统设定不一致,请核对!" ;
                return null ;
            }

            Microsoft.Office.Interop.Excel. Application appExcel = new Microsoft.Office.Interop.Excel.Application ();
            Microsoft.Office.Interop.Excel. Workbook workbookData;
            Microsoft.Office.Interop.Excel. Worksheet worksheetData;

            workbookData = appExcel.Workbooks.Open(strFileName, System.Reflection. Missing.Value, System.Reflection.Missing .Value, System.Reflection.Missing.Value, System.Reflection. Missing.Value, System.Reflection.Missing .Value,
                     System.Reflection. Missing.Value, System.Reflection.Missing .Value, System.Reflection.Missing .Value, System.Reflection.Missing.Value, System.Reflection. Missing.Value, System.Reflection.Missing .Value, System.Reflection.Missing.Value);

            worksheetData = (Microsoft.Office.Interop.Excel. Worksheet)workbookData.Sheets[iSheet];


            Microsoft.Office.Interop.Excel. Range xlRang = null ;
            int iRowCount = worksheetData.UsedRange.Cells.Rows.Count;
            int iParstedRow = 0, iCurrSize = 0;
            int iEachSize = 1000;   // each time you
            int iColumnAccount = worksheetData.UsedRange.Cells.Columns.Count;
            int iHead = iRowsIndex;

            if (isHead)
                iHead = iRowsIndex + 1;

            System.Data. DataTable dt = new System.Data.DataTable();
            for (int i = 1; i <= iColumnAccount; i++)
            {
                if (isHead)
                    dt.Columns.Add(appExcel.Cells[iRowsIndex, i].FormulaLocal);
                else
                    dt.Columns.Add( "Columns" + i.ToString());
            }


            object[,] objVal = new object[iEachSize, iColumnAccount];
            try
            {
                iCurrSize = iEachSize;
                while (iParstedRow < iRowCount)
                {
                    if ((iRowCount - iParstedRow) < iEachSize)
                        iCurrSize = iRowCount - iParstedRow;

                    xlRang = worksheetData.get_Range( "A" + ((int )(iParstedRow + iHead)).ToString(), ((char)('A' + iColumnAccount - 1)).ToString()
                        + ((( int)(iParstedRow + iCurrSize + 1)).ToString()));

                    objVal = ( object[,])xlRang.Value2;

                    int iLength = objVal.Length / iColumnAccount;

                    for (int i = 1; i < iLength; i++)
                    {
                        DataRow dr = dt.NewRow();
                        for (int j = 1; j <= iColumnAccount; j++)
                        {
                            if (objVal[i, j] != null )
                            {
                                dr[j - 1] = objVal[i, j].ToString();
                            }

                        }

                        dt.Rows.Add(dr);
                    }

                    iParstedRow = iParstedRow + iCurrSize;

                }
                System.Runtime.InteropServices. Marshal.ReleaseComObject(xlRang);
                xlRang = null;

            }
            catch (Exception ex)
            {
                appExcel.Quit();
                strErrorMessage = ex.Message;
                return null ;
            }

            appExcel.Quit();

            return dt;

        }

  

posted @ 2014-07-15 11:14  Toby Wang  阅读(408)  评论(0编辑  收藏  举报