使用二次封装的Excel COM 组件操作Excel\WPS ET中的区域、行和列

使用二次封装的Excel COM 组件操作Excel\WPS ET中的区域、行和列

    正在检查是否收录...

数据太多导致性能差?操作复杂难以维护?别担心,这篇文章将帮你解决这些问题!

开源项目地址:MudTools OfficeInterop

本系统文章适用于需要对 Excel 单元格区域进行操作的开发者,解决以下问题:

  • 如何高效操作单元格区域
  • 如何处理行和列数据
  • 如何简化数据读写操作
  • 如何避免常见的性能问题

"单元格虽小,五脏俱全。掌握好每一个单元格,就能构建出强大的数据世界!" - 某位Excel大师

IExcelRange - 单元格区域核心接口

IExcelRange是操作 Excel 单元格区域的核心接口,继承自 [ICoreRange]接口。它就像你的"画笔",让你能够在Excel画布上自由挥洒!

基础操作

获取单元格区域

// 通过索引获取单元格 var cellA1 = worksheet.Cells[1, 1]; // 通过地址获取区域 var rangeA1B10 = worksheet.Range("A1:B10"); // 通过行列获取区域 var range = worksheet.Range("A1", "B10"); 

读写单元格值

// 写入值 worksheet.Cells[1, 1].Value = "Hello World"; worksheet.Range("A1").Value = 123; worksheet.Range("B1").Value = DateTime.Now; // 读取值 var value = worksheet.Cells[1, 1].Value; var text = worksheet.Cells[1, 1].Text; 

公式操作

// 设置公式 worksheet.Cells[1, 3].Formula = "=A1+B1"; // 设置R1C1引用样式公式 worksheet.Cells[2, 3].FormulaR1C1 = "=RC[-2]+RC[-1]"; // 数组公式 worksheet.Range("D1:D10").FormulaArray = "=A1:A10*B1:B10"; 

区域选择与导航

// 获取当前区域 var currentRegion = worksheet.Cells[1, 1].CurrentRegion; // 获取整行/整列 var entireRow = worksheet.Cells[1, 1].EntireRow; var entireColumn = worksheet.Cells[1, 1].EntireColumn; // 偏移操作 var offsetCell = worksheet.Cells[1, 1].Offset(1, 1); // 向下向右偏移1个单元格 // 区域交集与并集 var range1 = worksheet.Range("A1:B10"); var range2 = worksheet.Range("B5:C15"); var intersection = range1.Intersect(range2); var union = range1.Union(range2); 

数据操作

复制与粘贴

// 复制区域 worksheet.Range("A1:B10").Copy(); // 复制到指定区域 worksheet.Range("A1:B10").Copy(worksheet.Range("D1")); // 特殊粘贴 worksheet.Range("A1:B10").Copy(); worksheet.Range("D1").PasteSpecial(XlPasteType.xlPasteValues); // 带格式复制 worksheet.Range("A1:B10").CopyAndPaste("D1", XlPasteType.xlPasteAll); 

插入与删除

// 插入单元格 worksheet.Range("A1").Insert(XlDirection.xlDown); // 删除单元格 worksheet.Range("A1").Delete(XlDirection.xlToLeft); // 清除内容 worksheet.Range("A1:B10").ClearContents(); worksheet.Range("A1:B10").Clear(); 

格式设置

基础格式

var range = worksheet.Range("A1:B10"); // 设置背景色 range.Interior.Color = Color.LightBlue; // 设置字体 range.Font.Bold = true; range.Font.Size = 12; range.Font.Name = "Arial"; // 设置对齐方式 range.HorizontalAlignment = XlHAlign.xlHAlignCenter; range.VerticalAlignment = XlVAlign.xlVAlignMiddle; // 设置边框 range.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThin); 

数字格式

// 设置数字格式 worksheet.Range("A1").NumberFormat = "0.00"; worksheet.Range("B1").NumberFormat = "#,##0.00"; worksheet.Range("C1").NumberFormat = "yyyy/mm/dd"; worksheet.Range("D1").NumberFormat = "[RED]0.00"; 

行高与列宽

// 设置行高 worksheet.Rows.RowHeight = 20; // 设置列宽 worksheet.Columns.ColumnWidth = 15; // 自动调整 worksheet.Columns.AutoFit(); worksheet.Rows.AutoFit(); 

查找与替换

// 查找 var foundCell = worksheet.Cells.Find("查找内容"); // 查找下一个 var nextCell = worksheet.Cells.FindNext(foundCell); // 替换 worksheet.Cells.Replace("旧内容", "新内容"); // 特殊单元格查找 var emptyCells = worksheet.Cells.SpecialCells(XlCellType.xlCellTypeBlanks); var constants = worksheet.Cells.SpecialCells(XlCellType.xlCellTypeConstants); 

高级操作

数据筛选

// 自动筛选 worksheet.Range("A1:D10").AutoFilter(); // 移除筛选 worksheet.Range("A1:D10").RemoveAutoFilter(); 

排序

// 排序 worksheet.Range("A1:D10").Sort( key1: worksheet.Range("B1"), order1: XlSortOrder.xlAscending, header: XlYesNoGuess.xlYes ); 

合并与拆分

// 合并单元格 worksheet.Range("A1:B2").Merge(); // 取消合并 worksheet.Range("A1:B2").UnMerge(); 

注释操作

