• 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;
    
            }
    

      

  • 相关阅读:
    SQL语句 基本查询
    NHibernate 映射基础(第三篇) 简单映射、联合主键
    NHibernate 数据查询之Linto to NHibernate (第八篇)
    NHibernate 组件基础 (第六篇)
    SQL Server聚合函数
    NHibernate 集合映射深入 (第五篇) <set>,<list>,<map>,<bag>
    2020年10月笔记
    亚马逊云服务器aws配置ssl https证书
    namecheap mx记录配置邮箱
    为 PHPer 准备的 Go 入门知识
  • 原文地址:https://www.cnblogs.com/yixiaozi/p/3844318.html
Copyright © 2020-2023  润新知