asp.net - 将 ExcelPackage 文件发送给用户

标签 asp.net excel file

我想在服务器端构建 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());
}

有什么问题吗?

最佳答案

尝试

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

它对我有用,如图 here .

关于asp.net - 将 ExcelPackage 文件发送给用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14280705/

相关文章:

JavaScript & C# - 如何检查隐藏元素的值

asp.net - .NET Framework 3.5 中有哪些有用的新 ASP.NET 功能?

asp.net - 当用户在文本框中按回车键时,我可以取消回发吗?

Excel 文件混合了日期作为文本和序列号

c# - 如何使用最少的锁定访问文件

c# - 了解 Asp.net Web 服务

VBA 使用循环引用文本框或标签

sql - 从表中选择 8k+ 行的最佳方法

python - 随着时间的推移跟踪文件

ios - 在 iOS 8 中的应用程序中保存文件的默认文件夹是什么