使用 C# 阻止 Excel 列
Block Excel Column using C#
我正在使用 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, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, false);
// for example block column A only
xlWorkSheet.Range["A1"].EntireColumn.Style.Locked = true;
// protect the sheet
xlWorkSheet.Protect(Type.Missing, true, true, true,
Type.Missing, Type.Missing, true, true, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
我的问题是,在 运行 这段代码然后取消对 sheet 的保护后,用户仍然可以编辑 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, Type.Missing, Type.Missing,
Type.Missing, 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, true, true,
Type.Missing, Type.Missing, true, true, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
这绝不是您所有问题的完美解决方案。特别是因为我不太清楚您打算使用多少其他列,但此代码将使列 A 处于锁定状态,然后使 B 到 Z 处于解锁状态。如果还有其他问题可以在评论中提出。
我正在使用 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, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, false);
// for example block column A only
xlWorkSheet.Range["A1"].EntireColumn.Style.Locked = true;
// protect the sheet
xlWorkSheet.Protect(Type.Missing, true, true, true,
Type.Missing, Type.Missing, true, true, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
我的问题是,在 运行 这段代码然后取消对 sheet 的保护后,用户仍然可以编辑 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, Type.Missing, Type.Missing,
Type.Missing, 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, true, true,
Type.Missing, Type.Missing, true, true, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
这绝不是您所有问题的完美解决方案。特别是因为我不太清楚您打算使用多少其他列,但此代码将使列 A 处于锁定状态,然后使 B 到 Z 处于解锁状态。如果还有其他问题可以在评论中提出。