【问题标题】:How to freeze a column using Excel Interop API?如何使用 Excel 互操作 API 冻结列?
【发布时间】:2013-12-12 20:42:19
【问题描述】:

如何使用 Excel 的互操作 API 在 .NET 中冻结列。不在乎你用什么 .Net 语言编写代码。我试过了:

Public Sub FreezeColumn(ByVal FileName As String, ByVal SheetName As String, ByVal RangeName As String)

    Dim oExcel As Excel.Application = Nothing
        Try
            oExcel = New Excel.Application
            oExcel.Visible = False
            If String.IsNullOrEmpty(RangeName) Then Exit Sub
            oExcel.Workbooks.Open(FileName, False, True)
            oExcel.DisplayAlerts = False

            For Each wsheet As Worksheet In oExcel.ActiveWorkbook.Worksheets
                If wsheet.Name = SheetName Then
                    wsheet.Range(RangeName).Select()
                    oExcel.ActiveWindow.FreezePanes = True
                    Exit For
                End If
            Next

            oExcel.Save()
        Catch ex As Exception
            Throw
        Finally
            If Not IsNothing(oExcel) Then
                If Not IsNothing(oExcel.ActiveWorkbook) Then
                    oExcel.ActiveWorkbook.Close(SaveChanges:=True)
                    ProcessHandler.ExcelDispose(oExcel)
                    oExcel = Nothing
                End If
            End If
        End Try
End Sub

【问题讨论】:

    标签: c# .net vb.net excel


    【解决方案1】:

    您需要先激活工作表才能冻结窗格。

    添加

    wsheet.Activate
    

    之前

    wsheet.Range(RangeName).Select()
    

    查看此测试样本

    Imports Excel = Microsoft.Office.Interop.Excel
    
    Public Class Form1   
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) _ 
        Handles Button1.Click
            Dim oExcel As New Excel.Application
    
            oExcel.Visible = True
    
            oExcel.Workbooks.Open("C:\book1.xls", False, True)
            oExcel.DisplayAlerts = False
    
            For Each wsheet As Excel.Worksheet In oExcel.ActiveWorkbook.Worksheets
                If wsheet.Name = "Sheet1" Then
                    wsheet.Activate()
                    wsheet.Range("A1").Select()
                    oExcel.ActiveWindow.FreezePanes = True
                    Exit For
                End If
            Next
        End Sub
    End Class
    

    【讨论】:

    • 您的代码有效,然后我更改了 oExcel.Visible = False,但它不再有效。
    • 如果你有oExcel.Visible = True 那么它会工作,否则它不会因为你需要窗口处于活动状态。
    • 我无法显示 = True。有什么方法可以通过 Visible = False 实现这一目标?
    • 我不知道。你需要激活它。你可以做的是在冻结之前移动.visible=true,在冻结之后移动.visible=false
    猜你喜欢
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    相关资源
    最近更新 更多