在读/写模式下打开Excel文件的VB问题

背景:我正在使用Microsoft.Office.Interop.Excel库打开,处理和保存Excel窗体程序中的Excel文件。 由于我不会完全进入的原因,我需要任何时候在屏幕上显示的信息是最小的,所以我使用DataTables和DataGridViews来操纵存储在Excel文件中的信息。 我可以插入和编辑信息就好了,但我的问题是保存。

我的问题:

当试图使用WorkBook.Save()函数保存回到Excel文件时,在Excel中打开文件时不会反映这些更改。 作为一个testing,我尝试了.SaveAs()函数来查看出现了什么问题,并得到了原始文件以只读模式打开的错误。 我使用.SaveCopyAs()函数来确保我的信息输出正确,保存的副本包含我所做的更改。

我尝试了任何和所有只读和保存属性,我可以find每种可能的组合,以下两个属性似乎解决了大多数其他人的问题,但不会为我工作。

xlWorkBook = xlApp.Workbooks.Open(currFile, IgnoreReadOnlyRecommended:=True, ReadOnly:=False) 

我的代码是分布在几个function,因为我使用button和菜单项来操作程序,但它遵循相同的工作stream程从本网站的保存示例,除了我设置xlApp.Visible = False : http:// www。 siddharthrout.com/2012/09/12/saving-and-closing-the-excel-file-savesave-as-method/ 。

我会很感激任何帮助。

编辑:忘了提及,我正在使用Excel 2010和Visual Studio 2015与VB窗体窗体应用程序模板。

我find了我的问题的答案。 我能够通过移动TnTinMn代码的行,以我的开放方法,以可读/写或只读模式可靠地打开文件。 这不是一个运行excel的鬼实例,至less不是真的:当它仍然用另一个方法在同一个程序中打开时,你不能以读/写模式打开一个文件。 我发现打开一个文件的方法看起来或多或less是这样的(这是一个非常简化的版本,因此与我处理文件时相比,这将是一个更为明显的问题):

 If openFileDialog1Result = System.Windows.Forms.DialogResult.OK Then Try myStream = openFileDialog1.OpenFile() If myStream IsNot Nothing Then wb = DirectCast(Marshal.BindToMoniker(currFile), Excel.Workbook) : wb.Application.Visible = True : wb.Application.UserControl = True : wb.Windows(1).Visible = True 'Do work End If Catch Ex As Exception MessageBox.Show("Cannot read file from disk. Original error: " & Ex.Message) Finally ' Check this again, since we need to make sure we didn't throw an exception on open. If myStream IsNot Nothing Then myStream.Close() End If End Try End If 

现在我知道问题是什么了,我感觉好像应该明显的是,如果我试图通过Excel.Workbook.Open()或其他任何方法来存储文件,而我仍然打开它与openFileDialog1.OpenFile() ,当然它只能打开在只读。 不幸的是我没有赶上这个更快,因为我比以前的例子更多的事情。 我发现我甚至不需要为我的目的使用stream,我的代码现在遵循这个结构:

 If openFileDialog1Result = System.Windows.Forms.DialogResult.OK Then Try currFile = openFileDialog1.FileName wb = DirectCast(Marshal.BindToMoniker(currFile), Excel.Workbook) : wb.Application.Visible = True : wb.Application.UserControl = True : wb.Windows(1).Visible = True Catch Ex As Exception MessageBox.Show("Cannot read file from disk. Original error: " & Ex.Message) End Try End If 

我非常感谢所有的帮助,我很抱歉把你们全部带走了。