使用Microsoft.Office.Interop.Excel批量编辑Excel文件
先看运行结果 → 运行结果
开发环境
- 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文件相关推荐
- VB.NET 使用Microsoft.Office.Interop进行EXCEL操作时彻底关闭EXCEL进程
Imports System.Runtime.InteropServices Imports Microsoft.Office.Interop Public Class 关闭EXCEL'' TODO: ...
- window2008 64位系统无法调用Microsoft.Office.Interop组件进行文件另存的解决办法
服务器是windows server2008 64位系统,项目中需要用到Microsoft.Office.Interop组件,包括excel.word.ppt等. 步骤 1.在"开始&qu ...
- 使用Microsoft.Office.Interop.Excel时,64位问题
前不久,碰到一个问题. 曾经用的好好的Microsoft.Office.Interop.Excel实现的导出Excel,迁移至64位server后,就出现: 检索 COM 类工厂中 CLSID 为 { ...
- 数据转换excel操作 Microsoft.Office.Interop.Excel.dll的使用
引用:http://www.cnblogs.com/lanjun/archive/2012/06/17/2552920.html 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到E ...
- 【转载】Excel操作 Microsoft.Office.Interop.Excel.dll的使用
http://www.cnblogs.com/lanjun/archive/2012/06/17/2552920.html 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Exce ...
- Excel操作 Microsoft.Office.Interop.Excel.dll的使用
原文地址为: Excel操作 Microsoft.Office.Interop.Excel.dll的使用 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Excel操作,接触Exc ...
- C# 使用Microsoft.Office.Interop将Excel、Word转换成PDF遇到的问题总结
首先应用中引入Microsoft.Office.Interop.Excel.Microsoft.Office.Interop.Word两个dll,将嵌入式互操作类型设为False, WORD转换成PD ...
- C#利用Microsoft.Office.Interop.Excel导出数据到Excel
添加引用(VS2013位于C:\Program Files (x86)\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\ ...
- c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件
1.引用Microsoft.Office.Interop.Excel.dll 2.引用命名空间.使用别名 using System.Reflection; using Excel = Microsof ...
最新文章
- CSS中的路径裁剪样式clip-path
- LVQ神经网络的分类
- 怎样用原生js配合css的transition写个无缝滚动
- 一杆台球的击球力道竟能传递35米?
- 事业单位计算机技术岗工资,事业单位新入职的人员在管理岗位和技术岗位工资待遇是否有区别?...
- python是如何登上编程语言排行榜榜首的
- Android 3.2 联机测试adb驱动如何安装和配置?
- 【NDK】Android NDK下载安装教程
- android音标,安卓系统如何正确显示音标
- java冒泡排序(含冒泡排序代码)
- LDA模型,主题聚类模型
- HSQL 中修改字段的语法
- 8种Python文本处理工具集
- 墨刀产品设计大赛获奖名单出炉了!作品都太强了,速来围观
- c语言语法错误标识符,error C2061: 语法错误: 标识符“std”
- 2021-07-27_TPM描述
- 治疗失眠小妙招:按摩百会穴酸枣仁贴肚脐
- 使用css做水印效果
- 什么击计算机窗口可以打开资源管理器,如何打开资源管理器? 5种打开资源管理器的方法...
- verilog基础——always、initial