Naveen
Naveen

Reputation: 119

How to make the .xlsx file download

The below is used to create the .xls file and download the file. I want to download it to .xlsx file. If i simply change the extension into ".xlsx", the report directly opens in the browser. I want it to open in .xlsx extension. Kindly help me.

Below is the code reference for you,

//setting the application path to a variable
   strPath = Server.MapPath("ExcelFiles");
   //Creating a file name 
   strExportPath = "Card" + intRnd.ToString() + intRnd1.ToString() + ".xls";
hidFilePath.Value = "ExcelFiles/" + strExportPath;
//Creating the full path with the filename
strExcelPath = strPath + "\\" + strExportPath;
Session["AK_SC_CRD_EXCEL_PATH"] = strExcelPath;

StreamWriter objStreamWriter = new StreamWriter(strExcelPath, true);
//Write the XL Contents to a stream writer.
objStreamWriter.WriteLine(strXLContents);
objStreamWriter.Close();
objStreamWriter = null;

Thanks.

Upvotes: 0

Views: 5303

Answers (3)

Atur
Atur

Reputation: 1770

Use following code to download Excel:-

 HttpContext context = HttpContext.Current;
        FileStream fs = null;
        BinaryReader br = null;
        byte[] data = null;
        try
        {
            if (File.Exists(filePath))
            {
                FileInfo file = new FileInfo(filePath);

                fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
                br = new BinaryReader(fs, System.Text.Encoding.Default);
                data = new byte[Convert.ToInt32(fs.Length)];
                br.Read(data, 0, data.Length);
                context.Response.Clear();                  
                context.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                context.Response.AddHeader("content-disposition", "attachment; filename=" + file.FullName);                            
                context.Response.AddHeader("Content-Length", file.Length.ToString());
                context.Response.BinaryWrite(data);
                context.Response.Flush();                                   
            }
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }

Upvotes: 0

Taimur Khan
Taimur Khan

Reputation: 531

Adding Following code will force your file download instead of opening in the browser.

Response.AddHeader("content-disposition", "attachment;filename=yourfilename.xlsx");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
/*Add your code here to write file to response stream*/
Response.End();

Upvotes: 0

Kinexus
Kinexus

Reputation: 12904

You may need to add a MIMETYPE for xslx to your response.

.xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

Similar to below;

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

Upvotes: 3

Related Questions