c# - 如何在 Asp.net 2.0 C# 中显示另存为对话框?

标签 c# asp.net excellibrary

我正在使用 ExcelLibrary 生成动态 Excel 工作表。效果非常好。

代码

    //create new xls file
    string file = Server.MapPath("Discussion_Board_Report.xls");
    Workbook workbook = new Workbook();
    Worksheet worksheet = new Worksheet("Report");
    worksheet.Cells[0, 0] = new Cell("COMM 226 Case Discussions Report");

    worksheet.Cells[4, 0] = new Cell("Student ID");
    worksheet.Cells[4, 1] = new Cell("User Name");
    worksheet.Cells[4, 2] = new Cell("Case 1");
    worksheet.Cells[4, 3] = new Cell("Case 2");
    worksheet.Cells[4, 4] = new Cell("Case 3");
    worksheet.Cells[4, 5] = new Cell("Topics");
    worksheet.Cells[4, 6] = new Cell("Replies");

    workbook.Worksheets.Add(worksheet);
    workbook.Save(file);

问题

此代码的问题是,它将文件保存在服务器中。我无法在 C://中保存文件,因为 Windows 希望允许我在未经用户许可的情况下保存!我希望用户选择自己的文件路径。如何提示“另存为”对话框?

最佳答案

看起来您正在使用 EPPlus,它在 ExcelPackage 对象上有一个 Stream 属性,我相信您可以使用它来写入响应流。我添加了一些与我过去用于下载文件的代码类似的代码。

然后,我将此逻辑放入我链接到的页面的页面加载中。

ExcelPackage package = new ExcelPackage();
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Name Here");
///worksheet logic


var msArray = package.Stream;
var response = HttpContext.Current.Response;
response.Clear();
response.ClearHeaders();
response.ContentType = "application/vnd.ms-excel";
response.AddHeader("Content-Disposition", "attachment; filename={0}.xls".FormatWith(reportName));
response.AddHeader("Content-Length", msArray.Length.ToString());
response.OutputStream.Write(msArray, 0, msArray.Length);
response.Flush();
response.End();

关于c# - 如何在 Asp.net 2.0 C# 中显示另存为对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12199905/

相关文章:

java - 从 Excel 工作表中读取的代码不起作用

C#跨线程操作无效,2个控件和2个独立线程

c# - 如何使用 C# 将多个 A4 PDF 合并为 A3 PDF

c# - Visual Studio 2010 设计器文件未更新

c# - ASP.NET - 动态更改样式表

vb.net - 如何在 vb.net 的 MVC 4 中创建并返回带有 Controller 的 Excel 文件?

c# - 无法打开用 excelLibrary 生成的 excel 文件

c# - CEF 上的 WebRTC (getUserMedia) 不工作。但它适用于 Chrome。有任何想法吗?

C# 操作 JSON 数据

c# - 在 ASP.NET 中使用 Response.write 生成文件时使用 updateprogress