C#上位机使用Microsoft.Office.Interop.Excel和EPPlus库对Excel或WPS表格进行写操作

C#上位机使用Microsoft.Office.Interop.Excel和EPPlus库对Excel或WPS表格进行写操作

一、使用Microsoft.Office.Interop.Excel

1、通过NuGet包管理器添加引用

按照下图中红框所示进行操作。

需要安装Microsoft.Office.Interop.Excel

添加Microsoft Office 16.0 Object Library进引用列表(往Excel里面插入图片需要用到)

2、编写一个将DataGridView的数据写入到Excel里面并保存

csharp 复制代码
        public void WriteExcelFromDgv(DataGridView dgv)
        {
            //定义一个工作簿对象
            Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
            //定义Excel工作表
            Microsoft.Office.Interop.Excel.Worksheet worksheet = excelApp.Workbooks.Add().Worksheets[1];

            //获取总行数和总列数
            int rowCount = dgv.Rows.Count;
            int columnCount = dgv.Columns.Count;
            //填写列标题
            for (int i = 0; i < columnCount; i++)
            {
                worksheet.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
            }
            //填写表格数据
            for (int i = 0; i < rowCount - 1; i++)
            {
                for (int j = 0; j < columnCount; j++)
                {
                    worksheet.Cells[i + 2, j + 1] = dgv.Rows[i + 1].Cells[j].Value;
                }
            }

            //设置列宽和数据一致
            worksheet.Columns.AutoFit();
            //保存文件
            worksheet.SaveAs(@"C:\Users\new\Desktop\1234.xlsx");

            //释放对象。不释放对象的话,打开excel会弹出有程序占用,只能以只读的方式打开。
            excelApp.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
            excelApp = null;
        }
csharp 复制代码
        private void button1_Click(object sender, EventArgs e)
        {
            objExcelRW.WriteExcelFromDgv(this.dataGridView1);
        }

3、效果展示

用这个库在编写代码进行单元格格式进行设置时,不会智能提示,编写起来不够方便。

4、编写一个方法将图片写入到Excel中

csharp 复制代码
        public void WriteImageInExcel(string path)
        {
        	//创建一个新的Excel文件----------
            //定义一个工作簿对象
            Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
            //定义Excel工作表
            Microsoft.Office.Interop.Excel.Worksheet worksheet = excelApp.Workbooks.Add().Worksheets[1];
            //------------------------------
            
			/*获取已经存在的Excel文件*****************			
            //获取已创建好的工作簿路径
            string excelPath = @"C:\Users\new\Desktop\0830.xlsx\";
            //将现有工作簿加入到已经定义好的工作簿集合
            excelApp.Workbooks.Add(excelPath);
            //获取第一个工作表
            Microsoft.Office.Interop.Excel.Worksheet worksheet = excelApp.Worksheets[1];
            */ 

            //从指定位置读取图片
            string imagePath = path;
 			//AddPicture():
 			//第1个参数,放的是图片路径;第2个和第3个是枚举类型,固定的值;第4个参数是图片左上角距离Excel表格左边的距离;
 			//第5个参数是图片左上角距离Excel表格上边的距离;第6个参数是图片的宽度;第7个参数是图片的高度。
            worksheet.Shapes.AddPicture(imagePath, Microsoft.Office.Core.MsoTriState.msoFalse,
                Microsoft.Office.Core.MsoTriState.msoTrue, 10, 50, 90, 100);
                
            //保存文件
            worksheet.SaveAs(@"C:\Users\new\Desktop\0830.xlsx");

            //释放对象。不释放对象的话,打开excel会弹出有程序占用,只能以只读的方式打开。
            excelApp.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
            excelApp = null;
        }
csharp 复制代码
        private void button3_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            DialogResult result = openFileDialog.ShowDialog();
            string path = openFileDialog.FileName;
            objExcelRW.WriteImageInExcel(path);
        }

5、效果展示

二、使用Epplus

1、通过NuGet包管理器添加引用

按照下图中红框所示进行操作。

需要安装EPPlus

2、插入图片进已经存在的Excel中

csharp 复制代码
        public void WriteDataInExcelByEpplus(string filePath,string imagePath)
        {
            //需要加这一句,不然会报错
            OfficeOpenXml.ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;

            //通过指定路径创建工作簿对象
            OfficeOpenXml.ExcelPackage package = new OfficeOpenXml.ExcelPackage(filePath);
            //获取该工作簿的第一个工作表
            OfficeOpenXml.ExcelWorksheet worksheet = package.Workbook.Worksheets[0];

            //从指定位置读取图片
            //System.Drawing.Image image = System.Drawing.Image.FromFile(imagePath);
            //定义一个图片对象
            var pic = worksheet.Drawings.AddPicture("logo", imagePath);
            //图片放置的位置。
            //第1个参数:从第2行下边框开始;第2个参数:偏移行的像素距离;第3个参数:从第0列开始右边框;第4个参数:偏移列的像素距离  
            pic.SetPosition(2, 10, 0, 10);
            //图片的大小设置。设置图片的宽度和高度
            pic.SetSize(90, 100);

            //保存工作簿
            package.Save();
        }
csharp 复制代码
        private void button4_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            DialogResult result = openFileDialog.ShowDialog();
            string filePath = openFileDialog.FileName;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            DialogResult result1 = openFileDialog.ShowDialog();
            string imagePath = openFileDialog.FileName;

            objExcelRW.WriteDataInExcelByEpplus(filePath, imagePath);
        }

如果需要程序创建新的Excel,只需将上面相应的代码更改为下面这样即可。

csharp 复制代码
            OfficeOpenXml.ExcelPackage excelPackage = new OfficeOpenXml.ExcelPackage();
            OfficeOpenXml.ExcelWorksheet excelWorksheet = excelPackage.Workbook.Worksheets.Add("123");
            excelPackage.SaveAs(@"C:\Users\new\Desktop\0902.xlsx");

3、效果展示


相关推荐
不羁。。5 小时前
【撸靶笔记】第七关:GET - Dump into outfile - String
数据库·笔记·oracle
yangchanghua1116 小时前
pgsql 如何查询今天范围内的数据(当天0点0分0秒 - 当天23点59分59秒....)
数据库·pgsql
larance6 小时前
SQLAlchemy 的异步操作来批量保存对象列表
数据库·python
python_chai6 小时前
从数据汇总到高级分析,SQL 查询进阶实战(下篇)—— 分组、子查询与窗口函数全攻略
数据库·sql·mysql
在努力的前端小白7 小时前
Spring Boot 敏感词过滤组件实现:基于DFA算法的高效敏感词检测与替换
java·数据库·spring boot·文本处理·敏感词过滤·dfa算法·组件开发
未来之窗软件服务7 小时前
自建知识库,向量数据库 (九)之 量化前奏分词服务——仙盟创梦IDE
数据库·仙盟创梦ide·东方仙盟·自建ai·ai分词
好望角雾眠10 小时前
第一阶段C#基础-10:集合(Arraylist,list,Dictionary等)
笔记·学习·c#
冒泡的肥皂10 小时前
MVCC初学demo(一
数据库·后端·mysql
大霞上仙10 小时前
实现自学习系统,输入excel文件,能学习后进行相应回答
python·学习·excel
.Shu.11 小时前
Redis Reactor 模型详解【基本架构、事件循环机制、结合源码详细追踪读写请求从客户端连接到命令执行的完整流程】
数据库·redis·架构