You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用EPPlus与Web API导出Excel遇问题求助

问题分析与解决方案

1. Swagger要求输入参数的原因及解决

你的Export方法使用[HttpPost("Export")],且参数为OverallModel export,但代码中完全未使用该参数。Swagger会依据POST请求的参数定义,要求你传入该模型的内容。

解决方法:

  • 若导出无需任何筛选/输入参数,直接改为[HttpGet("Export")]并移除方法参数:
    [HttpGet("Export")]
    public async Task<IActionResult> Export()
    {
        // 原逻辑保留,去掉参数即可
    }
    
  • 若确实需要通过POST传递筛选条件,确保OverallModel属性有正确绑定特性(如[FromBody]),且在代码中用该参数过滤数据(例如var tasks = await _task.OverallModel.Where(t => ...).ToListAsync();)。

2. 导出失败的类型错误排查

你的代码存在一个明显语法错误,会导致文件名生成异常,进而引发导出失败:

错误点:字符串插值未生效

你写的文件名是:

string excelName = "Tasks-{DateTime.Now:yyyyMMddHHmmss}.xlsx";

这里的{DateTime.Now:...}不会被解析为当前时间,因为缺少字符串插值符号$,最终文件名会是字面量Tasks-{DateTime.Now:yyyyMMddHHmmss}.xlsx,可能导致文件处理异常。

修正为:

string excelName = $"Tasks-{DateTime.Now:yyyyMMddHHmmss}.xlsx";

其他可能的问题排查

  • 数据类型兼容性:确保OverallModel的属性(如Date、actualDate等)能正确写入Excel单元格。对于日期类型,若需格式化可手动转换:
    worksheet.Cells[row, 2].Value = task.Date?.ToString("yyyy-MM-dd");
    
  • MemoryStream处理:你的代码已将stream.Position重置为0,这是正确的,确保文件流从起始位置读取。
  • MIME类型验证:返回的File结果中,"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"是xlsx格式的正确MIME类型,无需修改。

修正后的完整代码示例

[HttpGet("Export")]
public async Task<IActionResult> Export()
{
    var tasks = await _task.OverallModel.ToListAsync();

    using (var package = new ExcelPackage())
    {
        var worksheet = package.Workbook.Worksheets.Add("Sheet1");
        // 表头设置
        worksheet.Cells["A1"].Value = "Id";
        worksheet.Cells["B1"].Value = "Date";
        worksheet.Cells["C1"].Value = "Category";
        worksheet.Cells["D1"].Value = "Actual Date";
        worksheet.Cells["E1"].Value = "Assigned To";
        worksheet.Cells["F1"].Value = "Task";
        worksheet.Cells["G1"].Value = "Duration";
        worksheet.Cells["H1"].Value = "Status";
        worksheet.Cells["I1"].Value = "Priority";

        int row = 2;
        foreach(var task in tasks)
        {
            worksheet.Cells[row, 1].Value = task.Id;
            worksheet.Cells[row, 2].Value = task.Date;
            worksheet.Cells[row, 3].Value = task.category;
            worksheet.Cells[row, 4].Value = task.actualDate;
            worksheet.Cells[row, 5].Value = task.assignedTo;
            worksheet.Cells[row, 6].Value = task.task;
            worksheet.Cells[row, 7].Value = task.timeTaken;
            worksheet.Cells[row, 8].Value = task.status;
            worksheet.Cells[row, 9].Value = task.priority;
            row++;
        }

        worksheet.Cells["A:I"].AutoFitColumns();

        var stream = new MemoryStream();
        package.SaveAs(stream);
        stream.Position = 0;

        string excelName = $"Tasks-{DateTime.Now:yyyyMMddHHmmss}.xlsx";
        return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", excelName);
    }
}

内容的提问来源于stack exchange,提问作者Vengat Ramanan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:57:35