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

news2024/9/22 5:36:01

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

3、效果展示

在这里插入图片描述

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

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

相关文章

预训练语言模型的前世今生 - 从Word Embedding到BERT

目录 一、预训练 1.1 图像领域的预训练1.2 预训练的思想二、语言模型 2.1 统计语言模型2.2 神经网络语言模型三、词向量 3.1 独热&#xff08;Onehot&#xff09;编码3.2 Word Embedding四、Word2Vec 模型五、自然语言处理的预训练模型六、RNN 和 LSTM 6.1 RNN6.2 RNN 的梯度消…

Maven的相关配置和使用

Maven的配置&#xff1a; Maven的配置和Java差不多&#xff0c;从镜像站下载相关的Maven版本压缩包&#xff0c;然后解压到自己的D盘&#xff0c;在进行系统变量的配置&#xff0c;新建变量Maven_HOME&#xff0c;然后值设置为Maven的地址&#xff0c;一定是点开文件后就能出现…

【LLM】文生视频相关开源数据集(VidGen、Panda、Cogvideox等)

note 总结了VidGen数据集、Panda-70m数据集、Openvid数据集、OpenVid-1M数据集、Cogvideox训练数据准备过程、ShareGPT4Video数据集等在一篇综述中还总结了评估指标包括&#xff1a;峰值信噪比&#xff08;PSNR&#xff09;、结构相似性指数&#xff08;SSIM&#xff09;、Inc…

NLP从零开始------16.文本中阶处理之序列到序列模型(1)

1. 序列到序列模型简介 序列到序列( sequence to sequence, seq2seq) 是指输入和输出各为一个序列(如一句话) 的任务。本节将输入序列称作源序列&#xff0c;输出序列称作目标序列。序列到序列有非常多的重要应用&#xff0c; 其中最有名的是机器翻译( machine translation), 机…

Day-01—QT项目的新建

1.选择创建的项目类型&#xff0c;可以看到&#xff0c;这里可以创建多种语言的项目&#xff0c;可以直接用QT来进行前期C 的学习。 2.创建的名字中不要包含中文&#xff0c;可以用英文就用英文&#xff0c;如果不会英文&#xff0c;就用拼音也可以&#xff0c;保存地址中也不要…

aosp13自由窗口项目出现图库app划线不全bug修改-安卓framework实战项目

背景 在学习了马哥的分屏自由窗口pip专题后&#xff0c;进行了相关的自由窗口等比例放大操作&#xff0c;但是操作测试过程中学员朋友们有发现图库app进入自由窗口进行操作放大有红框显示不全的问题。 但是使用图库app时候发现红框居然显示不完整&#xff0c;具体效果如下图&a…

C语言基础(三十)

1、希尔排序&#xff1a; #include "date.h" #include <stdio.h> #include <stdlib.h> #include <time.h> // 希尔排序函数 void shellSort(int arr[], int n) { for (int gap n / 2; gap > 0; gap / 2) { // 对每个子列表进行插入排…

90分钟实现一门编程语言——极简解释器教程

关键字 解释器, C#, Scheme, 函数式编程 关于 本文介绍了如何使用C#实现一个简化但全功能的Scheme方言——iScheme及其解释器&#xff0c;通过从零开始逐步构建&#xff0c;展示了编程语言/解释器的工作原理。 作者 Lucida a.k.a Luc 如果你是通过移动设备阅读本教程&…

面向对象软件编程——OOP入门实践

工作一段时间了&#xff0c;工作内容趋向于算法模型的复现&#xff0c;就是复现论文算法然后结合业务逻辑开发软件。但是在设计和开发软件时&#xff0c;发现对于OOP理念和软件的设计原则等在实战中还是非常缺乏。于是开始补习&#xff0c;基础软件开发技术。 书籍&#xff1a;…

Arduino UNO 编程 第一期——下载及使用

字幕君已上线...... 副字幕君已上线...... 计数君已上线...... 彩色字幕君 ( 花了重金请来的 ) 已上线...... Doge智能系统已上线...... Doge:嗨嗨我又来了&#xff01; 观众们......已上线&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; OK LETS GO&am…

理解大模型中的Cursor技术:优化长文本推理的前沿方案

