带有 Silverlight 的 EPPlus

EPPlus with Silverlight

我正在用 EPPlus 库创建一个 excel 文件,我想将它下载到客户端。

这里有一个 EPPlus 的例子

ExcelPackage pck = new ExcelPackage();
var ws = pck.Workbook.Worksheets.Add("Sample1");

ws.Cells["A1"].Value = "Sample 1";
ws.Cells["A1"].Style.Font.Bold = true;
var shape = ws.Drawings.AddShape("Shape1", eShapeStyle.Rect);
shape.SetPosition(50, 200);
shape.SetSize(200, 100);
shape.Text = "Sample 1 saves to the Response.OutputStream";

pck.SaveAs(HttpContext.Current.Response.OutputStream);
HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
HttpContext.Current.Response.AddHeader("content-disposition", "attachment;  filename=Sample1.xlsx");

此代码创建 xls 文件并允许从 aspx 页面将其下载到客户端。 我试图从 my.aspx 页面请求带有 'HttpWebRequest' class 的 xls 文件,但我收到一条错误消息 'Operation is not valid due to the current state of the object'。

如何从服务器下载这个xls文件到客户端?

做一个 BinaryWrite 可能更好。这是我的做法:

HttpContext.Current.Response.Clear(); 
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.Charset = "";
HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=myfilename.xlsx");
HttpContext.Current.Response.AddHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
HttpContext.Current.Response.BinaryWrite(pck.GetAsByteArray());
HttpContext.Current.Response.Flush();