å¯¼å ¥Excelå°æ°æ®åºä¸æ¯ä¸ä¸ªå¸¸è§çæä½ï¼è¿ééç¨ä¸¤ç§å®ç°ï¼ä¸ç§æ¯è¾ç®æ´ï¼ä¸ç§ä¾§éæçã
è¿é说æä¸ä¸ï¼å¯¼å ¥çExcelå¯ä»¥å å«å¤ä¸ªsheet,æç»é½å¯¼å ¥å°datasetçåä¸ä¸ªtableä¸ã
ä¸ãç®æ´å®ç°ï¼
    /// <summary>
    /// 导å
¥Excelå°DataSetä¸
    /// </summary>
    /// <param name="strFileSourse">æä»¶çè·¯å¾åæä»¶å
¨åï¼å«æ©å±å</param>
    /// <returns></returns>
    public DataSet ExcelToDataSet(string strFileSourse)
    {
      DataSet ds = new DataSet();
      //Excelæ°æ®æºï¼å
¼å®¹03/10ï¼
      string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strFileSourse + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
      //è¿æ¥
      OleDbConnection conn = new OleDbConnection(strConn);
      try
      {
        conn.Open();
        //è·åExcel䏿æçsheet
        DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
        //æExcel䏿æçsheetæ°æ®è¯»å°ä¸ä¸ªTableä¸
        for (int i = 0; i < dtSheet.Rows.Count; i++)
        {
          string strSheetName = dtSheet.Rows[i]["TABLE_NAME"].ToString();
          OleDbDataAdapter OleDa = new OleDbDataAdapter("select * from [" + strSheetName + "]", conn);
          OleDa.Fill(ds, "TableName");
          conn.Close();
        }
      }
      catch (Exception)
      {
        //System.Windows.Forms.MessageBox.Show(e.ToString());
        throw;
      }
      finally
      {
        if (conn.State!=ConnectionState.Closed)
        {
          conn.Close();
        }
      }
      Â
      return ds;
    }
äºãä¾§éæçï¼
/// <summary>
/// 导å
¥Excelå°DataSetä¸
/// </summary>
/// <param name="strFileUrl">æä»¶çè·¯å¾åæä»¶å
¨åï¼å«æ©å±å</param>
/// <returns></returns>
public DataSet ImportExcel(string strFileUrl)
{
//å建è¿ç¨
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
//è·åMicrosoft.Office.Interop.Excelè¿ç¨å¯å¨ç»æçæ¶é´
afterTime = DateTime.Now;
if (xlApp==null)
{
returnstatue = -1;
returnmessage = "æ æ³å建Microsoft.Office.Interop.Excel.Application对象ï¼è¯·å
æ£æ¥æ¨çè®¡ç®æºæ¯å¦å®è£
äºOfficeï¼";
return null;
}
//夿è¦ä¸ä¼ çæä»¶æ¯å¦æ£å¨è¢«å
¶ä»è¿ç¨ä½¿ç¨
Microsoft.Office.Interop.Excel.Workbook workBook;
try
{
workBook = xlApp.Workbooks.Open(strFileUrl, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, 1, 0);
}
catch (Exception)
{
returnstatue = -1;
returnmessage = "Excelæä»¶å¤äºæå¼ç¶æï¼è¯·ä¿åæ¨çæä»¶åå
³éï¼";
return null;
}
//è·åææSheetåç§°
int intSheetCount = workBook.Worksheets.Count;
//æ ¹æ®sheet个æ°ï¼å®ä¹å串æ°ç»
string[] SheetSet = new string[intSheetCount];
//System.Collections.ArrayList al = new System.Collections.ArrayList();
//è·åExcelä¸çsheetåæ°ç»
for (int i = 0; i < intSheetCount; i++)
{
SheetSet[i - 1] = ((Microsoft.Office.Interop.Excel.Worksheet)workBook.Worksheets[i]).Name;
}
//éæ¾Excelç¸å
³å¯¹è±¡èµæº
workBook.Close(null, null, null);
xlApp.Quit();
if (workBook!=null)
{
//ç³»ç»ä¸å
嫿å¾å¤éæ¾com对象/cacheç常è§çææèµæºçæ¹æ³
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
workBook = null;
}
if (xlApp!=null)
{
//交ç±å
åæç®¡ï¼é©¬ä¸éæ¾èµæºï¼Interopäºæä½ãMarshalæ´é¡¿ï¼
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
xlApp = null;
}
//强å¶CLRæ§è¡å
ååæ¶
GC.Collect();
//è·åäºsheetæ°ç»åï¼ä½ä¸ºæ°æ®æºï¼å°Excelä¸çæ°æ®è¯»åå°DataSetä¸
DataSet ds = new DataSet();
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strFileUrl + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
using (OleDbConnection conn = new OleDbConnection(strConn))
{
conn.Open();
OleDbDataAdapter da;
for (int i = 0; i < intSheetCount; i++)
{
string sql = "select * from ["+SheetSet[i-1]+"+$]";
da = new OleDbDataAdapter(sql, conn);
//å°ææçæ°æ®éé½å¡«å
å°ä¸ä¸ªTableä¸
da.Fill(ds, "Table");
da.Dispose();
}
conn.Close();
conn.Dispose();
}
TODO:鿝Excelè¿ç¨
Kill(xlApp);
return ds;
}
鿝è¿ç¨ï¼
[System.Runtime.InteropServices.DllImport("User32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
private static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
/// <summary>
/// 鿝Excel线ç¨
/// </summary>
/// <param name="excel"></param>
private void Kill(Microsoft.Office.Interop.Excel.Application excel)
{
//å¾å°è¿ä¸ªå¥æï¼å
·ä½ä½ç¨æ¯å¾å°è¿åå
åå
¥å£
IntPtr t = new IntPtr(excel.Hwnd);
int k = 0;
//å¾å°å¯ä¸æ å¿k
GetWindowThreadProcessId(t, out k);
//kçå¼ç¨
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
//å
³ék
p.Kill();
}
以䏿¯ä¸¤ç§ä¸åçå®ç°ï¼ç¬¬äºç§æ´å¤çè°ç¨äºæä½ç³»ç»çæ¥å£ï¼è¿éåªéäºæ¯Windowsæä½ç³»ç»ï¼å æ¬éæ¯è¿ç¨çæ¹æ³ï¼ä¹æ¯è°ç¨äºç³»ç»çæ¥å£ã