2

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

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();

而且它们都不起作用。没有建议存储/打开文件的弹出窗口。

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

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

有什么想法有什么问题吗?

4

1 回答 1

5

尝试

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

它对我有用,如此处所示

于 2013-01-11T15:02:47.650 回答