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

使用二次封装的Excel COM 组件操作Excel\WPS ET Application对象与窗口

路逸思 5 天前
适用场景与解决问题

还在为复杂的 Excel 自动化操作而烦恼吗?本指南就是为你量身定制的!无论你是需要批量处理报表的后台服务开发者,还是需要集成 Excel 功能的桌面应用工程师,都能在这里找到解决方案。
开源项目地址:MudTools OfficeInterop
本系统列文章适用于需要通过 .NET 程序操作 Excel 应用程序的开发者,解决以下问题:

  • 如何优雅地启动和连接 Excel 应用程序
  • 如何轻松管理 Excel 工作簿和窗口
  • 如何简化 Excel 自动化操作
  • 如何告别 COM 对象管理的复杂性
"Excel 不只是电子表格,它是数据处理的魔法舞台!" - 某位不愿透露姓名的资深数据分析师
ExcelFactory - Excel 应用程序入口点

[ExcelFactory]ExcelFactory是创建和操作 Excel 应用程序的静态工厂类,提供了多种创建 Excel 实例的方法。把它想象成你的 Excel 应用程序"哆啦A梦",想要什么类型的 Excel 实例,它都能帮你变出来!
主要方法

1. BlankWorkbook() - 创建空白工作簿

想要从零开始?这个方法就是你的最佳选择!
  1. // 创建新的空白工作簿
  2. var excelApp = ExcelFactory.BlankWorkbook();
  3. // 现在可以对工作簿进行操作
  4. excelApp.GetActiveSheet().Cells[1, 1].Value = "Hello World";
复制代码
2. CreateFrom(string templatePath) - 基于模板创建工作簿

模板在手,效率我有!基于现有模板快速创建格式统一的工作簿。
  1. // 基于模板创建工作簿
  2. var excelApp = ExcelFactory.CreateFrom(@"C:\Templates\ReportTemplate.xltx");
  3. // 新工作簿将继承模板的格式、样式、公式等
复制代码
3. Open(string filePath) - 打开现有工作簿

需要处理现有文件?轻轻松松打开它!
  1. // 打开现有工作簿
  2. var excelApp = ExcelFactory.Open(@"C:\Data\SalesReport.xlsx");
  3. // 现在可以读取和修改现有数据
  4. var value = excelApp.GetActiveSheet().Cells[1, 1].Value;
复制代码
4. Connection(object comObj) - 连接现有 Excel 实例

已经有运行中的 Excel?直接连接它!
  1. // 连接到现有的 Excel 应用程序实例
  2. var excelApp = ExcelFactory.Connection(comObject);
复制代码
5. CreateInstance(string progId) - 创建特定版本实例

多版本 Excel?精确控制版本不是梦!
  1. // 根据 ProgID 创建 Excel 应用程序的新实例
  2. var excelApp = ExcelFactory.CreateInstance("Excel.Application.16");
复制代码
IExcelApplication - Excel 应用程序核心接口

[IExcelApplication]IExcelApplication是操作 Excel 应用程序的核心接口,提供了对 Excel 应用程序的全面控制。它就像你的遥控器,让你能够随心所欲地操控 Excel!
基础属性管理
  1. // 设置应用程序属性
  2. excelApp.DisplayAlerts = false; // 禁用警告对话框,让操作更安静
  3. excelApp.ScreenUpdating = false; // 禁用屏幕更新以提高性能,飞一般的感觉!
  4. excelApp.Calculation = XlCalculation.xlCalculationManual; // 手动计算模式,掌控计算时机
  5. // 获取系统信息
  6. string version = excelApp.Version;
  7. int memoryFree = excelApp.MemoryFree;
复制代码
工作簿管理
  1. // 获取工作簿集合
  2. var workbooks = excelApp.Workbooks;
  3. // 获取活动工作簿
  4. var activeWorkbook = excelApp.ActiveWorkbook;
  5. // 获取特定工作簿
  6. var workbook = excelApp.GetWorkbook("MyWorkbook.xlsx");
复制代码
工作表管理
  1. // 获取活动工作表
  2. var activeSheet = excelApp.ActiveSheet;
  3. // 获取工作表集合
  4. var sheets = excelApp.Sheets;
  5. // 获取单元格区域
  6. var range = excelApp.Range("A1:B10");
复制代码
计算与公式
  1. // 手动计算
  2. excelApp.Calculate();
  3. // 计算特定工作表
  4. excelApp.CalculateWorksheet(worksheet);
  5. // 计算公式
  6. object result = excelApp.Evaluate("=SUM(A1:A10)");
  7. double sum = excelApp.EvaluateToNumber("=SUM(1, 2, 3)");
复制代码
用户界面控制
  1. // 窗口操作
  2. excelApp.Minimize();  // 最小化窗口
  3. excelApp.Maximize();  // 最大化窗口
  4. excelApp.Restore();   // 还原窗口
  5. // 显示设置
  6. excelApp.DisplayFullScreen = true;    // 全屏显示
  7. excelApp.DisplayFormulaBar = false;   // 隐藏公式栏
复制代码
IExcelWorkbook - 工作簿操作接口

[IExcelWorkbook]IExcelWorkbook提供对 Excel 工作簿的全面管理功能。它是你工作簿的"贴身管家",帮你打理一切!
工作簿基础操作
  1. // 保存工作簿
  2. workbook.Save();
  3. // 另存为
  4. workbook.SaveAs(@"C:\Output\NewFile.xlsx");
  5. // 关闭工作簿
  6. workbook.Close(saveChanges: true);
