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

EPPlus导出MemoryStream时抛出Invalid SchemaName: None异常求助

EPPlus导出MemoryStream时抛出"Invalid schemaname: none"异常的解决

问题

修改仅包含工作表及表头的预填充Excel文件,尝试返回MemoryStream时,代码抛出System.ArgumentException: Invalid schemaname: none异常,已遵循EPPlus教程及规范仍未解决。

示例代码

public static MemoryStream GetMemoryStreamExcel(DataSet dsModel, string modelFileLocation)
{
    MemoryStream ms;
    FileInfo existingModelFile = new FileInfo(modelFileLocation);
    byte[] result = new byte[0];

    using (ExcelPackage p = new ExcelPackage(existingModelFile))
    {
        foreach (DataTable table in dsModel.Tables)
        {   
            var sheet = p.Workbook.Worksheets[table.TableName];
            
            sheet.Cells["A2"].LoadFromDataTable(table, PrintHeaders: false);
            //sheet.Cells["A2"].Value = "Test Of File";
        }
        ms = new MemoryStream(p.GetAsByteArray());
    };
    return ms;
}

解决方法

  • 修正DataTable的SchemaName:这个异常的核心原因是DataTable的SchemaName被设置为了"none",而EPPlus的LoadFromDataTable方法会验证SchemaName的合法性。在循环处理DataTable前,给它指定一个合法的Schema名称即可:
    foreach (DataTable table in dsModel.Tables)
    {
        // 替换无效的SchemaName
        if (table.SchemaName == "none" || string.IsNullOrWhiteSpace(table.SchemaName))
        {
            table.SchemaName = "default"; // 可自定义合法名称,比如"dbo"
        }
        var sheet = p.Workbook.Worksheets[table.TableName];
        sheet.Cells["A2"].LoadFromDataTable(table, PrintHeaders: false);
    }
    
  • 排查DataSet来源:如果DataSet来自数据库查询,检查是否是查询逻辑导致SchemaName异常;如果是手动构建的DataTable,确认初始化时没有错误设置SchemaName属性。
  • 升级EPPlus版本:部分旧版本EPPlus对SchemaName的校验逻辑存在问题,升级到最新稳定版可能直接解决该异常。

内容的提问来源于stack exchange,提问作者Diogo Basilio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:32:17