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