簡體   English   中英

在 VB.Net 面板中創建 Excel 工作簿

[英]Creating Excel workbook in VB.Net panel

我的 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

    ........

對於遇到任何將excel 2013/2016嵌入自定義控件/面板/表單等中的問題的人,我都有一個問題,即只有在嵌入時,電子表格才無法保持焦點,從而阻止了編輯/鍵入。

在我的情況下,解決方法是刪除我的行

xlsApp.WindowState=XlWindowState.xlMaximized

這是我在面板/用戶控件中最大化它的位置-(我現在在調整大小時只使用MOVEWINDOW)

以下鏈接中的簡單示例有效,因此指出了我的代碼中的問題。

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/85d0972f-9655-48fc-ac5d-0ac7f9acc8b7/problem-with-setparent-api-in-excel-2013?forum=winforms

基本上,我只是不斷注釋掉我的一些代碼,直到它起作用為止。

希望這對某人有幫助。

編輯

關閉功能區,同時將其嵌入會再次出現問題(在嵌入工作正常之前將其關閉)-因此,還有其他一些因素仍然會導致此問題,因此更好地對其進行全面測試。

我的功能區關閉代碼是

xlsApp.ExecuteExcel4Macro("SHOW.TOOLBAR(""Ribbon"",False)") 

在工作表聲明后立即嘗試此操作。 它可能會起作用。

oSheet.UNPROTECT

嗨,我想在面板中獲取 Excel 打印預覽窗口。這是我之前使用的代碼。但它打開了單獨的窗口。

        appXL.Application.WindowState = Excel.XlWindowState.xlMaximized
        appXL.Visible = True
        wbXl.PrintPreview()


        SetParent(appXL.Hwnd, Panel3.Handle)
        SendMessage(appXL.Hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM