简体   繁体   English

如何使用Excel Interop API冻结列?

[英]How to freeze a column using Excel Interop API?

How do I freeze a column in .NET using Excel's Interop API. 如何使用Excel的Interop API冻结.NET中的列。 Don't care what .Net language you write code in. I tried: 不在乎您使用哪种.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

You need to activate the sheet before you can Freeze panes. 您需要先激活工作表,然后才能冻结窗格。

Add

wsheet.Activate

Before 之前

wsheet.Range(RangeName).Select()

See this Test Sample 查看此测试样本

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM