c#使用嵌入式资源中的excel文件

c#使用嵌入式资源中的excel文件,c#,C#,我正在为我的女朋友编写一个评分程序,我一直在尝试将数据输出到一个excel文件中,我将该文件嵌入到该程序中。我有它写到一个空白的excel文件目前,但想使用一个预先制作的excel文件,只是将数据导出到适当的单元格。我不知道如何告诉程序使用资源文件夹中的xls文件,而不是生成一个空白的excel文件。以下是迄今为止保存它的代码。我用的是C#2008速成版 谢谢 我的重新来源参考是:Properties.Resources.gradesheet Excel.Application xlApp;

我正在为我的女朋友编写一个评分程序,我一直在尝试将数据输出到一个excel文件中,我将该文件嵌入到该程序中。我有它写到一个空白的excel文件目前,但想使用一个预先制作的excel文件,只是将数据导出到适当的单元格。我不知道如何告诉程序使用资源文件夹中的xls文件,而不是生成一个空白的excel文件。以下是迄今为止保存它的代码。我用的是C#2008速成版

谢谢

我的重新来源参考是:Properties.Resources.gradesheet

Excel.Application xlApp;
        Excel.Workbook xlWorkBook;            
        Excel.Worksheet xlWorkSheet;

        object misValue = System.Reflection.Missing.Value;


        xlApp = new Excel.ApplicationClass();
        xlWorkBook = xlApp.Workbooks.Add(misValue);

        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
        //add data to excel
        xlWorkSheet.Cells[1, 1] = firstName;
        xlWorkSheet.Cells[2, 1] = lastName;




        xlWorkBook.Close(true, misValue, misValue);
        xlApp.Quit();

        releaseObject(xlWorkSheet);
        releaseObject(xlWorkBook);
        releaseObject(xlApp);

您需要从资源中获取excel文件并将其保存到文件中。然后,您可以在工作簿上执行打开操作:

xlApp.Workbooks.Open(fileName);

正如John Koerner所说,Excel可以处理文件,所以您需要先将Excel文件保存到文件中

但是,如果您可以使用.XLSX而不是.XLS,那么最好使用Interop而不是Interop来创建Excel文件。它更简单,并且没有Interop所遇到的所有问题

根据您希望对Excel文件执行的操作以及如何使用它,场景略有不同。你可以:

  • 将流直接传递给支持流作为参数的对象。例如,支持直接从任何流读取excel文件,并可以将对象加载到内存中。然后,您可以操纵该对象并将其写入调用Save方法的文件,传递
    filestream
    filename
  • 通过创建具有正确目标文件名的可写Filestream对象(使用file.OpenWrite),然后调用yourManifestResourceStream.CopyTo(yourFileStream),将流保存到(临时)文件中。然后,您可以将
    文件名
    传递给另一个进程(如Excel)并从文件系统中打开它
首先,您应该使用此函数获取资源文件的流:

 public static Stream GetResourceFileStream(string fileName)
            {
                Assembly currentAssembly = Assembly.GetExecutingAssembly();
                // Get all embedded resources
                string[] arrResources = currentAssembly.GetManifestResourceNames();

                foreach (string resourceName in arrResources)
                {
                    if (resourceName.Contains(fileName))
                    {
                        return currentAssembly.GetManifestResourceStream(resourceName);
                    }
                }

                return null;
            }

然后,您可以使用流或将流保存到文件:。

您可以创建Excel模板文件(
.xlt
),然后基于该模板打开新的
.xls
文件。您好,AB

这应该能帮您解决问题。(在.NET 4.5中测试)


谢谢你的回复,所以绝对没有办法告诉c#使用我的资源中的excel文件作为模板使用,而不首先保存文件?不,excel可以处理文件,所以它需要一个基础文件。您唯一的其他选择是使用excel automation以编程方式创建文件中的所有内容。这并不难,但将文件保存到临时位置并从那里开始工作可能更容易。
public void openExcelTemplateFromResources ()
{
    string tempPath = System.IO.Path.GetTempFileName(); 

    System.IO.File.WriteAllBytes(tempPath, Properties.Resources.excelResource);

    Excel.Application excelApplication = new Excel.Application();
    Excel._Workbook excelWorkbook;
    excelWorkbook = excelApplication.Workbooks.Open(tempPath)

    excelApplication.Visible = true; // at this point its up to the user to save the file
}