理解大模型中的Cursor技术&#xff1a;优化长文本推理的前沿方案 随着自然语言处理&#xff08;NLP&#xff09;领域的快速发展&#xff0c;大型语言模型&#xff08;如GPT系列&#xff09;已广泛应用于文本生成、对话系统和复杂推理任务。然而&#xff0c;随着文本长度的增加…

灾难性遗忘问题(Catastrophic Forgetting,CF)是什么?

灾难性遗忘问题&#xff08;Catastrophic Forgetting&#xff0c;CF&#xff09;是什么&#xff1f; 在深度学习和人工智能领域中&#xff0c;“灾难性遗忘”&#xff08;Catastrophic Forgetting&#xff09;是指当神经网络在增量学习&#xff08;Incremental Learning&#…

用AI生成旅游打卡照!FLUX假装去旅行lora的使用【附工作流】

hello&#xff01;今天我们来聊聊一个特别有意思的话题&#xff1a;如何用AI生成那些看起来像是去过世界各地的旅游打卡照&#xff0c;还能在朋友圈里炫耀一番。很多人看到这些照片都会问&#xff1a;“你真的去过这些地方吗&#xff1f;” 而且最主要的是这种图片做点自媒体旅…

数据仓库系列13:增量更新和全量更新有什么区别,如何选择?

你是否曾经在深夜加班时&#xff0c;面对着庞大的数据仓库&#xff0c;思考过这样一个问题&#xff1a;“我应该选择增量更新还是全量更新&#xff1f;” 这个看似简单的选择&#xff0c;却可能影响整个数据处理的效率和准确性。今天&#xff0c;让我们深入探讨这个数据仓库领域…

RT-DETR+Sort 实现目标跟踪

在前一篇博客中&#xff0c;博主介绍了利用YOLOv8与Sort算法实现目标跟踪&#xff0c;在今天这篇博客中&#xff0c;博主将利用RT-DETR算法与Sort算法相结合&#xff0c;从而实现目标跟踪。。 这里博主依旧是采用ONNX格式的模型文件来执行推理过程&#xff0c;由于Sort算法是基…

vue part6

Vue脚手&#xff08;CLI&#xff09; 第一步&#xff08;仅第一次执行&#xff09;&#xff1a;全局安装vue/cli。 npm install -g vue/cli- 第二步&#xff1a;切换到你要创建项目的目录&#xff0c;然后使用命令创建项目vue create xxxx&#xff08;项目名字&#xff09; 第…

el-table利用折叠面板 type=“expand“ 嵌套el-table,并实现 明细数据多选,选中明细数据后返回原数据得嵌套格式

效果图: 废话不多说直接上代码&#xff0c;完整代码展示&#xff1a; <template><el-tableborderref"multipleTable":data"tableData"tooltip-effect"dark"style"width: 100%"><el-table-columnwidth"50"la…

线程池在接受到30个比较耗时的任务时的状态,在前面30个比较耗时的任务还没执行完成的情况下,再来多少个任务会触发拒绝策略?

目录 一、提出问题 二、解答 问题 1: 线程池在接受到30个比较耗时的任务时的状态 问题 2: 在前面30个比较耗时的任务还没执行完成的情况下&#xff0c;再来多少个任务会触发拒绝策略&#xff1f; 总结 一、提出问题 我们首先自定义一个线程池&#xff1a; new ThreadPoo…

18042 计算分段函数值

### 伪代码 1. 读取输入的实数x。 2. 根据x的值计算y&#xff1a; - 如果x < 1&#xff0c;y x。 - 如果1 < x < 10&#xff0c;y 2x - 1。 - 如果x > 10&#xff0c;y 3x - 11。 3. 输出y的值&#xff0c;保留两位小数。 ### C代码 #include <io…

fl studio 21/24破解版(水果音乐制作软件24) v24.1.1.4285附安装教程

fl studio 21/24破解版&#xff0c;又被国内网友称之为水果音乐制作软件24&#xff0c;是Image-Line公司成立26周年而发布的一个版本&#xff0c;是目前互联网上最优秀的完整的软件音乐制作环境或数字音频工作站&#xff0c;包含了编排&#xff0c;录制&#xff0c;编辑&#x…