|
很久之前写的,把excel放到dt里面
/// <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 System.Data.DataTable GetDataFromExcel(string strFileName, bool isHead, string Sheet,
ref string strErrorMessage, int iRowsIndex)
{
#region Excel导入DataTable
//if (!strFileName.ToUpper().EndsWith(".XLS"))
//{
// 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, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value,Missing.Value);
Worksheet worksheet = (Worksheet)appExcel.ActiveSheet;
worksheetData = (Microsoft.Office.Interop.Excel.Worksheet)workbookData.Sheets[worksheet.Name];
Microsoft.Office.Interop.Excel.Range xlRang = null;
int iRowCount = worksheetData.UsedRange.Cells.Rows.Count;
int iParstedRow = 0, iCurrSize = 0;
int iEachSize = 50000;
int iColumnAccount = worksheetData.UsedRange.Cells.Columns.Count;
int iHead = iRowsIndex;
colindex = iColumnAccount;
if (isHead)
iHead = iRowsIndex+1;
System.Data.DataTable dt = new System.Data.DataTable();
for (int i = 1; i <= iColumnAccount; i++)
{
if (isHead)
{
Range rg = worksheetData.get_Range(worksheetData.Cells[iRowsIndex, i],
worksheetData.Cells[iRowsIndex, i]);
dt.Columns.Add(worksheetData.get_Range(worksheetData.Cells[iRowsIndex, i],
worksheetData.Cells[iRowsIndex, i]).Text.ToString());
}
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(),
NumtoStr(iColumnAccount) + (((int)(iParstedRow + iCurrSize )).ToString()));
//MessageBox.Show(NumtoStr(iColumnAccount));
//xlRang = worksheetData.get_Range("A2", "F20");
objVal = (object[,])xlRang.Value2;
int iLength = objVal.Length / iColumnAccount;
for (int i = 1; i <= iLength; i++)
{
DataRow dr = dt.NewRow();
int NullColumnCount = 0;
for (int j = 1; j <= iColumnAccount; j++)
{
if (objVal[i, j] != null)
{
dr[j - 1] = objVal[i, j].ToString();
}
else
{
NullColumnCount++;
}
}
if (NullColumnCount != iColumnAccount)
{
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;
#endregion
} |
|