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