Excel导入DataTable
2014-03-11 12:07
225 查看
[align=left]/// <summary>[/align]
[align=left] /// Excel导入DataTable[/align]
[align=left] /// </summary>[/align]
[align=left] /// <param name="strFileName"> 文件名称</param>[/align]
[align=left] /// <param name="isHead"> 是否包含表头 </param>[/align]
[align=left] /// <param name="iSheet"> Sheet</param>[/align]
[align=left] /// <param name="strErrorMessage"> 错误信息</param>[/align]
[align=left] /// <param name="iRowsIndex"> 导入的Excel的开始行 </param>[/align]
[align=left] /// <returns></returns>[/align]
[align=left] public static System.Data.DataTable GetDataFromExcel( string strFileName, bool isHead, int iSheet,[/align]
[align=left] string strErrorMessage, int iRowsIndex)[/align]
[align=left] {[/align]
[align=left] if (!strFileName.ToUpper().EndsWith(".XLSX"))[/align]
[align=left] {[/align]
[align=left] strErrorMessage = "文件类型与系统设定不一致,请核对!" ;[/align]
[align=left] return null ;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] Microsoft.Office.Interop.Excel. Application appExcel = new Microsoft.Office.Interop.Excel.Application ();[/align]
[align=left] Microsoft.Office.Interop.Excel. Workbook workbookData;[/align]
[align=left] Microsoft.Office.Interop.Excel. Worksheet worksheetData;[/align]
[align=left] [/align]
[align=left] 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,[/align]
[align=left] 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);[/align]
[align=left] [/align]
[align=left] worksheetData = (Microsoft.Office.Interop.Excel. Worksheet)workbookData.Sheets[iSheet];[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] Microsoft.Office.Interop.Excel. Range xlRang = null ;[/align]
[align=left] int iRowCount = worksheetData.UsedRange.Cells.Rows.Count;[/align]
[align=left] int iParstedRow = 0, iCurrSize = 0;[/align]
[align=left] int iEachSize = 1000; // each time you[/align]
[align=left] int iColumnAccount = worksheetData.UsedRange.Cells.Columns.Count;[/align]
[align=left] int iHead = iRowsIndex;[/align]
[align=left] [/align]
[align=left] if (isHead)[/align]
[align=left] iHead = iRowsIndex + 1;[/align]
[align=left] [/align]
[align=left] System.Data. DataTable dt = new System.Data.DataTable();[/align]
[align=left] for (int i = 1; i <= iColumnAccount; i++)[/align]
[align=left] {[/align]
[align=left] if (isHead)[/align]
[align=left] dt.Columns.Add(appExcel.Cells[iRowsIndex, i].FormulaLocal);[/align]
[align=left] else[/align]
[align=left] dt.Columns.Add( "Columns" + i.ToString());[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] object[,] objVal = new object[iEachSize, iColumnAccount];[/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] iCurrSize = iEachSize;[/align]
[align=left] while (iParstedRow < iRowCount)[/align]
[align=left] {[/align]
[align=left] if ((iRowCount - iParstedRow) < iEachSize)[/align]
[align=left] iCurrSize = iRowCount - iParstedRow;[/align]
[align=left] [/align]
[align=left] xlRang = worksheetData.get_Range( "A" + ((int )(iParstedRow + iHead)).ToString(), ((char)('A' + iColumnAccount - 1)).ToString()[/align]
[align=left] + ((( int)(iParstedRow + iCurrSize + 1)).ToString()));[/align]
[align=left] [/align]
[align=left] objVal = ( object[,])xlRang.Value2;[/align]
[align=left] [/align]
[align=left] int iLength = objVal.Length / iColumnAccount;[/align]
[align=left] [/align]
[align=left] for (int i = 1; i < iLength; i++)[/align]
[align=left] {[/align]
[align=left] DataRow dr = dt.NewRow();[/align]
[align=left] for (int j = 1; j <= iColumnAccount; j++)[/align]
[align=left] {[/align]
[align=left] if (objVal[i, j] != null )[/align]
[align=left] {[/align]
[align=left] dr[j - 1] = objVal[i, j].ToString();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] dt.Rows.Add(dr);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] iParstedRow = iParstedRow + iCurrSize;[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] System.Runtime.InteropServices. Marshal.ReleaseComObject(xlRang);[/align]
[align=left] xlRang = null;[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] catch (Exception ex)[/align]
[align=left] {[/align]
[align=left] appExcel.Quit();[/align]
[align=left] strErrorMessage = ex.Message;[/align]
[align=left] return null ;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] appExcel.Quit();[/align]
[align=left] [/align]
[align=left] return dt;[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] /// Excel导入DataTable[/align]
[align=left] /// </summary>[/align]
[align=left] /// <param name="strFileName"> 文件名称</param>[/align]
[align=left] /// <param name="isHead"> 是否包含表头 </param>[/align]
[align=left] /// <param name="iSheet"> Sheet</param>[/align]
[align=left] /// <param name="strErrorMessage"> 错误信息</param>[/align]
[align=left] /// <param name="iRowsIndex"> 导入的Excel的开始行 </param>[/align]
[align=left] /// <returns></returns>[/align]
[align=left] public static System.Data.DataTable GetDataFromExcel( string strFileName, bool isHead, int iSheet,[/align]
[align=left] string strErrorMessage, int iRowsIndex)[/align]
[align=left] {[/align]
[align=left] if (!strFileName.ToUpper().EndsWith(".XLSX"))[/align]
[align=left] {[/align]
[align=left] strErrorMessage = "文件类型与系统设定不一致,请核对!" ;[/align]
[align=left] return null ;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] Microsoft.Office.Interop.Excel. Application appExcel = new Microsoft.Office.Interop.Excel.Application ();[/align]
[align=left] Microsoft.Office.Interop.Excel. Workbook workbookData;[/align]
[align=left] Microsoft.Office.Interop.Excel. Worksheet worksheetData;[/align]
[align=left] [/align]
[align=left] 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,[/align]
[align=left] 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);[/align]
[align=left] [/align]
[align=left] worksheetData = (Microsoft.Office.Interop.Excel. Worksheet)workbookData.Sheets[iSheet];[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] Microsoft.Office.Interop.Excel. Range xlRang = null ;[/align]
[align=left] int iRowCount = worksheetData.UsedRange.Cells.Rows.Count;[/align]
[align=left] int iParstedRow = 0, iCurrSize = 0;[/align]
[align=left] int iEachSize = 1000; // each time you[/align]
[align=left] int iColumnAccount = worksheetData.UsedRange.Cells.Columns.Count;[/align]
[align=left] int iHead = iRowsIndex;[/align]
[align=left] [/align]
[align=left] if (isHead)[/align]
[align=left] iHead = iRowsIndex + 1;[/align]
[align=left] [/align]
[align=left] System.Data. DataTable dt = new System.Data.DataTable();[/align]
[align=left] for (int i = 1; i <= iColumnAccount; i++)[/align]
[align=left] {[/align]
[align=left] if (isHead)[/align]
[align=left] dt.Columns.Add(appExcel.Cells[iRowsIndex, i].FormulaLocal);[/align]
[align=left] else[/align]
[align=left] dt.Columns.Add( "Columns" + i.ToString());[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] object[,] objVal = new object[iEachSize, iColumnAccount];[/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] iCurrSize = iEachSize;[/align]
[align=left] while (iParstedRow < iRowCount)[/align]
[align=left] {[/align]
[align=left] if ((iRowCount - iParstedRow) < iEachSize)[/align]
[align=left] iCurrSize = iRowCount - iParstedRow;[/align]
[align=left] [/align]
[align=left] xlRang = worksheetData.get_Range( "A" + ((int )(iParstedRow + iHead)).ToString(), ((char)('A' + iColumnAccount - 1)).ToString()[/align]
[align=left] + ((( int)(iParstedRow + iCurrSize + 1)).ToString()));[/align]
[align=left] [/align]
[align=left] objVal = ( object[,])xlRang.Value2;[/align]
[align=left] [/align]
[align=left] int iLength = objVal.Length / iColumnAccount;[/align]
[align=left] [/align]
[align=left] for (int i = 1; i < iLength; i++)[/align]
[align=left] {[/align]
[align=left] DataRow dr = dt.NewRow();[/align]
[align=left] for (int j = 1; j <= iColumnAccount; j++)[/align]
[align=left] {[/align]
[align=left] if (objVal[i, j] != null )[/align]
[align=left] {[/align]
[align=left] dr[j - 1] = objVal[i, j].ToString();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] dt.Rows.Add(dr);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] iParstedRow = iParstedRow + iCurrSize;[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] System.Runtime.InteropServices. Marshal.ReleaseComObject(xlRang);[/align]
[align=left] xlRang = null;[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] catch (Exception ex)[/align]
[align=left] {[/align]
[align=left] appExcel.Quit();[/align]
[align=left] strErrorMessage = ex.Message;[/align]
[align=left] return null ;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] appExcel.Quit();[/align]
[align=left] [/align]
[align=left] return dt;[/align]
[align=left] [/align]
[align=left] }[/align]
相关文章推荐
- 让多个DataTable中的数据导入到一个excel中sheet中
- 怎样将Datatable中的数据直接导入到Excel模板上
- DataTable导入导出Excel
- C# 多个DataTable导入到Excel多张Sheet表
- [导入]asp.net 把datatable的数据导出到EXCEL
- 利用npoi把多个DataTable导入Excel多个sheet中
- Excel导入到datatable
- Excel 导入到Datatable 中,再使用常规方法写入数据库
- C#导入Excel到Dataset和导出Excel到DataTable
- 导入EXCEL为DataTable的字符串
- DataTable数据导入Excel(导入到三个工作表)
- Excel导入DataTable的两种方法
- DataTable交换列的位置,Excel导入到数据库中通用方法
- 将excel中的数据导入到DataTable中
- Excel导入DataTable(时间格式有错误)
- Excel导入到DataTable
- C#将DataTable导入到Excel
- 把DataSet或者DataTable里的数据导入Excel中
- 将DataTable 导入Excel并打印
- DataTable导入Excel