使用嵌入资源打开Excel工作簿文件

3

我正在使用Microsoft Office Interop打开Excel文件。该文件放置在一个特殊的文件夹中,Workbook代码从中读取文件。现在,要求是可以将Excel文件放置在任何地方。我相信最好的方法是将Excel文件作为嵌入式资源附加。但如果我将其作为嵌入式资源附加,如何使用Excel workbook读取文件。

_excelapplication.Workbooks.Open(Filename: pExcelTemplatePath);

无论文件在哪里,最佳的读取Excel模板文件的方法是什么?

你想编辑模板还是基于它创建一个新文档? - Yahia
只需基于它创建一个新文档。我将“构建操作”设置为“内容”,现在我可以在发布的文件夹中看到该文件。 - azamsharp
关于 ClickOnce,请参见 http://msdn.microsoft.com/en-us/library/6fehc36e.aspx - 是否需要进一步帮助? - Yahia
2个回答

6
您无法直接从嵌入资源中打开它 - 至少不能使用Interop...。您需要将其保存到文件中 - 例如通过Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceNameOfEmbeddedExcelFile)从资源中读取,然后将该流写入某个位置,例如Environment.SpecialFolder的////。另一个选择是使用能够从流中打开/编辑Excel文件的库 - 如果需要一些库的链接,请告诉我...

我不介意提供那些库的链接,我正在研究一种让人们可以从流中编辑Office文档的方法。 - BigBadOwl
@BigBadOwl 我认为你应该发布一个新的问题... 特别是加上一些额外的背景信息,比如:除了能够从流中打开之外,您需要哪些功能来“让人们编辑Office文档”?哪些办公格式(Excel、Word、PowerPoint...2003和/或2010)? - Yahia

0

首先,您应该使用此函数获取资源文件的流:

 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;
            }

然后您可以将流保存到文件中:如何将流保存到文件中

并打开它:如何在C#中打开Excel文件


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接