发送ExcelPackage文件给用户

我想在服务器端build立ExcelPackage文件,并发送允许用户下载它。 这是我创build文件的代码:

 private byte[] ExcelFileCreate() { using (var excelPackage = new ExcelPackage()) { excelPackage.Workbook.Properties.Author = User.Identity.Name; excelPackage.Workbook.Properties.Title = "Skybot"; excelPackage.Workbook.Properties.Company = "Dataminds"; excelPackage.Workbook.Worksheets.Add("Selected unit folder"); var excelWorksheet = excelPackage.Workbook.Worksheets[1]; excelWorksheet.Name = "Selected unit folder"; int rowIndex = 1; int columnIndex = 1; do { var cell = excelWorksheet.Cells[rowIndex, columnIndex]; var fill = cell.Style.Fill; fill.PatternType = ExcelFillStyle.Solid; fill.BackgroundColor.SetColor(Color.LightGray); columnIndex++; } while (columnIndex != 4); excelWorksheet.Cells[1, 1].Value = "action cell"; excelWorksheet.Cells[1, 2].Value = "time cell"; excelWorksheet.Cells[1, 3].Value = "processor cell"; excelWorksheet.Cells[2, 1].Value = "action cell"; excelWorksheet.Cells[2, 2].Value = "time cell"; excelWorksheet.Cells[2, 3].Value = "processor cell"; return excelPackage.GetAsByteArray(); } } 

并发送给你的用户:

变体1:

 private void FileTransfer(byte[] fileBytes) { //Clear the response Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Response.Cookies.Clear(); //Add the header & other information Response.Cache.SetCacheability(HttpCacheability.Private); Response.CacheControl = "private"; Response.Charset = System.Text.UTF8Encoding.UTF8.WebName; Response.ContentEncoding = System.Text.UTF8Encoding.UTF8; Response.AppendHeader("Content-Length", fileBytes.Length.ToString()); Response.AppendHeader("Pragma", "cache"); Response.AppendHeader("Expires", "60"); Response.AppendHeader("Content-Disposition", "attachment; " + "filename=\"ExcelReport.xlsx\"; " + "size=" + fileBytes.Length.ToString() + "; " + "creation-date=" + DateTime.Now.ToString("R") + "; " + "modification-date=" + DateTime.Now.ToString("R") + "; " + "read-date=" + DateTime.Now.ToString("R")); Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; //Write it back to the client Response.BinaryWrite(fileBytes); Response.End(); Response.ContentType = "application/vnd.ms-excel"; Response.AppendHeader("content-disposition", "attachment;filename=test.xlsx"); Response.BinaryWrite(fileBytes); Response.End(); } 

变体2:

  Response.ContentType = "application/vnd.ms-excel"; Response.AppendHeader("content-disposition", "attachment;filename=test.xlsx"); Response.BinaryWrite(fileBytes); Response.End(); 

变体3:

  Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", fileBytes)); Response.AppendHeader("Content-Length", fileBytes.Length.ToString()); Response.BinaryWrite(fileBytes); Response.End(); 

而他们都没有工作。 没有build议存储/打开文件的popup窗口。

应该使其工作的事件处理程序:

 protected void TreeViewUnit_OnContextMenuItemClick(object sender, RadTreeViewContextMenuEventArgs eventArgs) { FileTransfer(ExcelFileCreate()); } 

任何想法有什么不对?

尝试

 Response.Clear(); Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("content-disposition", "attachment; filename=ExcelReport.xlsx"); Response.BinaryWrite(fileBytes); Response.End(); 

它适用于我这里所示。