Asp.net WebApi分配单元格-导出和下载Excel

cnwbcb6i  于 2023-02-05  发布在  .NET
关注(0)|答案(3)|浏览(201)

我使用Aspose.Cells创建excel文件。
实际上,我试图将xls文件保存到磁盘上,但无法解决这个问题。这是我的get方法。

[Route("xls")]
    [HttpGet]
    public HttpResponseMessage Export()
    {
        try
        {
            string dataDir = KnownFolders.GetPath(KnownFolder.Downloads);
            //var workbook = TransferService.Export();  //TODO get xml
            Workbook workbook = new Workbook();              
            var stream = workbook.SaveToStream();   

            // I need save this workbook

            return Request.CreateResponse(HttpStatusCode.OK); //it's not important here
        }
        catch (Exception ex)
        {

            return Request.CreateResponse(HttpStatusCode.InternalServerError); //it's not important here
        }
    }

我还有一个叫做onClick的函数

function exportToXls() {
    $.get(exportURI, function (response) {
        return response;
    });
}

当有人点击它应该保存在他的磁盘上的文件(或打开浏览器,我可以选择的地方和名称)。如何解决这个问题?

uttx8gqw

uttx8gqw1#

    • C#**
[Route("xls")]
    [HttpPost] // can use Get, but Post seems to be recommended
    public HttpResponseMessage Export()
    {
        var response = new HttpResponseMessage();

        try
        {
            // Create workbook
            var wb = new Workbook();

            /* ** fill in workbook / worksheet content ** */

            // save workbook to MemoryStream
            var stream = new MemoryStream();
            wb.Save(stream, SaveFormat.Xlsx);
            stream.Position = 0;    // important!

            // add stream to response
            response.Content = new StreamContent(stream);

            // set Headers
            response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(dispositionType: "attachment"); // or "inline"
            response.Content.Headers.ContentDisposition.FileName = wb.FileName; // or other means of getting filename
            response.Content.Headers.ContentType = new MediaTypeHeaderValue(mediaType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.Content.Headers.ContentLength = stream.Length;

            // set the success code
            response.StatusCode = HttpStatusCode.OK;
        }
        catch(Exception ex)
        {
            response.StatusCode = HttpStatusCode.InternalServerError;
            response.Content = null; // just in case
            response.ReasonPhrase = ex.Message;
        }

        return response;
    }

如果启用了CORS,则可能需要允许Content-Disposition标题:

public static void Register(HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute(origins: "*", headers: "*", methods: "*");
        cors.ExposedHeaders.Add(item: "Content-Disposition");
        config.EnableCors(cors);

        /* The rest of WebAPI configuration */
    }

对于Javascript端--the answer here may help.(注意:确保将方法设置为POST,或者将我的示例更改为GET。)

abithluo

abithluo2#

在ASP.NET中,你可以通过下面的代码将你的XLS或XLSX文件发送到浏览器。

    • C#**
//Save file and send to client browser using selected format
if (yourFileFormat == "XLS")
{
      workbook.Save(HttpContext.Current.Response, "output.xls", ContentDisposition.Attachment, new XlsSaveOptions(SaveFormat.Excel97To2003));

}
else
{
      workbook.Save(HttpContext.Current.Response, "output.xlsx", ContentDisposition.Attachment, new OoxmlSaveOptions(SaveFormat.Xlsx));
}

HttpContext.Current.Response.End();

上面的代码将发送XLS文件到浏览器。如果你改变此行

if (yourFileFormat == "XLS")

变成了

if (yourFileFormat == "XLSX")

然后它会发送XLSX文件到浏览器。2请从下面的链接下载ASP.NET Web应用程序项目来查看上面的代码运行。

    • 项目链接:**
http://www.aspose.com/community/forums/293730/postattachment.aspx

请不要使用**Workbook. SaveToStream()**方法获取内存流对象。请检查以下代码,如何获取不同格式的内存流对象,如XLS,XLSX等。

//Create workbook object
Workbook wb = new Workbook("source.xlsx");

//This is how to save Workbook to XLS format
MemoryStream ms1 = new MemoryStream();
wb.Save(ms1, SaveFormat.Excel97To2003);

//Just to check if memory stream is good and contains XLS bytes
byte[] b1 = ms1.ToArray();
File.WriteAllBytes("output.xls", b1);

//This is how to save Workbook to XLSX format
MemoryStream ms2 = new MemoryStream();
wb.Save(ms2, SaveFormat.Xlsx);

//Just to check if memory stream is good and contains XLSX bytes
byte[] b2 = ms2.ToArray();
File.WriteAllBytes("output.xlsx", b2);
  • 注意:我是Aspose的开发人员宣传员 *
rekjcdws

rekjcdws3#

使用.net,因此使用File操作结果对Andews版本进行了轻微调整。

[HttpGet("download")]
    public async Task<IActionResult> DownloadSystem()
    {
        var workbook = new Workbook();
        var fileName = $"Report.xlsx";
        var cd = new System.Net.Mime.ContentDisposition
        {
            FileName = fileName,
            Inline = false, 
        };
        Response.Headers.Add("Content-Disposition", cd.ToString());
        var stream = new MemoryStream();
        workbook.Save(stream, SaveFormat.Xlsx);
        stream.Position = 0;
        return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName);
    }

相关问题