阅读多个Excel表格到C#

Excel 2003 = literature.xls
表格:线卡,数据,小册子和提示

using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Data.OleDb; public partial class literature : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { LoadGrid(0); } protected void grd_PageIndexChanging(object sender, GridViewPageEventArgs e) { LoadGrid(e.NewPageIndex); } void LoadGrid(int LineCards) { String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Server.MapPath("literature\\literature.xls") + ";" + "Extended Properties=Excel 8.0;"; // Create connection object by using the preceding connection string. OleDbConnection objConn = new OleDbConnection(sConnectionString); // Open connection with the database. objConn.Open(); // The code to follow uses a SQL SELECT command to display the data from the worksheet. // Create new OleDbCommand to return data from worksheet. OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [LineCards$]", objConn); // Create new OleDbDataAdapter that is used to build a DataSet // based on the preceding SQL SELECT statement. OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(); // Pass the Select command to the adapter. objAdapter1.SelectCommand = objCmdSelect; // Create new DataSet to hold information from the worksheet. DataSet objDataset1 = new DataSet(); // Fill the DataSet with the information from the worksheet. objAdapter1.Fill(objDataset1, "XLData"); // Bind data to DataGrid control. grd.DataSource = objDataset1.Tables[0].DefaultView; grd.PageIndex = LineCards; grd.DataBind(); // Clean up objects. objConn.Close(); } } 

你将需要为每个文件执行一次这个代码。 本质上,只是创build一个function来照顾它,只是传递你的connectionString(或其任何元素的变化)函数。 这假定您正在查询的所有文件都有您正在查找的正确数据。

这里是一个函数的例子,以及如何调用它。

 //I don't know what values LineCards is supposed to be, so I am just passing 5, 6, and 7. //Put these calls where your LoadGrid() call is currently. assignExcelSheetToGrid (Server.MapPath("literature\\literature.xls"), grd, 5); assignExcelSheetToGrid (Server.MapPath("literature\\literature2.xls"), grd2, 6); assignExcelSheetToGrid (Server.MapPath("literature\\literature3.xls"), grd3, 7); 

而function….我假设你的第一个function工作,所以我只是重新使用你的代码。 如果您的原始function为一个网格工作,此代码应适用于任何数字。

 function assignExcelSheetToGrid(string thePath, YOURGRIDTYPE theGrid, int LineCards){ ///This replaces LoadGrid function //Make sure you change YOURGRIDTYPE (Above) to the type of grid you are passing String theConnString= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + thePath + ";Extended Properties=Excel 8.0;"; OleDbConnection objConn = new OleDbConnection(theConnString); objConn.Open(); OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [LineCards$]", objConn); OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(); objAdapter1.SelectCommand = objCmdSelect; DataSet objDataset1 = new DataSet(); objAdapter1.Fill(objDataset1, "XLData"); theGrid.DataSource = objDataset1.Tables[0].DefaultView; theGrid.PageIndex = LineCards; theGrid.DataBind(); objConn.Close(); } 

UPDATE

函数现在需要文件path而不是整个连接string。

这是正确的代码..它运行成功..

protected void bttnUpload_Click(object sender,EventArgs e){

  if (fupUploadData.HasFile) { try { ///Your connectionstrings here... string path = string.Concat(Server.MapPath("~/Files/" + fupUploadData.FileName)); fupUploadData.SaveAs(path); txtUploadData.Text = Server.MapPath(fupUploadData.FileName); string excelConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 8.0", path); OleDbConnection connection = new OleDbConnection(); connection.ConnectionString = excelConnectionString; OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection); connection.Open(); DbDataReader dr = command.ExecuteReader(); string consString = ConfigurationManager.ConnectionStrings["mRetailerEntities"].ConnectionString; SqlBulkCopy bulkInsert = new SqlBulkCopy(consString); bulkInsert.DestinationTableName = "offer_master"; bulkInsert.WriteToServer(dr); lblMsg.Text = "File uploaded Successfully"; } catch (Exception ex) { Response.Write(ex.Message); } finally { con.Close(); con.Dispose(); } } }