复制代码
工作表管理
  1. // 获取工作表数量
  2. int count = workbook.WorksheetCount;
  3. // 获取特定工作表
  4. var worksheet = workbook.GetWorksheet(1);
  5. var namedSheet = workbook.GetWorksheet("Sheet1");
  6. // 添加新工作表
  7. var newSheet = workbook.AddWorksheet();
  8. // 删除工作表
  9. workbook.DeleteWorksheet(sheetToDelete);
复制代码
工作簿保护
  1. // 保护工作簿
  2. workbook.Protect("password");
  3. // 取消保护
  4. workbook.Unprotect("password");
  5. // 保护所有工作表
  6. workbook.ProtectAllWorksheets("password");
复制代码
高级功能
  1. // 导出为PDF
  2. workbook.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, @"C:\Output\Report.pdf");
  3. // 计算所有公式
  4. workbook.CalculateAll();
  5. // 刷新所有数据
  6. workbook.RefreshAll();
复制代码
IExcelWindow - 窗口管理接口

[IExcelWindow]IExcelWindow提供对 Excel 窗口的详细控制。让你的 Excel 窗口随心所欲地展示数据!
窗口属性设置
  1. // 窗口状态
  2. window.WindowState = XlWindowState.xlMaximized;  // 最大化窗口
  3. // 显示比例
  4. window.Zoom = 150; // 150%,看得更清楚!
  5. // 视图类型
  6. window.View = XlWindowView.xlPageBreakPreview;  // 页面断点预览
复制代码
窗口显示选项
  1. // 网格线显示
  2. window.DisplayGridlines = true;
  3. // 行列标题显示
  4. window.DisplayHeadings = true;
  5. // 公式显示
  6. window.DisplayFormulas = false;
  7. // 零值显示
  8. window.DisplayZeros = true;
复制代码
窗口分割与冻结
  1. // 冻结窗格
  2. window.FreezePanes = true;
  3. // 拆分窗口
  4. window.Split = true;
  5. window.SplitRow = 5;
  6. window.SplitColumn = 3;
复制代码
滚动操作
  1. // 大范围滚动
  2. window.LargeScroll(down: 10, right: 5);
  3. // 小范围滚动
  4. window.SmallScroll(down: 1, right: 1);
  5. // 滚动到指定区域
  6. window.ScrollToRange("A100");
复制代码
窗口选择与导航
  1. // 选择指定范围
  2. window.SelectRange("B2:D10");
  3. // 获取可见区域
  4. var visibleRange = window.VisibleRange;
  5. // 获取选中工作表
  6. var selectedSheets = window.SelectedSheets;
复制代码
最佳实践示例

完整的工作簿操作示例

让我们来看一个完整的示例,体验一下使用 MudTools.OfficeInterop 的优雅之处:
  1. // 创建新的 Excel 应用程序和工作簿
  2. using var excelApp = ExcelFactory.BlankWorkbook();
  3. try
  4. {
  5.     // 获取活动工作表
  6.     var worksheet = excelApp.ActiveSheet;
  7.    
  8.     // 写入数据
  9.     worksheet.Cells[1, 1].Value = "产品名称";
  10.     worksheet.Cells[1, 2].Value = "销量";
  11.     worksheet.Cells[1, 3].Value = "单价";
  12.     worksheet.Cells[1, 4].Value = "金额";
  13.    
  14.     // 填充数据
  15.     string[] products = { "产品A", "产品B", "产品C" };
  16.     int[] sales = { 100, 200, 150 };
  17.     double[] prices = { 10.5, 15.0, 12.8 };
  18.    
  19.     for (int i = 0; i < products.Length; i++)
  20.     {
  21.         worksheet.Cells[i + 2, 1].Value = products[i];
  22.         worksheet.Cells[i + 2, 2].Value = sales[i];
  23.         worksheet.Cells[i + 2, 3].Value = prices[i];
  24.         worksheet.Cells[i + 2, 4].Formula = $"=B{i + 2}*C{i + 2}";
  25.     }
  26.    
  27.     // 格式化标题行
  28.     var headerRange = worksheet.Range("A1:D1");
  29.     headerRange.Font.Bold = true;
  30.     headerRange.Interior.Color = Color.LightBlue;
  31.    
  32.     // 自动调整列宽
  33.     worksheet.Columns.AutoFit();
  34.    
  35.     // 保存文件
  36.     excelApp.ActiveWorkbook.SaveAs(@"C:\Output\SalesReport.xlsx");
  37. }
  38. finally
  39. {
  40.     // 关闭应用程序
  41.     excelApp.Quit();
  42. }
复制代码
窗口管理示例
  1. // 窗口设置示例
  2. using var excelApp = ExcelFactory.Open(@"C:\Data\Report.xlsx");
  3. var window = excelApp.ActiveWindow;
  4. // 设置窗口属性
  5. window.WindowState = XlWindowState.xlMaximized;
  6. window.DisplayGridlines = false;
  7. window.DisplayHeadings = true;
  8. window.Zoom = 90;
  9. // 冻结首行
  10. window.SplitRow = 1;
  11. window.FreezePanes = true;
  12. // 滚动到数据区域
  13. window.ScrollToRange("A100");
复制代码
总结

通过使用 ExcelFactory 和相关接口,开发者可以:

  • 简化 Excel 应用程序的创建和管理
  • 避免手动处理 COM 对象生命周期
  • 使用强类型接口提高代码可读性和安全性
  • 更好地控制 Excel 工作簿和窗口行为
  • 提高开发效率和代码维护性
这些接口提供了对 Excel 核心功能的全面封装,使开发者能够专注于业务逻辑而不是底层的 COM 交互细节。
现在,尊贵的您已经掌握了 Excel 操作的基础知识,准备好迎接更高级的挑战了吗?继续阅读后续文章,解锁更多 Excel 自动化技能!

来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

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