我正在使用Microsoft Office Interop打开Excel文件。该文件放在一个特殊的文件夹中,Workbook代码从该文件夹中读取文件。现在,要求是Excel文件可以放在任何地方。我认为最好的方法是将Excel文件作为嵌入式资源附加。但如果我作为嵌入式资源附加,我将如何使用Excel工作簿读取该文件。
_excelapplication.Workbooks.Open(Filename: pExcelTemplatePath);
无论文件的位置如何,读取Excel模板文件的最佳方法是什么?
答案 0 :(得分:6)
您无法直接从嵌入式资源中打开它 - 至少不能使用Interop ...
您需要将其作为文件保存在某个地方 - 即首先从资源中读取它(例如通过Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceNameOfEmbeddedExcelFile)
),然后将该流写入某个位置,如ApplicationData
/ CommonApplicationData
/ LocalApplicationData
/ MyDocuments
/ CommonDocuments
from Environment.SpecialFolder
另一种选择是使用能够从流中打开/编辑Excel文件的库 - 如果您需要一些指向库的链接,请告诉我......
答案 1 :(得分: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;
}
然后您可以将流保存到文件:How do I save a stream to a file。