找回密码
 立即注册
首页 业界区 业界 使用二次封装的Excel COM 组件操作Excel\WPS ET中的区域 ...

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

揿纰潦 昨天 10:48
数据太多导致性能差?操作复杂难以维护?别担心,这篇文章将帮你解决这些问题!
开源项目地址:MudTools OfficeInterop
本系统文章适用于需要对 Excel 单元格区域进行操作的开发者,解决以下问题:

  • 如何高效操作单元格区域
  • 如何处理行和列数据
  • 如何简化数据读写操作
  • 如何避免常见的性能问题
"单元格虽小,五脏俱全。掌握好每一个单元格,就能构建出强大的数据世界!" - 某位Excel大师
IExcelRange - 单元格区域核心接口

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

获取单元格区域
  1. // 通过索引获取单元格
  2. var cellA1 = worksheet.Cells[1, 1];
  3. // 通过地址获取区域
  4. var rangeA1B10 = worksheet.Range("A1:B10");
  5. // 通过行列获取区域
  6. var range = worksheet.Range("A1", "B10");
复制代码
读写单元格值
  1. // 写入值
  2. worksheet.Cells[1, 1].Value = "Hello World";
  3. worksheet.Range("A1").Value = 123;
  4. worksheet.Range("B1").Value = DateTime.Now;
  5. // 读取值
  6. var value = worksheet.Cells[1, 1].Value;
  7. var text = worksheet.Cells[1, 1].Text;
复制代码
公式操作
  1. // 设置公式
  2. worksheet.Cells[1, 3].Formula = "=A1+B1";
  3. // 设置R1C1引用样式公式
  4. worksheet.Cells[2, 3].FormulaR1C1 = "=RC[-2]+RC[-1]";
  5. // 数组公式
  6. worksheet.Range("D1:D10").FormulaArray = "=A1:A10*B1:B10";
复制代码
区域选择与导航
  1. // 获取当前区域
  2. var currentRegion = worksheet.Cells[1, 1].CurrentRegion;
  3. // 获取整行/整列
  4. var entireRow = worksheet.Cells[1, 1].EntireRow;
  5. var entireColumn = worksheet.Cells[1, 1].EntireColumn;
  6. // 偏移操作
  7. var offsetCell = worksheet.Cells[1, 1].Offset(1, 1); // 向下向右偏移1个单元格
  8. // 区域交集与并集
  9. var range1 = worksheet.Range("A1:B10");
  10. var range2 = worksheet.Range("B5:C15");
  11. var intersection = range1.Intersect(range2);
  12. var union = range1.Union(range2);
复制代码
数据操作

复制与粘贴
  1. // 复制区域
  2. worksheet.Range("A1:B10").Copy();
  3. // 复制到指定区域
  4. worksheet.Range("A1:B10").Copy(worksheet.Range("D1"));
  5. // 特殊粘贴
  6. worksheet.Range("A1:B10").Copy();
  7. worksheet.Range("D1").PasteSpecial(XlPasteType.xlPasteValues);
  8. // 带格式复制
  9. worksheet.Range("A1:B10").CopyAndPaste("D1", XlPasteType.xlPasteAll);
复制代码
插入与删除
  1. // 插入单元格
  2. worksheet.Range("A1").Insert(XlDirection.xlDown);
  3. // 删除单元格
  4. worksheet.Range("A1").Delete(XlDirection.xlToLeft);
  5. // 清除内容
  6. worksheet.Range("A1:B10").ClearContents();
  7. worksheet.Range("A1:B10").Clear();
复制代码
格式设置

基础格式
  1. var range = worksheet.Range("A1:B10");
  2. // 设置背景色
  3. range.Interior.Color = Color.LightBlue;
  4. // 设置字体
  5. range.Font.Bold = true;
  6. range.Font.Size = 12;
  7. range.Font.Name = "Arial";
  8. // 设置对齐方式
  9. range.HorizontalAlignment = XlHAlign.xlHAlignCenter;
  10. range.VerticalAlignment = XlVAlign.xlVAlignMiddle;
  11. // 设置边框
  12. range.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThin);
复制代码
数字格式
  1. // 设置数字格式
  2. worksheet.Range("A1").NumberFormat = "0.00";
  3. worksheet.Range("B1").NumberFormat = "#,##0.00";
  4. worksheet.Range("C1").NumberFormat = "yyyy/mm/dd";
  5. worksheet.Range("D1").NumberFormat = "[RED]0.00";
复制代码
行高与列宽
  1. // 设置行高
  2. worksheet.Rows.RowHeight = 20;
  3. // 设置列宽
  4. worksheet.Columns.ColumnWidth = 15;
  5. // 自动调整
  6. worksheet.Columns.AutoFit();
  7. worksheet.Rows.AutoFit();
