先看运行结果  →  运行结果

开发环境

  • Microsoft Visual Studio Community 2019
  • Microsoft .NET Framework 4.8.04084
  • Microsoft Excel 2016

开发语言

  • C#

1.新建项目

新建「C#控制台应用程序」项目,参照以下内容
快速入门:使用 Visual Studio 创建第一个 C# 控制台应用

2.添加COM引用

添加「Microsoft Excel 16.0 Object Library」COM引用,只找到一篇简单易懂的日语文章
在 .NET 5 项目中添加 COM 引用

3.代码

using System.IO;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;namespace ExcelEdit
{class Program{static void Main(string[] args){// 各种对象的定义Excel.Application excel = null;Excel.Workbooks books = null;Excel.Workbook book = null;Excel.Sheets sheets = null;Excel.Worksheet sheet = null;Excel.Range cells = null;Excel.Range range = null;// 取得文件夹string folderPath = @"C:\Users\xyy\Desktop\Folder";// 取得文件夹中扩展名为[.xlsx]的文件string[] files = Directory.GetFiles(Path.GetFullPath(folderPath), "*.xlsx");try{// 启动Excelexcel = new Excel.Application();// Workbooks对象的初始化books = excel.Workbooks;// 对文件夹中的各个文件进行以下处理foreach (string file in files){try{// 打开文件 book = books.Open(file);// 选中文件里的所有表sheets = book.Worksheets;// 选中第一个表sheet = sheets[1];// 选中第一个表的所有单元格cells = sheet.Cells; // 选中单元格[2,1]// range = sheet.Cells[2, 1]// 注意上面这种写法会产生sheet.Cells和sheet.Cells[2, 1]这两个Excel.Range对象// 其中一个对象无法得到释放,会导致Excel进程残留问题range = cells[2, 1];// 将单元格[2,1]的文字设置成testrange.Value = "test";// 保存文件的修改并关闭book.Close(true);// 关闭Excelexcel.Quit();}finally{// 释放之前定义的对象,每循环一次就要释放一次,不然会导致Excel进程残留问题Marshal.FinalReleaseComObject(range);Marshal.FinalReleaseComObject(cells);Marshal.FinalReleaseComObject(sheet);Marshal.FinalReleaseComObject(sheets);Marshal.FinalReleaseComObject(book);}}}finally{// 最后释放books和excel对象Marshal.FinalReleaseComObject(books);Marshal.FinalReleaseComObject(excel);}}}
}

4.创建文件

5.运行结果

运行前            运行后

Book1 & Book2      Book1 & Book2
    

6.错误处理

程序运行时强制终了的话,对象未被释放,会导致有残留的Excel进程。
这时再一次运行程序的话,很有可能会出错。
所以先去任务管理器里结束残留的Excel进程,然后再运行。

7.其他操作

7.1.插入列

// 选中所有列
cells = sheet.Columns;
// 选中第2列
range = cells[2];
// 插入3列
for (int i = 0; i < 3; i++)
{range.Insert();
}

运行前                  
 
运行后    

7.2.合并单元格

// 选中所有单元格
cells = sheet.Cells;
// 选中单元格[2, 2]
range1 = cells[2, 2];
// 选中单元格[2, 4]
range2 = cells[2, 4];
// 选中单元格[2, 2]到单元格[2, 4]
range3 = sheet.Range[range1,range2];
// 单元格的结合
range3.Merge();

也可以这么写

// 选中单元格[B2]到[D2]
range = sheet.Range["B2:D2"];
// 单元格的结合
range.Merge();

运行前                  

运行后

7.3.更改文本颜色

// 定义font对象
Excel.Font font = null;
// ... 略
// 选中所有单元格
cells = sheet.Cells;
// 选择单元格[2,1]
range = cells[2, 1];
// 选择单元格[2,1]的font
font = range.Font;
// 字体改为红色
font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);

运行前         运行后
      

7.4.加边框

// 定义border对象
Excel.Borders border = null;
// ... 略
// 选中所有单元格
cells = sheet.Cells;
// 选择单元格[2,2]
range = cells[2, 2];
// 选择单元格[2,2]的边框
border = range.Borders;
// 边框设置成实线
border.LineStyle = Excel.XlLineStyle.xlContinuous;
// 设置边框的宽度
border.Weight = 2d;

运行前               运行后
     

参考资料

本文参考了以下资料

  • C#: Excelファイルを読み書きする (COM)
  • c#でExcelをOpenするとプロセスが残る(Microsoft.Office.Interop.Excel使用)
  • Microsoft.Office.Interop.Excel: How to Apply a border to ONE CELL

使用Microsoft.Office.Interop.Excel批量编辑Excel文件相关推荐

  1. VB.NET 使用Microsoft.Office.Interop进行EXCEL操作时彻底关闭EXCEL进程

    Imports System.Runtime.InteropServices Imports Microsoft.Office.Interop Public Class 关闭EXCEL'' TODO: ...

  2. window2008 64位系统无法调用Microsoft.Office.Interop组件进行文件另存的解决办法

    服务器是windows server2008 64位系统,项目中需要用到Microsoft.Office.Interop组件,包括excel.word.ppt等. 步骤  1.在"开始&qu ...

  3. 使用Microsoft.Office.Interop.Excel时,64位问题

    前不久,碰到一个问题. 曾经用的好好的Microsoft.Office.Interop.Excel实现的导出Excel,迁移至64位server后,就出现: 检索 COM 类工厂中 CLSID 为 { ...

  4. 数据转换excel操作 Microsoft.Office.Interop.Excel.dll的使用

    引用:http://www.cnblogs.com/lanjun/archive/2012/06/17/2552920.html 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到E ...

  5. 【转载】Excel操作 Microsoft.Office.Interop.Excel.dll的使用

    http://www.cnblogs.com/lanjun/archive/2012/06/17/2552920.html 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Exce ...

  6. Excel操作 Microsoft.Office.Interop.Excel.dll的使用

    原文地址为: Excel操作 Microsoft.Office.Interop.Excel.dll的使用 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Excel操作,接触Exc ...

  7. C# 使用Microsoft.Office.Interop将Excel、Word转换成PDF遇到的问题总结

    首先应用中引入Microsoft.Office.Interop.Excel.Microsoft.Office.Interop.Word两个dll,将嵌入式互操作类型设为False, WORD转换成PD ...

  8. C#利用Microsoft.Office.Interop.Excel导出数据到Excel

    添加引用(VS2013位于C:\Program Files (x86)\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\ ...

  9. c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件

    1.引用Microsoft.Office.Interop.Excel.dll 2.引用命名空间.使用别名 using System.Reflection; using Excel = Microsof ...

最新文章

  1. CSS中的路径裁剪样式clip-path
  2. LVQ神经网络的分类
  3. 怎样用原生js配合css的transition写个无缝滚动
  4. 一杆台球的击球力道竟能传递35米?
  5. 事业单位计算机技术岗工资,事业单位新入职的人员在管理岗位和技术岗位工资待遇是否有区别?...
  6. python是如何登上编程语言排行榜榜首的
  7. Android 3.2 联机测试adb驱动如何安装和配置?
  8. 【NDK】Android NDK下载安装教程
  9. android音标,安卓系统如何正确显示音标
  10. java冒泡排序(含冒泡排序代码)
  11. LDA模型,主题聚类模型
  12. HSQL 中修改字段的语法
  13. 8种Python文本处理工具集
  14. 墨刀产品设计大赛获奖名单出炉了!作品都太强了,速来围观
  15. c语言语法错误标识符,error C2061: 语法错误: 标识符“std”
  16. 2021-07-27_TPM描述
  17. 治疗失眠小妙招:按摩百会穴酸枣仁贴肚脐
  18. 使用css做水印效果
  19. 什么击计算机窗口可以打开资源管理器,如何打开资源管理器? 5种打开资源管理器的方法...
  20. verilog基础——always、initial

热门文章

  1. 毕业设计 STM32单片机的畜牧养殖场管理与检测系统 - 物联网
  2. 设计模式04——Factory Method模式
  3. 在vue项目中引用萤石云播放器插件
  4. 安装VMware虚拟机后,网络适配器找不到VMnet8和VMnet1解决方法。
  5. 关于大数据,需要你读懂的10个小故事
  6. 中兴echat_中兴高达推出新一代eChat小先锋e350
  7. 讲讲Python中的函数传递问题 【文末送书】
  8. Oracle创建数据链路
  9. Canvas 指纹追踪技术
  10. 家用计算机网络的传输介质,计算机网络传输介质