使用C#阻止Excel列

问题描述

我正在使用C#开发Windows窗体应用程序。在此应用程序中,用户将单击一个按钮,然后程序将从剪贴板复制一些列和行,并将它们粘贴到新的Excel工作簿上,用户可以在其中编辑信息。 在Excel中,我只想阻止一列ID,以便用户可以编辑除以下内容以外的所有单元格 该列,因为该列是系统生成的。我无法使其正常运行。下面是我的代码

        DataObject dataObj = null;
        dataGridView1.SelectAll(); // copying data to clipboard
        dataObj = dataGridView1.GetClipboardContent(); // 

        if (dataObj != null)
            Clipboard.SetDataObject(dataObj);

        object misValue = System.Reflection.Missing.Value;
        xlexcel = new Microsoft.Office.Interop.Excel.Application();
        xlexcel.displayFullScreen = true;

        Microsoft.Office.Interop.Excel.Range CR = xlWorkSheet.get_Range("A1","A1");
        CR.Select();
        xlWorkSheet.PasteSpecial(CR,Type.Missing,false);

        // for example block column A only
        xlWorkSheet.Range["A1"].EntireColumn.Style.Locked = true; 
         
        // protect the sheet
        xlWorkSheet.Protect(Type.Missing,true,Type.Missing);

我的问题是,运行此代码然后取消保护工作表之后,用户仍然可以编辑A列。是否有办法保护我仅保护A列而不进行编辑? 我正在使用Microsoft.Office.Interop.Excel版本15和.Net Framework 4.5.1

我们非常感谢您的帮助。

解决方法

在这里尝试一下。我不知道问题出在哪里,但这可能会有所帮助。

        DataObject dataObj = null;
        dataGridView1.SelectAll(); // copying data to clipboard
        dataObj = dataGridView1.GetClipboardContent(); // 

        if (dataObj != null)
            Clipboard.SetDataObject(dataObj);

        object misValue = System.Reflection.Missing.Value;
        xlexcel = new Microsoft.Office.Interop.Excel.Application();
        xlexcel.DisplayFullScreen = true;

        Microsoft.Office.Interop.Excel.Range CR = xlWorkSheet.get_Range("A1","A1");
        CR.Select();
        xlWorkSheet.PasteSpecial(CR,Type.Missing,false);

        // for example unblock columns B - Z only
        xlWorkSheet.Range("B1","Z1").EntireColumn.Locked = false;
         
        // protect the sheet
        xlWorkSheet.Protect(Type.Missing,true,Type.Missing);

这绝不是您所有问题的完美解决方案。尤其是由于我不太清楚您打算使用多少其他列,但是此代码将使A列保持锁定状态,然后使B到Z保持解锁状态。如果您还有其他问题,请在评论中扔掉。