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里面并保存

        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;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            objExcelRW.WriteExcelFromDgv(this.dataGridView1);
        }

3、效果展示

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

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

        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;
        }
        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中

        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();
        }
        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,只需将上面相应的代码更改为下面这样即可。

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

3、效果展示

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/872264.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[全网首发]2024国赛数学建模ABCE题完整思路+py(matlab)代码+成品论文参考+持续更新

AB题详细思路(含问题一问题二模型) CE题问题一代码思路已经写好[pythonmatlab两种都会更新 需要完整版的看这里&#xff1a; 点击链接加入群聊【2024数学建模国赛资料汇总】&#xff1a;http://qm.qq.com/cgi-bin/qm/qr?_wv1027&klZncBILk30DuPRI1Bd8X-3Djv7ZVZyAv&…

python开发VTK入门

首先用pip命令安装VTK的python库&#xff1b; 需要一些时间&#xff0c;安装完成如下&#xff1b; 基本示例代码&#xff0c; import vtkcube vtk.vtkCubeSource() cube.SetXLength(100.0) cube.SetYLength(200.0) cube.SetZLength(300.0)mapper vtk.vtkPolyDataMapper() ma…

持续集成与持续部署(CI/CD)的深入探讨

在现代软件开发中&#xff0c;持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;已成为不可或缺的实践。这些方法旨在加快软件交付的速度&#xff0c;同时提高软件的质量和稳定性。通过CI/CD&#xff0c;开发团队可以频繁地将代码更改集成到主分支&…

瑞芯微RK3566鸿蒙开发板Ubuntu虚拟机环境搭建教程,触觉智能Purple Pi OH主板

本文适用于Ubuntu虚拟机环境搭建教程学习&#xff0c;设备为触觉智能开发的瑞芯微RK3566开发板&#xff0c;型号Purple Pi OH。是华为Laval官方社区主荐的一款鸿蒙开发主板。支持Openharmony、安卓Android、Linux的Debian、Ubuntu系统。 该主板主要针对学生党&#xff0c;极客&…

[001-07-001].Redis7缓存双写一致性之更新策略探讨

1、面试题&#xff1a; 1.只要使用缓存&#xff0c;就可能会涉及到redis缓存与数据库双存储双写&#xff0c;只要是双写&#xff0c;就存在数据一致性问题&#xff0c;那么是如何解决数据一致性问题的2.双写一致性&#xff0c;你先动缓存redis还是数据库MySQL&#xff0c;哪一个…

OpenHarmony轻松玩转GIF数据渲染

OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;提供了Image组件支持GIF动图的播放&#xff0c;但是缺乏扩展能力&#xff0c;不支持播放控制等。今天介绍一款三方库——ohos-gif-drawable三方组件&#xff0c;带大家一起玩转GIF的数据渲染&#xff0c;搞…

7、Django Admin删除默认应用程序

admin文件 from django.contrib.auth.models import User, Groupadmin.site.unregister(User) admin.site.unregister(Group) 显示效果&#xff1a; 前 后

【springboot】使用AOP

目录 1. 添加依赖2. 创建切面类1. 创建切面类2. 切点表达式3. 增强方法 3. 开启AOP4. 创建控制类5. 测试 1. 添加依赖 <!-- AOP依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop<…

不会抖音剪辑怎么办?这4款拿走不谢

不少人想做自媒体&#xff0c;但是就光视频剪辑这一点难住了不少人&#xff0c;其实视频剪辑并没有大家想的那么复杂&#xff0c;直接用一些简单的剪辑视频工具也可以处理。作为一个短视频剪辑新手&#xff0c;我最近尝试了几款流行的视频编辑软件&#xff0c;今天就来和大家分…

C++引用简介

引用的基本使用&#xff1a; 作用&#xff1a; 给变量起别名 语法&#xff1a; 数据类型 &别名 原名 int main() {int a 10;int &b a;cout << "a " << a << endl;cout << "b " << b << endl; //都打印…

WebRTC协议下的视频汇聚融合技术:EasyCVR视频技术构建高效视频交互体验

视频汇聚融合技术是指将来自不同源、不同格式、不同网络环境的视频流进行集中处理、整合和展示的技术。随着视频监控、远程会议、在线教育、直播娱乐等领域的快速发展&#xff0c;视频数据的规模急剧增长&#xff0c;对视频处理能力和效率提出了更高要求。视频汇聚融合技术通过…

面试软件测试需要掌握的技能有哪些?

一、测试用例的编写 1、在测试中最重要的文档&#xff0c;他是测试工作的核心&#xff0c;是一组在测试时输入输出的标准&#xff0c;是软件需求的具体对照。编写测试用例&#xff0c;是测试人员的基本功&#xff0c;真正能写好的人并不多。 测试用例包含的内容&#xff1a; …

原型与原型链

在JavaScript中&#xff0c;原型&#xff08;prototype&#xff09;和原型链&#xff08;prototype chain&#xff09;是理解对象如何继承属性和方法的关键概念。 原型 每一个对象&#xff08;函数也是对象&#xff09;都有一个特殊的属性叫做原型&#xff08;prototype&…

数据分析-11-时间序列分析的概念任务和主要方法

1 时间序列 1.1 时间序列的定义 时间序列,通俗的字面含义为一系列历史时间的序列集合。比如2013年到2022年我国全国总人口数依次记录下来,就构成了一个序列长度为10的时间序列。 结合上图理解随机变量和观测值的关系。 我们认为每个时间点发生的数据都来自于一个分布的,…

PDF文件压缩,总结了五种压缩方法

PDF文件压缩&#xff0c;PDF文件在日常工作和生活中非常常见&#xff0c;但由于其体积较大&#xff0c;传输和上传时常会遇到限制。为了有效解决这一问题&#xff0c;PDF文件的压缩变得尤为重要。为了帮助你轻松应对大文件传输的困扰&#xff0c;本文将为你归纳五种实用的PDF文…

代码审计总结

代码审计总结 概述 一、代码审计 1.1什么是代码审计&#xff1f; 1.2为什么要执行代码审核&#xff1f; 1.3代码审计的好处 二、代码审计流程 2.1代码检查方法 2.2代码检查项目 2.3编码规范 2.4代码检查规范 2.5缺陷检查表 2.6代码审计复查 2.7代码审计结果总结 三…

前端代码注释风格 - CSS篇

本文基于《阿里巴巴CSS编程规约》、stylelint rules进行编写&#xff0c;涉及预编译语言&#xff08;Sass、Less&#xff09;的编码风格和最佳实践。 1.1 编码风格 空格的使用 选择器和{之间保留一个空格。.selector-disabled { 在使用逗号分隔的属性中&#xff0c;逗号后保…

HTTP 二、进阶

四、安全 1、TLS是什么 &#xff08;1&#xff09;为什么要有HTTPS ​ 简单的回答是“因为 HTTP 不安全”。由于 HTTP 天生“明文”的特点&#xff0c;整个传输过程完全透明&#xff0c;任何人都能够在链路中截获、修改或者伪造请求 / 响应报文&#xff0c;数据不具有可…

k8s 部署 jenkins【详细步骤】

文章目录 部署介绍部署步骤第 1 步:创建 namespace第 2 步:创建 ServiceAccount第 3 步:创建持久卷第 4 步:创建 Deployment第 5 步:创建 Service第 6 步:浏览器访问 Jenkins第 7 步:修改默认时区参考⭐ 本文目标:在 k8s 集群中部署一个 jenkins。 部署介绍 🚀 在 K…

查看HBA卡是否支持FC协议

cat /sys/class/fc_host/host*/port_name lspci | grep -i fibre # 看有无fibre channel控制器 官网查询 Emulex Lpe32000 https://docs.broadcom.com/doc/12357773 https://cn.genuinemodules.com/image/catalog/pdf/18/LPe32000.pdf