问题描述
我正在使用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保持解锁状态。如果您还有其他问题,请在评论中扔掉。