导出数据到excel文件2003,2007及以上

我正在使用这些连接string,具体取决于文件的扩展名:

对于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”的文件。 打开文件之前,validation该文件是否已损坏并且来自受信任的来源。 你想现在打开文件吗?

这是因为连接string?

试试这个代码上传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();