// 添加注释 worksheet.Cells[1, 1].AddComment("这是注释"); // 获取注释文本 var commentText = worksheet.Cells[1, 1].CommentText; // 删除注释 worksheet.Cells[1, 1].DeleteComment(); 

IExcelRows - 行操作接口

IExcelRows继承自 IExcelRange,专门用于处理行相关操作。它就像你的"行军指挥官",帮你整齐划一地管理每一行数据!

行操作示例

// 获取所有行 var allRows = worksheet.Rows; // 获取特定行 var row5 = worksheet.Rows[5]; // 获取行范围 var rows5To10 = worksheet.Range("5:10").Rows; // 行操作 worksheet.Rows[1].RowHeight = 25; worksheet.Rows[2].Hidden = true; worksheet.Rows[3].Insert(); worksheet.Rows[4].Delete(); 

批量行操作

// 选择多行 var selectedRows = worksheet.Range("2:5").Rows; // 设置行高 selectedRows.RowHeight = 20; // 隐藏行 selectedRows.Hidden = true; // 自动调整行高 selectedRows.AutoFit(); 

IExcelColumns - 列操作接口

IExcelColumns继承自 IExcelRange,专门用于处理列相关操作。它是你的"列队教练",帮你把每一列都训练得井井有条!

列操作示例

// 获取所有列 var allColumns = worksheet.Columns; // 获取特定列 var columnA = worksheet.Columns[1]; var columnB = worksheet.Columns["B"]; // 获取列范围 var columnsAToD = worksheet.Range("A:D").Columns; // 列操作 worksheet.Columns[1].ColumnWidth = 15; worksheet.Columns[2].Hidden = true; worksheet.Columns[3].Insert(); worksheet.Columns[4].Delete(); 

批量列操作

// 选择多列 var selectedColumns = worksheet.Range("B:E").Columns; // 设置列宽 selectedColumns.ColumnWidth = 12; // 隐藏列 selectedColumns.Hidden = true; // 自动调整列宽 selectedColumns.AutoFit(); 

性能优化技巧

处理大量数据时,性能优化至关重要。以下是一些实用的技巧:

批量操作

// 禁用屏幕更新和自动计算以提高性能 excelApp.ScreenUpdating = false; excelApp.Calculation = XlCalculation.xlCalculationManual; try { // 执行批量操作 var range = worksheet.Range("A1:Z1000"); range.Value = "批量数据"; } finally { // 恢复设置 excelApp.ScreenUpdating = true; excelApp.Calculation = XlCalculation.xlCalculationAutomatic; } 

数组操作

// 使用二维数组进行批量数据操作 object[,] data = new object[1000, 26]; for (int row = 0; row < 1000; row++) { for (int col = 0; col < 26; col++) { data[row, col] = $"数据{row},{col}"; } } // 一次性写入所有数据 worksheet.Range("A1:Z1000").Value = data; 

实际应用示例

数据导入示例

// 从 DataTable 导入数据到 Excel using var excelApp = ExcelFactory.BlankWorkbook(); var worksheet = excelApp.ActiveSheet; // 假设有一个 DataTable DataTable dataTable = GetDataFromDatabase(); // 将数据复制到 Excel worksheet.Cells[1, 1].CopyFromDataTable(dataTable, "A1", true); // 格式化标题行 var headerRange = worksheet.Range($"A1:{GetColumnLetter(dataTable.Columns.Count)}1"); headerRange.Font.Bold = true; headerRange.Interior.Color = Color.LightGray; // 自动调整列宽 worksheet.Columns.AutoFit(); // 保存文件 excelApp.ActiveWorkbook.SaveAs(@"C:\Output\DataReport.xlsx"); 

数据导出示例

// 从 Excel 导出数据到数组 using var excelApp = ExcelFactory.Open(@"C:\Data\InputData.xlsx"); var worksheet = excelApp.ActiveSheet; // 获取数据区域 var dataRange = worksheet.UsedRange; // 读取数据到数组 object[,] values = dataRange.Value as object[,]; // 处理数据 for (int row = 1; row <= values.GetLength(0); row++) { for (int col = 1; col <= values.GetLength(1); col++) { Console.WriteLine($"[{row},{col}] = {values[row, col]}"); } } 

总结

通过使用 IExcelRange、IExcelRows 和 IExcelColumns 接口,开发者可以:

  1. 灵活操作 Excel 单元格区域
  2. 高效处理行和列数据
  3. 简化格式设置和数据操作
  4. 避免常见的性能问题
  5. 提高代码可读性和可维护性

这些接口提供了对 Excel 单元格操作的全面封装,使开发者能够专注于业务逻辑而不是底层的 COM 交互细节。

掌握了这些技能,你就能轻松应对各种Excel数据处理任务了!继续阅读后续指南,解锁更多Excel自动化技能!

  • 本文作者:WAP站长网
  • 本文链接: https://wapzz.net/post-27579.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
本站部分内容来源于网络转载,仅供学习交流使用。如涉及版权问题,请及时联系我们,我们将第一时间处理。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
2.8W+
9
1
2
WAP站长官方

【渲染管线】UnityURP[渲染顺序]与[层级]

上一篇

云闪付联合HarmonyOS SDK打造更便捷安全的支付体验

下一篇
评论区
内容为空

这一切,似未曾拥有

  • 复制图片
按住ctrl可打开默认菜单