当前位置: 首页 > news >正文

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、效果展示

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

相关文章:

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 …...

java重点学习-redis

一.redis 穿透无中生有key&#xff0c;布隆过滤nul隔离 锁与非期解难题。缓存击穿过期key&#xff0c; 雪崩大量过期key&#xff0c;过期时间要随机。 面试必考三兄弟&#xff0c;可用限流来保底。 1.1 Redis的使用场景 根据自己简历上的业务进行回答 缓存穿透、击穿、雪崩、双…...

每日刷题(图论)

P1119 灾后重建 P1119 灾后重建 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 看数据范围知道需要用到Floyd算法&#xff0c;但是道路是不能直接用的&#xff0c;需要等到连接道路的两个村庄重建好才可以使用&#xff0c;所以这需要按照时间依次加入中转点&#xff0c…...

Requestium - 将Requests和Selenium合并在一起的自动化测试工具

Requests 是 Python 的第三方库&#xff0c;主要用于发送 http 请求&#xff0c;常用于接口自动化测试等。 Selenium 是一个用于 Web 应用程序的自动化测试工具。Selenium 测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。 本篇介绍一款将 Requests 和 Seleniu…...

mysql和pg等数据库之间的数据迁移实战分享

mysql和pg等数据库之间的数据迁移是常见的问题&#xff1a;比如一开始使用Oracle&#xff0c;后来想使用mysql&#xff0c;而且需要把Oracle数据库的数据迁移到mysql里面&#xff1b;后期有想使用pg数据库&#xff0c;同时需要把Mysql数据库的数据迁移到pgl里面&#xff0c;等等…...

消息中间件都有哪些

RabbitMQ&#xff1a;这可是一个开源的消息代理软件&#xff0c;也叫消息中间件。它支持多种消息传递协议&#xff0c;可以轻松地在分布式系统中进行可靠的消息传递。 Kafka&#xff1a;Apache Kafka是一个分布式流处理平台&#xff0c;它主要用于处理实时数据流。Kafka的设计初…...

数据结构(3)内核链表

一、内核链表 内核链表是一种在操作系统内核中使用的数据结构&#xff0c;主要用于管理和组织内核对象。它是有头双向链表的一种实现。 内核链表的特点 双向链表: 内核链表的每个节点都包含指向前一个节点和后一个节点的指针&#xff0c;这使得在链表中进行插入和删除操作时更…...

Linux 硬件学习 s3c2440 arm920t蜂鸣器

1.查找手册时钟图&#xff0c;输入12m想要通过pll得到400m的信号 2.对比pll值&#xff0c;找到最近的为405&#xff0c;得到pll中mdiv为127&#xff0c;pdiv为2&#xff0c;sdiv为1 3.想要得到fclk400&#xff0c;hclk100&#xff0c;pclk50&#xff0c;对比分频比例&#xff0…...

提交保存,要做重复请求拦截,避免出现重复保存的问题

**问题&#xff1a;**前端ajax提交数据的时候&#xff0c;当频繁点击的时候&#xff0c;或者两个账号以相同数据创建的时候&#xff0c;会出现问题。 **处理办法&#xff1a;**前端拦截&#xff0c;防止重复提交数据&#xff0c;在上一次请求返回结果之后才允许提交第二次&…...

华为 HCIP-Datacom H12-821 题库 (3)

有需要题库的可以看主页置顶​​​​​​​ 1.运行 OSPF 协议的路由器在交互 DD 报文时&#xff0c;会使用以下哪一个参数选举主从关系&#xff1f; A、接口的 IP 地址 B、接口的 DR 优先级 C、Area ID D、Router ID 答案&#xff1a;D 解析&#xff1a; Router-ID 大的为主&a…...

spring-boot 事件

事件触发时机常用监听器描述ApplicationStartingEvent应用启动时LoggingApplicationListener&#xff1a;决定加载哪个日志系统ApplicationEnvironmentPreparedEvent创建Environment之后BootstrapApplicationListener&#xff1a;加载spring-cloud bootstrap配置文件&#xff1…...

合碳智能 × Milvus:探索化学合成新境界——逆合成路线设计

合碳智能&#xff08;C12.ai&#xff09;成立于2022年&#xff0c;致力于运用AI和具身智能技术&#xff0c;为药物研发实验室提供新一代智能化解决方案&#xff0c;推动实验室从自动化迈向智能化&#xff0c;突破传统实验模式与人员的依赖&#xff0c;解决效率和成本的瓶颈&…...

二分查找 | 二分模板 | 二分题目解析

1.二分查找 二分查找的一个前提就是要保证数组是有序的&#xff08;不准确&#xff09;&#xff01;利用二段性&#xff01; 1.朴素二分模板 朴素二分法的查找中间的值和目标值比较 while(left < right) // 注意是要&#xff1a; < {int mid left (right -left) / 2;…...

uni-app应用更新(Android端)

关于app更新&#xff0c;uni-app官方推荐的是 uni-upgrade-center&#xff0c;看了下比较繁琐&#xff0c;因此这里自己实现检查更新并下载安装的逻辑。 1.界面效果 界面中的弹框和 进度条采用了uView 提供的组件 2.检查更新并下载安装 一、版本信息配置在服务端&#xff0c…...

JavaEE(2):前后端项目之间的交互

现在&#xff0c;在网页中通过超链接&#xff0c;表单就可以向后端发送请求&#xff0c;后端也可以正常响应内容。 以前通过表单访问后端的请求方式称为同步请求 同步请求 当网页与后端交互时&#xff0c;前端不能再进行其他操作 服务器端响应回来的内容&#xff0c;会把整个浏…...

(已开源-CVPR 2024)YOLO-World: Real-Time Open-Vocabulary Object Detection

169期《YOLO-World Real-Time Open-Vocabulary Object Detection》 You Only Look Once (YOLO) 系列检测模型是目前最常用的检测模型之一。然而&#xff0c;它们通常是在预先定义好的目标类别上进行训练&#xff0c;很大程度上限制了它们在开放场景中的可用性。为了解决这一限制…...

Spring6梳理4——SpringIoC容器

以上笔记来源&#xff1a; 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09;https://www.bilibili.com/video/BV1kR4y1b7Qc 目录 4.1 前言 4.2 IoC容器 4.2.1 控制反转(IoC) 4.2.2 依赖注入 4.2.3 IoC容器在Spri…...

SpringBoot2:请求处理原理分析-FORM表单请求接口

一、RESTFUL简介 Rest风格支持&#xff08;使用HTTP请求方式&#xff0c;动词来表示对资源的操作&#xff09; 以前&#xff1a;/getUser 获取用户 /deleteUser 删除用户 /editUser 修改用户 /saveUser 保存用户 现在&#xff1a; /user GET-获取用户 DELETE-删除用户 PUT-修改…...

Monkey日志ANR、CRASH、空指针异常及其他异常数据分析

引言 在Android开发过程中&#xff0c;monkey测试是一种常用的随机测试手段&#xff0c;用于模拟用户的各种操作来发现应用中的稳定性问题。通过monkey测试生成的日志文件包含了丰富的信息&#xff0c;包括应用程序崩溃&#xff08;Crash&#xff09;、无响应&#xff08;ANR&…...

Vue 3结合Element Plus中,实现一个级联选择器(Cascader)来展示省市区

在Vue 3结合Element Plus中&#xff0c;实现一个级联选择器&#xff08;Cascader&#xff09;来展示省市区&#xff08;甚至到更细分的级别&#xff0c;如街道、小区等&#xff09;的联动选择是一个常见的需求。Element Plus的Cascader组件非常适合这样的场景&#xff0c;因为它…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...