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

C#如何临时提取加载项目内嵌入的Excel资源文件进行操作

C#提取嵌入Excel资源供Interop调用的实现方案

核心逻辑:Excel Interop仅支持打开本地磁盘的实体文件,无法直接读取程序集内的嵌入流,只需要先将嵌入的Excel资源从程序集读取后写入本地临时目录,拿到文件路径后即可传入你已写好的Interop代码执行操作。

步骤1:确认嵌入资源的完整名称

嵌入资源的命名规则为[项目默认命名空间].[项目内相对路径(文件夹用.分隔)].[带后缀的文件名],比如项目默认命名空间为DemoApp,Excel文件直接放在项目根目录、文件名为数据模板.xlsx,对应资源全名就是DemoApp.数据模板.xlsx。
可以先运行以下代码遍历程序集内所有嵌入资源,定位到你需要的Excel对应的准确资源名,避免硬猜出错:

// 调试时执行,在输出窗口查看所有嵌入资源名称
string[] resourceList = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
foreach (string res in resourceList)
{
    System.Diagnostics.Debug.WriteLine(res);
}

步骤2:提取嵌入资源生成本地临时文件

拿到准确的资源名后,用以下代码将嵌入的Excel流写入系统临时目录,生成可被Interop识别的本地文件:

using System.IO;
using System.Reflection;

// 替换为上一步查到的Excel资源全名
string targetResName = "你的项目命名空间.你的Excel文件.xlsx";
// 生成临时路径,保持文件后缀和原Excel一致,避免Interop格式识别错误
string tempFilePath = Path.Combine(Path.GetTempPath(), $"{Path.GetRandomFileName()}.xlsx");

// 读取资源流写入临时文件
using (Stream resStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(targetResName))
{
    if (resStream == null)
    {
        throw new FileNotFoundException($"未找到指定嵌入Excel资源,请检查资源名配置:{targetResName}");
    }
    using (FileStream fileStream = new FileStream(tempFilePath, FileMode.Create, FileAccess.Write))
    {
        resStream.CopyTo(fileStream);
    }
}

步骤3:传入路径调用原有Interop逻辑

将你原有代码中Workbooks.Open方法的第一个参数替换为上一步生成的tempFilePath即可,其余逻辑无需修改:

Excel.Application objExcel = new Excel.Application();
objExcel.Visible = true;
objExcel.WindowState = Excel.XlWindowState.xlNormal;

Excel.Workbook excelWorkbook = objExcel.Workbooks.Open(tempFilePath,
                0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, 
                "", true, false, 0, true, false, false);

注意事项

  • 如果Excel文件存放在项目的子文件夹中,资源名需要拼接文件夹路径,比如文件放在项目的Resources文件夹下,对应资源名格式为项目命名空间.Resources.文件名.xlsx,优先用步骤1的遍历方法确认名称,不要手动拼接避免出错。
  • 临时文件默认存储在系统Temp目录,若需要程序退出后自动清理,可以在关闭Excel相关进程后调用File.Delete(tempFilePath)删除文件,未关闭Excel时删除会触发文件占用报错。
  • 提前确认文件属性中的「生成操作」已设置为「嵌入的资源」,否则无法通过GetManifestResourceStream读取到对应流。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.04 16:15:41