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

news2024/9/23 5:17:26

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搭建大型分布式服务(四十四)SpringBoot 无代码侵入实现多Kafka数据源:单分区提升至十万级消费速度!

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 在过去的一段时间里&#xff0c;我们利用了AI大模型写了一个多线程并发框架&#xff0c;那么&#xff0c;我们怎样集成到Kafka组件里&#xff0c;让消费速度…

15种高级RAG技术:从预检索到生成全面提升RAG效果

检索增强生成 &#xff08;RAG&#xff09; 是一种强大的技术&#xff0c;它将信息检索与生成式 AI 相结合&#xff0c;以产生更准确、上下文更丰富的响应。本文将探讨 15 种高级 RAG 技术&#xff0c;以提高生成式 AI 系统的输出质量和整体性能的鲁棒性。这样做使本文能够测试…

基于ROP漏洞挖掘与利用

支持一对一答疑的购买网址 通常情况下栈溢出可能造成的后果有两种&#xff0c;一类是本地提权另一类则是远程执行任意命令&#xff0c;通常C/C并没有提供智能化检查用户输入是否合法的功能&#xff0c;同时程序编写人员在编写代码时也很难始终检查栈是否会发生溢出&#xff0c…

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

有需要题库的可以看主页置顶 1.缺省情况下&#xff0c;广播型网络中运行 IS-IS 的路由器&#xff0c;DIS 发送 CSNP报文的周期为多少秒&#xff1f; A、10 B、3.3 C、30 D、40 答案&#xff1a;A 解析&#xff1a; 广播型网络中运行 IS-IS 的路由器&#xff0c;DIS 发送C…

sed awk 第二版学习(二)—— 正则表达式语法

目录 一、表达式 二、成行的字符 1. 反斜杠 2. 通配符 3. 编写正则表达式 4. 字符类 &#xff08;1&#xff09;字符的范围 &#xff08;2&#xff09;排除字符类 &#xff08;3&#xff09;POSIX 字符类补充 5. 重复出现的字符 6. 匹配单词 7. gres 替换脚本 8. …

PHP动物收容所管理系统-计算机毕业设计源码94164

摘 要 利用PHP语言和相关技术&#xff0c;设计和实现一个高效、可靠的动物收容所管理系统。该系统将提供系统用户、动物信息管理、领养申请处理、志愿者管理、医疗记录管理、捐赠信息、系统管理等功能&#xff0c;旨在促进动物收容所管理工作的便捷和透明化。本研究首先介绍了动…

HyperMesh教程从入门到精通:HyperMesh模型管理

1.4 模型管理 在HyperMesh中创建一个有效的求解输入文件时&#xff0c;模型管理功能是非常必要的。本节将介绍基本的模型管理方法&#xff0c;如单元和载荷归类、集合组装、重命名、删除、排序以及重新编号等。 本节将学习如何&#xff1a; 创建几何和组件归类。单元归类。组…

windows任务栏的空白清除

windows任务栏的空白出现一块一块的空白&#xff0c;看着好难受&#xff0c;下面介绍下怎么进行清除 在Windows操作系统中&#xff0c;任务栏出现空白区域可能是由多种原因引起的&#xff0c;比如图标被意外删除或隐藏、系统更新后的兼容性问题、或是某些程序错误地修改了系统设…

Java基于微信小程序的美食推荐小程序,附源码

博主介绍&#xff1a;✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不…

全域运营哪家公司好?为什么很多人都选了它?

随着本地生活下半场的到来&#xff0c;以全域运营服务商为代表的新兴职业的未来前景和收益空间不断显现&#xff0c;使得越来越多的人有了加入全域运营服务商赛道的想法。不少创业者因此得到了新的启发&#xff0c;即通过搭建全域运营系统为全域运营服务商提供作业平台等各项服…

【Windows】windows server如何实现 ps aux | grep xxx 方式过滤出要看到的进程信息

