【发布时间】:2015-01-28 03:49:25
【问题描述】:
我的 VB.Net 应用程序在我的表单面板中打开 Excel 时遇到问题。我是 .Net 的初学者,所以这个问题可能很简单,虽然我做了很多搜索但没有找到解决方案。
当我在 XP/Excel 2010 机器上运行我的应用程序时,一切正常。我在 Win7/Excel 2013 机器上运行它时遇到了这个问题。不过,我使用的是 Microsoft Excel 15.0 对象库,所以我认为这对 Excel 2013 应该是有益的。
我的表单有两个按钮。其中一个按钮打开一个现有的电子表格,另一个按钮创建一个新的电子表格并添加一些格式。在 Win7/Excel2013 机器上运行应用程序时,我遇到了创建新电子表格的问题(顺便说一下,加载现有电子表格可以正常工作,没有问题)。该代码将打开一个新的电子表格,将其嵌入到面板中,并完成格式化。完成后,我无法更改电子表格中的单元格。就好像它被完全锁定了一样。
当单步执行代码时,我可以看出当代码行设置了 oSheet 的值时,这种行为就开始了。这是我的代码,删掉了很多不适用于这个问题的东西。
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel
Imports Microsoft.Office
Imports Microsoft.Office.Core
Dim oExcel As New Excel.Application
Dim oWB As Excel.Workbook
Dim WithEvents oSheet As Excel.Worksheet
Private Sub btnNewConfig_Click(sender As Object, e As EventArgs) Handles btnNewConfig.Click
'This routine will create a new configuration file.
oExcel.DisplayAlerts = False
oExcel.Workbooks.Add()
oExcel.Application.WindowState = Excel.XlWindowState.xlMaximized
oExcel.Visible = True
'Maximize the Excel window within the panel
SetParent(oExcel.Hwnd, pnlExcel.Handle)
SendMessage(oExcel.Hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
boolFormatExcel = True
oWB = oExcel.ActiveWorkbook
oSheet = oWB.Worksheets("Sheet1")
oSheet.Range("A1").Value = "Address"
oSheet.Range("A1").ColumnWidth = 14
oSheet.Range("B1").Value = "Description"
oSheet.Range("B1").ColumnWidth = 35
........
对我来说奇怪的是,当我打开现有的电子表格时,它仍然以相同的方式设置 oWB 和 oSheet,没有任何问题。这就是我在加载现有配置时的做法,并且可以正常工作...
Private Sub btnLoadConfig_Click(sender As Object, e As EventArgs) Handles btnLoadConfig.Click
'This routine will prompt for a configuration file and load it into the form.
'sExcelFileName = oExcel.GetOpenFilename(FileFilter:="Excel Files,*.xlsx")
dlgOpenFile.Title = "Open a Configuration File"
dlgOpenFile.Filter = "Excel Files|*.xlsx"
dlgOpenFile.FileName = ""
Dim DidWork As Integer = dlgOpenFile.ShowDialog()
sExcelFileName = dlgOpenFile.FileName
If DidWork <> DialogResult.Cancel Then
oExcel.DisplayAlerts = False
oExcel.Workbooks.Open(sExcelFileName)
oWB = oExcel.ActiveWorkbook
oSheet = oWB.Worksheets("Sheet1")
'Check if a valid configuration file is selected. If so, load it. If not, pop up a message to user.
If oSheet.Cells(1, 1).Value = "Address" Then
oExcel.Application.WindowState = Excel.XlWindowState.xlMaximized
oExcel.Visible = True
'Maximize the Excel window
SetParent(oExcel.Hwnd, pnlExcel.Handle)
SendMessage(oExcel.Hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
.......
所以,在我看来,我正在做一些 Excel 2013 不喜欢的事情,但我似乎无法弄清楚它是什么。
感谢您的帮助...
【问题讨论】:
标签: vb.net excel excel-interop excel-2013