首页 > 解决方案 > 无法通过 C# 保存 excel 文件

问题描述

我使用 C# 制作了一个 API,并使用 is 作为我的 Angular 项目的后端。我的任务是通过一个以角度制作的按钮将数据保存为我的页面中的 excel 文件。逻辑在后端。我已经尝试了一切来实现这一点,但似乎没有任何效果。我现在正在使用 EPPlus,使用 SaveAs 方法,将 excel 包转换为字节数组。

所以这是我在 C# 中的功能

public IHttpActionResult CreateExcelDocument()
    {
        //Creates a blank workbook. Using statement disposes the package.
        using (var p = new ExcelPackage())
        {
            var result = new MemoryStream();

            List<Hero> heroes = new List<Hero>();
            var documents = collection.Find(new BsonDocument()).ToList();
            foreach (BsonDocument docum in documents)
            {
                heroes.Add(BsonSerializer.Deserialize<Hero>(docum));
            }

            //Adding worksheet
            var ws = p.Workbook.Worksheets.Add("Heroes");

            //To set values in the spreadsheet use the Cells indexer.
            ws.Cells["A1"].Value = "ID";
            ws.Cells["B1"].Value = "Name";

            for(var row = 1; row <= heroes.Count(); row++)
            {
                ws.Cells[row, 1].LoadFromCollection(heroes[row].Id);
                ws.Cells[row, 2].LoadFromCollection(heroes[row].Name);
            }

            var stream = new MemoryStream(p.GetAsByteArray());

            //string filePath = @"c:\workbooks\myworkbook.xlsx";
            //FileInfo template = new FileInfo(filePath);
            //MemoryStream outputStream = new MemoryStream();
            p.SaveAs(stream);

            return Ok(stream);
        }
    }

这是如何获得它的角度

saveDocument(): Observable<any> {
return this.http.get<any>(this.heroesUrl)
  .pipe(
    tap(p => this.log('saved excel document' + p)),
    catchError(this.handleError<any>('saveDocument', []))
  );
}

我制作了一个消息组件来显示我的 API 请求的状态,因此使用 saveDocument 我得到了这个: HeroService: saved excel document[object Object],[object Object],[object Object],[object Object],[object对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象]

我正在使用 MongoDB、Angular 8 和 ASP.NET Web API 2 (C#)

编辑:这是角度的按钮

<button (click)="saveDocument()"> Save heroes </button>

标签: c#excelangularmongodbasp.net-web-api

解决方案


如果您已经有了字节数组,为什么不简单地使用呢?SaveAs 命令仅适用于给定的 Workbook 对象,您可以在此处查看 ( https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.tools.excel.workbook.saveas?view=vsto -2017 )

File.WriteAllBytes(filename, stream);

编辑:从这里获取并适应您的问题的答案:另存为使用 EPPlus?

byte[] data = p.GetAsByteArray();

string path = @"C:\test1.xlsx";
File.WriteAllBytes(path, data);

推荐阅读