代码之家  ›  专栏  ›  技术社区  ›  Mustafa El-assi

将excel模板保存为资源C#Visual Studio的一部分

  •  2
  • Mustafa El-assi  · 技术社区  · 7 年前

    我正在进行我的第一个C#项目,目标是读取配置文件,将读取的数据保存在现有excel模板中,然后将excel文件的副本保存在所需位置。

    解析部分已经成功创建,我还知道如何使用实际的现有excel模板执行此任务,只要我知道它的位置。但我正在努力克服将excel模板作为目录一部分的问题,我的目标是将excel文件作为最终可执行文件的一部分。

    我读过其他类似的问题,但我认为我只是没有足够的经验来理解我真正需要做什么。

    我拥有的:

    using Excel = Microsoft.Office.Interop.Excel;
    using Microsoft.Office.Core;
    Excel excel = new Excel(startupPath + @"\template_hm_mach10x.xlsx", 1);
    

    这就是我创建将使用的excel实例的方式,它是一个现有模板,我已将其放置在/debug文件夹中,以便在原型中使用它。

    然后,我使用

     ws = wb.Worksheets[d.Ws];
     wb.Worksheets[d.Ws].Select();
     ws.Cells[d.Row, d.Col].Value2 = d.Data;
    

    然后使用 excel.SaveAs(saveFileDialog.FileName.ToString());

    我所尝试的

    我已尝试通过以下操作将模板添加到我的解决方案中:

    右键单击“我的解决方案”>添加&燃气轮机;现有项目(>);选择项目

    在那里,我试图查找文件的程序集选项,但在属性中找不到它们:

    Screenshot of all the available File Properties

    我还尝试将其添加到项目中,它给了我“复制到输出”的选项,但我不知道这会对我有什么帮助,也不知道它有什么作用。

    我所研究的

    我曾读到有人将模板保存为某种二进制字符串,然后生成文件并保存在计算机上,这对我来说是一个很好的解决方案,但我从未使用过这个方法,我只是不知道应该如何实现它。我认为这将是最好的解决方案,因为最终用户将无法再访问模板文件,学习如何做到这一点对我来说非常有趣。

    但是,如果这不能解决我的问题,那么我很乐意学习如何使模板文件成为程序的一部分,并能够使用它的相对路径。

    谢谢大家的帮助! 我以前试过问这个问题,但这是我在这个网站上的第一个问题,我想我只是没有很好地准确地问我的问题。

    如果我的代码或IDE的任何部分需要更多信息,我将很乐意在中进行编辑。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Mustafa El-assi    7 年前

    我的回答

    我真的成功了! 我会在这里回复,这样任何面临类似问题的人都可以从中受益

    我学习了如何将文件实现为嵌入式资源,这是如何做到的:

    右键单击您的项目>属性(>);资源

    单击“添加资源”添加文件(>“添加现有文件”

    该文件现在将显示在您的Projectstructure中的Resources下。

    打开文件的属性并选择生成操作“Embedded Resource”

    嵌入的文件将保存在临时位置的临时文件中,并从那里打开,以便在以后进行编辑和保存。将通过将资源流转换为字节数组来填充临时文件,然后将字节数组写入文件中。

    string templatefile = System.IO.Path.GetTempFileName();
    MemoryStream ms = new MemoryStream(); 
    _assembly.GetManifestResourceStream("SwitchConfigReader.Resources.template_hm_mach10x.xlsx").CopyTo(ms);
    Byte[] bArray = ms.ToArray();
    System.IO.File.WriteAllBytes(templatefile, bArray);
    Excel excel = new Excel(templatefile, 1);
    

    然后可以编辑和保存文件

    擅长SaveAs(“path\u and\u name\u of\u Excel\u Doc.xlsx”);

    这正是我现在解决这个问题的方法,我对编程还比较陌生,所以请相信它的价值。

    我希望我今天帮助了别人。