【问题标题】:Visual Studio 2012: How do I open an excel file that is associated with my project?Visual Studio 2012:如何打开与我的项目关联的 excel 文件?
【发布时间】:2015-07-07 16:00:32
【问题描述】:

所以我正在开发一个使用 excel 文件向用户控件添加“描述”的项目。截至目前,我的代码使用绝对路径打开 excel 文件,就像这样

Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"C:\absolute path\filename.xlsx", Type.Missing, Type.Missing
                                                                 , Type.Missing, Type.Missing, Type.Missing, Type.Missing
                                                                 , Type.Missing, Type.Missing, Type.Missing, Type.Missing
                                                                 , Type.Missing, Type.Missing);

效果很好。

然后我尝试重命名文件(只是为了确保没有因为某些奇怪的原因打开 C:\ 文件)并将其添加到我的项目中,这样我就不必依赖能够访问一个特定的驱动器(即文件可以打开,因为它与项目相关联)。然后我尝试了以下代码:

Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"newfileName.xlsx", Type.Missing, Type.Missing
                                                                 , Type.Missing, Type.Missing, Type.Missing, Type.Missing
                                                                 , Type.Missing, Type.Missing, Type.Missing, Type.Missing
                                                                 , Type.Missing, Type.Missing);

这给了我这个:

“附加信息:'newfileName.xlsx' 找不到。检查文件名的拼写,并验证文件位置是否正确。”

我想知道将 excel 文件添加到项目并使用相对路径名打开它的正确方法是什么?

【问题讨论】:

  • 如果您想将文件与您的项目相关联,那么您需要资源。在这里您可以看到如何将资源添加到您的项目How to create and use resources in .NET
  • 好的,我认为你让我走上了正确的道路。我现在如何打开它?它在那里,但Open 方法需要一个字符串参数,我不知道如何获取路径名。我尝试了Properties.Resources.newfileName.ToString(),这给了我一个“[]System.byte”而不是 newfileName.xlsx
  • 资源是内存流。您必须直接使用流或使用临时路径将流保存在磁盘中并再次加载。看看我的回答。

标签: c# excel visual-studio-2012 relative-path


【解决方案1】:

如果您想将文件与您的项目相关联,那么您需要资源。在这里您可以看到如何将资源添加到您的项目:

How to create and use resources in .NET

资源是流。它们存储在内存中。所以我会推荐你​​使用一个需要 Stream 的类。不是文件的路径。

因为Workbooks.Open 从文件路径创建 Stream。最好寻找直接采用流的重载或替代类。

var doc = SpreadSheetDocument.Open(Properties.Resources.YourFile , isEditable);

isEditable 是布尔值。您可以使用truefalse。如果设置为 false 则为只读。

我建议你看看这个话题:

How to: Open a spreadsheet document from a stream (Open XML SDK)

任何方式如果您想使用您当前的课程。您必须将 Stream 临时保存到磁盘中并从中获取路径。它可以工作,但还有很多额外的工作要做,因为您可以直接使用 Stream。

 string path = Path.GetTempPath(); // Creates a  Temp path for temporary file.
 Properties.Resources.Yourfile.Save(path); // Save the file into path.
 // Now you can use path to load file with xlApp.Workbooks.Open again!
 Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(path,...);

【讨论】:

    【解决方案2】:

    第二个例子是试图在工作目录中打开这个文件。因此,如果您想在构建时复制此文件,只需将此文件的“复制到输出目录”属性更改为“true”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多