种读取Excel方法 插入Excel数据 修改Excel的值 导出Excel 保存Excel的时候,不弹出是否保存的窗口直接进行保存 1. C#导出写保护的Excel,设置某些区域可以编辑 2. 对Excel操作时,由于使用权限的不同,可能对表格的操作权限也不一样。EXCEL提供了保护工作表以及允许编辑单元格功能。相应的在C#中就可以对Excel表格进行操作 ### C#操作Excel知识点 #### 一、C#读取Excel的方法 在C#中,可以通过多种方式来读取Excel文件。本节介绍两种方法: ##### 方法一:使用`Microsoft.Office.Interop.Excel` 此方法适用于Office版本的Excel文件(如.xls或.xlsx格式),它通过COM接口与Microsoft Office应用程序进行交互。 ```csharp public static System.Data.DataTable ImpExcel(string fileName) { System.Data.DataTable dt = new System.Data.DataTable(); try { Microsoft.Office.Interop.Excel.Application app; Microsoft.Office.Interop.Excel.Workbook wbs; Microsoft.Office.Interop.Excel.Worksheet ws; app = new Microsoft.Office.Interop.Excel.Application(); wbs = app.Workbooks.Open(fileName); // 注意这里使用Open而不是Add ws = (Microsoft.Office.Interop.Excel.Worksheet)wbs.Sheets[1]; int rows = ws.UsedRange.Rows.Count; int columns = ws.UsedRange.Columns.Count; for (int i = 1; i <= rows; i++) { DataRow dr = dt.NewRow(); for (int j = 1; j <= columns; j++) { Microsoft.Office.Interop.Excel.Range range = ws.get_Range(ws.Cells[i, j], ws.Cells[i, j]); if (i == 1) { dt.Columns.Add("Column" + j); // 使用数字而非文本,以避免列名重复 } dr[j - 1] = range.Value2; // 使用Value2获取单元格的值 } dt.Rows.Add(dr); } // 关闭并释放资源 wbs.Close(false); app.Quit(); Marshal.ReleaseComObject(range); Marshal.ReleaseComObject(ws); Marshal.ReleaseComObject(wbs); Marshal.ReleaseComObject(app); return dt; } catch (Exception ex) { MessageBox.Show("数据绑定Excel失败! 失败原因:" + ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); return dt; } } ``` **注意事项:** 1. **安全性和许可问题:**使用COM对象需要确保应用程序有适当的权限访问Excel文件。 2. **性能问题:**如果处理大量数据,此方法可能会非常慢。 3. **内存泄漏风险:**必须正确释放所有COM对象,避免内存泄漏。 #### 二、插入Excel数据 使用`Microsoft.Office.Interop.Excel`库,可以轻松地向Excel文件中添加数据。示例代码如下: ```csharp public static void InsertDataToExcel(string fileName) { Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook wbs = app.Workbooks.Open(fileName); Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wbs.Sheets[1]; // 假设要插入的数据 string[] data = { "Apple", "Banana", "Cherry" }; // 插入数据 for (int i = 0; i < data.Length; i++) { ws.Cells[ws.UsedRange.Rows.Count + 1, i + 1] = data[i]; } // 保存并关闭 wbs.Save(); wbs.Close(false); app.Quit(); // 释放资源 Marshal.ReleaseComObject(ws); Marshal.ReleaseComObject(wbs); Marshal.ReleaseComObject(app); } ``` #### 三、修改Excel的值 修改Excel单元格的值同样简单: ```csharp public static void ModifyExcelValue(string fileName, int row, int column, string newValue) { Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook wbs = app.Workbooks.Open(fileName); Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wbs.Sheets[1]; ws.Cells[row, column] = newValue; wbs.Save(); wbs.Close(false); app.Quit(); Marshal.ReleaseComObject(ws); Marshal.ReleaseComObject(wbs); Marshal.ReleaseComObject(app); } ``` #### 四、导出Excel并自动保存 为了避免在保存时出现“是否保存”的对话框,可以使用以下代码: ```csharp public static void ExportAndSaveExcel(string fileName, string saveAsPath) { Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook wbs = app.Workbooks.Open(fileName); Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wbs.Sheets[1]; // 导出前的处理... wbs.SaveAs(saveAsPath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); wbs.Close(false); app.Quit(); Marshal.ReleaseComObject(ws); Marshal.ReleaseComObject(wbs); Marshal.ReleaseComObject(app); } ``` #### 五、C#导出写保护的Excel,并设置某些区域可编辑 当需要导出一个带有写保护的Excel文件时,可以使用以下步骤: 1. **打开Excel文件:**使用`Open`方法打开Excel文件。 2. **设置写保护:**使用`Protect`方法为工作表设置写保护。 3. **设置特定区域可编辑:**使用`Unprotect`方法解除写保护,然后使用`Range`和`Locked`属性设置特定区域为可编辑。 ```csharp public static void ExportProtectedExcel(string fileName, string saveAsPath) { Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook wbs = app.Workbooks.Open(fileName); Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wbs.Sheets[1]; // 设置写保护 ws.Protect(Type.Missing, Type.Missing, true); // 设置特定区域可编辑 ws.Unprotect(); // 首先解除保护 Microsoft.Office.Interop.Excel.Range range = ws.get_Range(ws.Cells[1, 1], ws.Cells[1, 3]); range.Locked = false; // 设置这些单元格为可编辑 // 再次设置写保护 ws.Protect(Type.Missing, Type.Missing, true); wbs.SaveAs(saveAsPath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); wbs.Close(false); app.Quit(); Marshal.ReleaseComObject(ws); Marshal.ReleaseComObject(wbs); Marshal.ReleaseComObject(app); } ``` #### 六、操作权限不同的Excel文件 在实际应用中,可能需要根据用户的权限不同,对Excel文件进行不同程度的保护。例如,某些用户只能查看而不能修改数据,而其他用户则可以完全编辑。这可以通过以下步骤实现: 1. **打开Excel文件:**使用`Open`方法打开Excel文件。 2. **根据权限设置保护级别:** - 如果用户只有查看权限,则设置整个工作表为只读。 - 如果用户有部分编辑权限,则设置特定区域为可编辑。 - 如果用户有完整编辑权限,则不设置任何写保护。 示例代码如下: ```csharp public static void ProtectExcelBasedOnPermissions(string fileName, string saveAsPath, bool isReadOnly, bool canEditSpecificRegion) { Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook wbs = app.Workbooks.Open(fileName); Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wbs.Sheets[1]; if (isReadOnly) { // 设置为只读 ws.Protect(Type.Missing, Type.Missing, true); } else if (canEditSpecificRegion) { // 设置特定区域可编辑 ws.Unprotect(); // 首先解除保护 Microsoft.Office.Interop.Excel.Range range = ws.get_Range(ws.Cells[1, 1], ws.Cells[1, 3]); range.Locked = false; // 设置这些单元格为可编辑 ws.Protect(Type.Missing, Type.Missing, true); // 再次设置写保护 } else { // 不设置写保护 } wbs.SaveAs(saveAsPath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); wbs.Close(false); app.Quit(); Marshal.ReleaseComObject(ws); Marshal.ReleaseComObject(wbs); Marshal.ReleaseComObject(app); } ``` 以上就是关于C#操作Excel的基本知识点和技术细节,包括读取、插入、修改数据、导出、写保护以及根据不同权限设置保护级别的方法。希望这些内容能帮助您更好地理解和使用C#中的Excel操作技术。
- yinweiyounihong2014-07-18还可以吧 是一个介绍的word
- 编程小狂人2013-01-31两种读取excel的方法
- Vicyn2014-10-27功能不是特别齐全,不过值得借鉴
- 汇智联创2014-06-09两种读取excel的方法
- 粉丝: 2
- 资源: 28
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Delphi 12 控件之System-Sysprep-2025.txt
- 昆虫检测48-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- Delphi 12 控件之Everything v1.5.0.1356a.rar
- 杭州马域栋调试的电机项目-STM32F103C8T6
- 昆虫检测44-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- Delphi 12 控件之cef-binary-131.3.2+gba9f4a4+chromium-131.0.6778.140-windows64.tar.bz2
- STM32F103单片机使用BC260-NBIOT模块采集温湿度和两路ADC通过mqtt协议发送到emqx物联网平台.zip
- 简单4步-利用ArcGIS处理nc格式文件得到任意区域的掩膜文件方法详解-附带制作好的【中国+7大子区域】掩膜nc格式文件
- valgrind-3.24.0
- 1.UE5横板2D项目,创建工程