在C#中读取Excel

我有这样的C#代码。

xlWorkBook = xlApp.Workbooks.Open("data.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 

我有.exe所在的data.xls文件。

当我编译,然后运行.exe,我收到错误,无法finddata.xls。

我做错了什么?

如果你的xls总是和你的.exe文件位于同一个位置,你可以使用它来得到一个不会被硬编码到build目录的path:

 string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string path = Path.Combine(directory, "data.xls"); 

默认情况下,Excel假定指定文件的文件夹是用户的“我的文档”目录。 如果该文件不存在,则尝试打开文件将失败。

通过指定文件的绝对path,可以确保正在拾取正确的文件。 确保文件存在。

例如-

 //file is in D:\TestFolder, and its called abc.xlsx xlApp.Workbooks.Open( @"D:\TestFolder\abc.xlsx", .... 

希望能帮助到你。

其他答案显示如何使用保存在特定位置的文件的绝对path。

除非你改变了你的项目设置,否则当你的C#应用​​程序被构build时,它将被构build在项目下的bin / debug(或bin / release)文件夹中。 当您从IDE运行时,这是您的应用程序的当前工作目录。

尝试使用绝对path,或将data.xls文件移动到应用程序的bin / debug文件夹中。

当您指定绝对path时,请确保在string前加一个@符号以避开斜线。 string path = @“c:\ data \ excel \ data.xls”;

更新:如果你需要使用相对path,我会得到基于相对path的绝对path:

 FileInfo fileInfo = new FileInfo("data.xls"); String path = fileInfo.FullName; 

这可能更适合获取基于.exe位置的完整path,因为即使CWD与.exe位置不同,它也可以工作。

这取决于你如何运行你的应用程序。 是什么让你认为应用程序正在运行在可执行文件所在的同一目录下? 很可能你只是忘了把工作目录设置正确。 怎么做? 看到这个问答 。

我认为这是Excel文件的位置的问题。 应用程序的工作目录不在.exe文件所在的位置,但可能位于bin / debug文件夹中。