2013-11-26 51 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

相关问题