I am using Followin LOC for Export to and Import from Excel sheet in my asp.net application
protected void LinkbuttonExportToExcel_Click(object sender, EventArgs e)
{
UserManager manager = new UserManager();
DataSet dataSet = manager.GetProductDataToExport();
string attachment = "attachment; filename=Report.xls";
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/vnd.ms-excel";
string tab = "";
string tab1 = "";
foreach (DataTable table in dataSet.Tables)
{
foreach (DataColumn column in table.Columns)
{
Response.Write(tab1 + column.ColumnName);
tab1 = "\t";
}
}
tab = "\n";
foreach (DataRow dr in dataSet.Tables[0].Rows)
{
for (int i = 0; i < dataSet.Tables[0].Columns.Count; i++)
{
Response.Write(tab + dr[i].ToString());
tab = "\t";
}
tab = "\n";
}
Response.End();
}
protected void ButtonImportDataFromExcel_Click(object sender, EventArgs e)
{
FileUpload1.PostedFile.SaveAs(Server.MapPath("~/App_Data/ProductImport.xls"));
OleDbConnection objXConn = new OleDbConnection();
objXConn.ConnectionString = ConfigurationManager.ConnectionStrings["sqlXCon"].ConnectionString;
if (objXConn.State == ConnectionState.Closed)
{
objXConn.Open();
}
DataTable dt = new DataTable();
dt = objXConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string excelSheetName = string.Empty; ;
foreach (DataRow row in dt.Rows)
{
excelSheetName = row["TABLE_NAME"].ToString();
}
OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + excelSheetName + "]", objXConn);
OleDbDataReader rd = cmd.ExecuteReader();
UserManager manager = new UserManager();
while (rd.Read())
{
int productId = int.Parse((rd.GetValue(0).ToString()));
string productName = (rd.GetValue(1).ToString());
string productNameHindi = (rd.GetValue(2).ToString());
decimal productPrice = decimal.Parse((rd.GetValue(3).ToString()));
string productStatus = (rd.GetValue(4).ToString());
manager.UpdateProductMasterFromExcelSheet(productId, productName);
}
}
else
{
objXConn.Close();
}
msgBox1.alert("Products updated successfully");
}
}
i am using Following connection string..
<add name="sqlXCon" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source='|DataDirectory|ProductImport.xls';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';" />
The file Report.xls exports succesfully. But the problem is I’m not able to import “Report.xls” , unless i open the file and again save it as .xls. Why this is happening?
The reason this is happening is because you’re not really exporting an Excel file : your LinkbuttonExportToExcel_Click generates a tab separated value file, which can be opened by Excel, but is not an Excel file.
On the other hand, your ButtonImportDataFromExcel_Click function reads from an Excel file (which must then be a real Excel file, and not a TSV)
So you actually have to open it manually and convert it as xls by saving it again.
For that, you could generate your Excel file using Excel.Interop if you have Excel on your server, or use an open source library to generate your excel file.