【问题标题】:Excel row locking from .Net来自.Net的Excel行锁定
【发布时间】:2011-08-18 05:33:41
【问题描述】:

我正在从代码生成 Excel 电子表格。我正在尝试使用 .net 代码自定义单元格, 我想锁定标题行,这样它就不允许在这些单元格中输入文本。

我尝试了两种方法都没有成功

  1. worksheet.Range("A1", "A1").EntireRow.Locked = True

  2. worksheet.Unprotect()
    worksheet.Range("A1","A100").Locked = True
    worksheet.Protect()

这是我在这里缺少的东西吗?

---代码---

Public Sub CreatNewExcelWithAppliedRules(ByVal noOfWSheets As List(Of String))

    Dim misValue As Object = System.Reflection.Missing.Value
    Dim App As New Application
    Dim workbook As Workbook = App.Workbooks.Add()
    Dim worksheet As Worksheet = workbook.Worksheets(1)
    Dim sFile As String = "sample-excel"
    
 
    ---READ HEADERS FROM XML
    Dim xmlFile = "E:\ExcelPOC\ExcelValidation\App_Data\Headers.xml"
    Dim fsReadXml As New System.IO.FileStream(xmlFile, System.IO.FileMode.Open)
    dsHeaders.ReadXml(fsReadXml)
    dtHeader = dsHeaders.Tables("Column")

    ---ADD HEADERS LIST TO EXCEL
    FillColumnHeader(worksheet, dtHeader, culture)

    worksheet.Unprotect()
    ---ADD VALIDATION RULES
    For Each worksheet In workbook.Worksheets
        ListValidExcelRule(worksheet)
        DateValidExcelRule(worksheet)
        TextLengthValidExcelRule(worksheet)
        DecimalValidExcelRule(worksheet)
    Next
    worksheet.Range("1:1").Locked = True
    worksheet.Protect()

    ---SAVE THE EXCEL
     sFile = App.GetSaveAsFilename(InitialFilename:=sFile, FileFilter:="xls Files  (*.xls), *.xls")

    If sFile <> "False" Then
        workbook.SaveAs(Filename:=sFile, _
                              FileFormat:=XlFileFormat.xlWorkbookNormal, _
                              Password:="", _
                              WriteResPassword:="", _
                              ReadOnlyRecommended:=False, _
                              CreateBackup:=False)
    Else
        App.DisplayAlerts = False
    End If

    workbook.Close(True, misValue, misValue)
    App.Quit()
    releaseObject(worksheet)
    releaseObject(workbook)
    releaseObject(App)

End Sub

【问题讨论】:

  • 您是否收到任何错误,或者只是没有阻止对该行的编辑?
  • 我没有收到任何错误。它没有应用锁定并允许输入文本

标签: .net excel


【解决方案1】:

A1:A100 是左侧列。 A1:IV1 是顶行。您的两次尝试都很接近。

试试:

worksheet.Cells.Locked = False
worksheet.Range("1:1").Locked = True
worksheet.Protect

在新的 Excel 工作表中,默认情况下所有单元格都被锁定。除非您先解锁整个工作表,否则最好选择要解锁的单元格而不是要锁定的单元格。

【讨论】:

  • 我试过上面的,但它仍然允许在标题中输入文本
  • 当我将 worksheet 替换为 worksheets(1) 时,这对我有用。您可能需要根据生成 Excel 文件的方式更改索引。
  • whorksheets 通常存储为工作表的集合,您需要告诉它您希望锁定哪个工作表
  • 上面的代码锁定了“Sheet3”那个太完整的表。我只想锁定顶行标题
  • 我认为问题在于循环For Each worksheet In workbook.Worksheets。循环更改worksheet 的值。当worksheet 已被循环更改时,.Locked = True 行位于此循环之外。把锁码移到循环里面,或者再写worksheet = workbook.Worksheets(1)
猜你喜欢
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
相关资源
最近更新 更多