复制代码
查找与替换
  1. // 查找
  2. var foundCell = worksheet.Cells.Find("查找内容");
  3. // 查找下一个
  4. var nextCell = worksheet.Cells.FindNext(foundCell);
  5. // 替换
  6. worksheet.Cells.Replace("旧内容", "新内容");
  7. // 特殊单元格查找
  8. var emptyCells = worksheet.Cells.SpecialCells(XlCellType.xlCellTypeBlanks);
  9. var constants = worksheet.Cells.SpecialCells(XlCellType.xlCellTypeConstants);
复制代码
高级操作

数据筛选
  1. // 自动筛选
  2. worksheet.Range("A1:D10").AutoFilter();
  3. // 移除筛选
  4. worksheet.Range("A1:D10").RemoveAutoFilter();
复制代码
排序
  1. // 排序
  2. worksheet.Range("A1:D10").Sort(
  3.     key1: worksheet.Range("B1"),
  4.     order1: XlSortOrder.xlAscending,
  5.     header: XlYesNoGuess.xlYes
  6. );
复制代码
合并与拆分
  1. // 合并单元格
  2. worksheet.Range("A1:B2").Merge();
  3. // 取消合并
  4. worksheet.Range("A1:B2").UnMerge();
复制代码
注释操作
  1. // 添加注释
  2. worksheet.Cells[1, 1].AddComment("这是注释");
  3. // 获取注释文本
  4. var commentText = worksheet.Cells[1, 1].CommentText;
  5. // 删除注释
  6. worksheet.Cells[1, 1].DeleteComment();
复制代码
IExcelRows - 行操作接口

IExcelRows继承自 IExcelRange,专门用于处理行相关操作。它就像你的"行军指挥官",帮你整齐划一地管理每一行数据!
行操作示例
  1. // 获取所有行
  2. var allRows = worksheet.Rows;
  3. // 获取特定行
  4. var row5 = worksheet.Rows[5];
  5. // 获取行范围
  6. var rows5To10 = worksheet.Range("5:10").Rows;
  7. // 行操作
  8. worksheet.Rows[1].RowHeight = 25;
  9. worksheet.Rows[2].Hidden = true;
  10. worksheet.Rows[3].Insert();
  11. worksheet.Rows[4].Delete();
复制代码
批量行操作
  1. // 选择多行
  2. var selectedRows = worksheet.Range("2:5").Rows;
  3. // 设置行高
  4. selectedRows.RowHeight = 20;
  5. // 隐藏行
  6. selectedRows.Hidden = true;
  7. // 自动调整行高
  8. selectedRows.AutoFit();
复制代码
IExcelColumns - 列操作接口

IExcelColumns继承自 IExcelRange,专门用于处理列相关操作。它是你的"列队教练",帮你把每一列都训练得井井有条!
列操作示例
  1. // 获取所有列
  2. var allColumns = worksheet.Columns;
  3. // 获取特定列
  4. var columnA = worksheet.Columns[1];
  5. var columnB = worksheet.Columns["B"];
  6. // 获取列范围
  7. var columnsAToD = worksheet.Range("A:D").Columns;
  8. // 列操作
  9. worksheet.Columns[1].ColumnWidth = 15;
  10. worksheet.Columns[2].Hidden = true;
  11. worksheet.Columns[3].Insert();
  12. worksheet.Columns[4].Delete();
复制代码
批量列操作
  1. // 选择多列
  2. var selectedColumns = worksheet.Range("B:E").Columns;
  3. // 设置列宽
  4. selectedColumns.ColumnWidth = 12;
  5. // 隐藏列
  6. selectedColumns.Hidden = true;
  7. // 自动调整列宽
  8. selectedColumns.AutoFit();
复制代码
性能优化技巧

处理大量数据时,性能优化至关重要。以下是一些实用的技巧:
批量操作
  1. // 禁用屏幕更新和自动计算以提高性能
  2. excelApp.ScreenUpdating = false;
  3. excelApp.Calculation = XlCalculation.xlCalculationManual;
  4. try
  5. {
  6.     // 执行批量操作
  7.     var range = worksheet.Range("A1:Z1000");
  8.     range.Value = "批量数据";
  9. }
  10. finally
  11. {
  12.     // 恢复设置
  13.     excelApp.ScreenUpdating = true;
  14.     excelApp.Calculation = XlCalculation.xlCalculationAutomatic;
  15. }
复制代码
数组操作
  1. // 使用二维数组进行批量数据操作
  2. object[,] data = new object[1000, 26];
  3. for (int row = 0; row < 1000; row++)
  4. {
  5.     for (int col = 0; col < 26; col++)
  6.     {
  7.         data[row, col] = $"数据{row},{col}";
  8.     }
  9. }
  10. // 一次性写入所有数据
  11. worksheet.Range("A1:Z1000").Value = data;
复制代码
实际应用示例

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

[code]// 从 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

相关推荐

您需要登录后才可以回帖 登录 | 立即注册