2013-11-26 70 views
3

我使用這些連接字符串,根據文件的擴展名:數據導出到Excel文件2003年,2007年及以上

爲2003:Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;

爲2007:Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;

這裏是獲得連接。

string con_excel = ""; 

     switch (Extension.ToLower()) 
     { 
      case ".xls": 
       con_excel = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString; 
       break; 

      case ".xlsx": 
       con_excel = ConfigurationManager.ConnectionStrings["Excel07ConString"].ConnectionString; 
       break; 
     } 
     con_excel = con_excel.Replace("filename", filePath); 

以下是生成excel文件的代碼。

 Excel.Application oXL; 
     Excel._Workbook oWB; 
     Excel._Worksheet oSheet; 

     oXL = new Excel.Application(); 
     oXL.Visible = false; 

     oXL.SheetsInNewWorkbook = 1; 
     oWB = (Excel._Workbook)(oXL.Workbooks.Add()); 
     oSheet = (Excel._Worksheet)oWB.ActiveSheet; 

     try 
     { 
      string[] colNames = new string[dataTable.Columns.Count]; 

      int col = 0; 

      foreach (DataColumn dc in dataTable.Columns) 
       colNames[col++] = dc.ColumnName; 

      char lastColumn = (char)(65 + dataTable.Columns.Count - 1); 

      oSheet.get_Range("A1", lastColumn + "1").Value2 = colNames; 
      oSheet.get_Range("A1", lastColumn + "1").Font.Bold = true; 
      oSheet.get_Range("A1", lastColumn + "1").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter; 

      DataRow[] dr = dataTable.Select(); 

      string[,] rowData = new string[dr.Count<DataRow>(), dataTable.Columns.Count + 1]; 

      int rowCnt = 0; 
      foreach (DataRow row in dr) 
      { 
       for (col = 0; col < dataTable.Columns.Count; col++) 
       { 
        rowData[rowCnt, col] = row[col].ToString(); 
       } 
       rowCnt++; 
      } 
      rowCnt++; 
      oSheet.get_Range("A2", lastColumn + rowCnt.ToString()).Value = rowData; 

      oXL.Visible = false; 
      oXL.UserControl = true; 

      String sNewFolderName = "Report_" + intReportId; 
      filename = Server.MapPath("Your Report\\" + sNewFolderName + DateTime.Now.ToString("dd-MM-yyyy_hh-mm-ss") + Extension); 
      oSheet.SaveAs(filename); 

      System.Runtime.InteropServices.Marshal.ReleaseComObject(oWB); 

      oXL.Quit(); 

      Marshal.ReleaseComObject(oSheet); 
      Marshal.ReleaseComObject(oWB); 
      Marshal.ReleaseComObject(oXL); 

      oSheet = null; 
      oWB = null; 
      oXL = null; 
      GC.GetTotalMemory(false); 
      GC.Collect(); 
      GC.WaitForPendingFinalizers(); 
      GC.Collect(); 
      GC.GetTotalMemory(true); 

      //The excel is created and opened for insert value. We most close this excel using this system   
      Process[] localByName = Process.GetProcessesByName("EXCEL"); 
      foreach (Process process in localByName) 
      { 
       process.Kill(); 
      } 

2007文件格式沒問題。

我試着上傳了2003年(的.xls)Excel文件,然後還產生2003(.xls)格式。但是當我打開該文件時,出現以下錯誤。

文件你想在非指定的文件擴展名不同的格式打開「FileName.xls」。在打開文件之前,驗證該文件是否已損壞並且來自受信任的來源。你想現在打開文件嗎?

是連接字符串這一點,因爲?

+0

你的連接字符串是不完整的。未封閉的報價? – Raptor

回答

0

試試這個代碼上傳Excel 2003和2007年文件

if (filenam.ToString() == ".xls") 
    { constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathnam + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\""; } 
    else if (filenam.ToString() == ".xlsx") 
    { constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathnam + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\""; } 
    else { Response.Write("<script>alert('Load Excel file Only')</script>"); } 
    string Qry = "SELECT [Customer], [Project], [Contact], [Designation], [Phone], [EmailID],[Region] FROM [Sheet1$]"; 
    OleDbConnection conn = new OleDbConnection(constr); 
    if (conn.State == ConnectionState.Closed) 
    { 
    conn.Open(); 
    OleDbCommand cmd = new OleDbCommand(Qry, conn); 
    OleDbDataAdapter da = new OleDbDataAdapter(); 
    da.SelectCommand = cmd; 
    DataTable dt = new DataTable(); 
    da.Fill(dt); 
    if (dt != null && dt.Rows.Count > 0) 
    { 
    gv_upload.DataSource = dt; 
    gv_upload.DataBind(); 
    } 
    da.Dispose(); conn.Close(); conn.Dispose(); 
+0

非常感謝,Senthilkumar。我已經關閉連接字符串,並確定上傳文件。我的問題是在2003年(.xls)格式生成excel文件。當我打開生成的Excel文件時,我得到了錯誤。 – Lamin

+0

你得到了什麼錯誤 – SK2185

+0

您試圖以不同於指定文件擴展名的格式打開「FileName.xls」的文件。在打開文件之前,驗證該文件是否已損壞並且來自受信任的來源。你想現在打開文件嗎? – Lamin

相關問題