在Windows Server中&#xff0c;可以使用PowerShell或命令提示符&#xff08;cmd.exe&#xff09;来实现类似Linux中ps aux | grep xxx的功能。具体来说&#xff0c;可以使用PowerShell的Get-Process命令来获取进程信息&#xff0c;并使用管道&#xff08;|&#xff09;和筛选命…

springboot学习11 (菜品缓存redis)

缓存逻辑分析 目的&#xff1a;减轻数据库压力每个分类下的菜品保存一份缓存数据数据库中菜品数据有变更时清理缓存数据 keyvaluedish_1string(...)dish_2string(...)dish_3string(...) GetMapping("/list")ApiOperation("根据分类id查询菜品")public Res…

C++国密SM2算法加解密的使用

目录 效果 在线校验 代码实现参考 项目 下载 效果 加密字符串:lxw 123abcD 2024-09-01:12:00加密后信息:042E82EE8ACE2BD56FA71DC6A0C34190627AA365F8EEE6261903BEE327A85EB5E1D6E78F2D79AD6F6DC9E45C0829625DC3165BB78BD897F99044A640F930653747939CF9D5A10C8216F945A559…

【Python】标准库的使用

文章目录 标准库日期计算字符串操作剑指offer 58&#xff0c;翻转单词顺序思路 leetcode 796&#xff0c;旋转字符串思路 leetcode 2255&#xff0c;统计是给定字符串前缀的字符串数目思路 文件查找工具 Python 通过模块来体现“库” 降低了程序猿的学习成本提高了程序的开发效…

一文带你玩转美国头条NewsBreak平台广告开户优势

一文带你玩转美国头条NewsBreak平台广告开户优势 一、NewsBreak是什么&#xff1a;美国资讯APP的璀璨新星 NewsBreak平台&#xff0c;一款在美国本土迅速崛起的资讯APP&#xff0c;以其1600万的日活跃用户和4000万的新闻订阅用户&#xff0c;成为众多出海企业关注的焦点。它不…

vue-virtual-scroller插件实现不等高表格虚拟滚动

对于大量的表格数据加载&#xff0c;如果我们全部加载不仅面临加载等待时间长&#xff0c;容易崩溃的问题&#xff0c;还有可能导致浏览器缓存数据量大而导致页面使用卡顿的情况。 所以我们使用虚拟滚动加载来优化这种情况&#xff0c;在这里我们使用插件vue-virtual-scroller来…

【Windows】windows powershell 如何实现tail -f xx.log 实时看日志的功能?

windows powershell 如何实现tail -f xx.log 实时看日志的功能&#xff1f; 在Windows PowerShell中&#xff0c;要实现类似于Linux中的tail -f xx.log实时查看日志文件的功能&#xff0c;可以使用Get-Content命令配合-Tail和-Wait参数。这将让你能够实时地查看日志文件的变化。…

前端面试资料集合

整理了前端面试相关资料&#xff0c;包含课程(5们)、面试题(道)、面试书籍(本)&#xff0c;希望对加大有用&#xff0c;欢迎收藏。 面试课程&#xff1a; 1、前端开发技术面试指南及真题讲解带你入坑BAT 这门课程主要针对想要进入BAT&#xff08;百度、阿里巴巴、腾讯&#…

(11)电调和电机

文章目录 前言 1 电机 2 无刷电机ESC 2.1 协议 2.2 使用BLHeli32或BLHeli-S配置固件的ESC 2.3 遥测 3 ESC接线和大型QuadPlane ESC问题 前言 ArduPilot 支持各种 ESC、电机和电子燃油系统。以下页面提供了最流行类型的设置说明。 ArduPilot 支持各种 ESC、电机和电子燃…

[oeasy]python0032_ 火星文字幕_os_操作系统的作用_time_sleep_延迟

火星文字幕_os_操作系统的作用_time_sleep_延迟 &#x1f94b; 回忆上次内容 这次我们了解了unix系统 在multics项目失败后汤普森和里奇 为了 玩游戏自制了 unix 这个世界从此有了 操作系统operating systemos 这个os有什么用吗&#xff1f;&#x1f914; 回忆shell执行…