C#操作Excel文件三种方式及连接字符串

article/2025/8/27 22:08:55

转自:http://www.cnblogs.com/JacobHuang/p/5663926.html

.Net平台上对Excel进行操作主要有两种方式。第一种,把Excel文件看成一个数据库,通过OleDb的方式进行读取与操作;第二种,调用Excel的COM组件。两种方式各有特点。

注意一些简单的问题1.excel文件只能存储65535行数据,如果你的数据大于65535行,那么就需要将excel分割存放了。2.关于乱码,这主要是字符设置问题。


 

一、OleDb方式

  • 读取Excel文件

复制代码

 1 //加载Excel   2 public static DataSet LoadDataFromExcel(string filePath)  3 {  4     try  5     {  6         string strConn;  7         strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";  8         OleDbConnection OleConn = new OleDbConnection(strConn);  9         OleConn.Open();  
10         String sql = "SELECT * FROM  [Sheet1$]";//可是更改Sheet名称,比如sheet2,等等   
11   
12         OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);  
13         DataSet OleDsExcle = new DataSet();  
14         OleDaExcel.Fill(OleDsExcle, "Sheet1");  
15         OleConn.Close();  
16         return OleDsExcle;  
17     }  
18     catch (Exception err)  
19     {  
20         MessageBox.Show("数据绑定Excel失败!失败原因:" + err.Message, "提示信息",  
21             MessageBoxButtons.OK, MessageBoxIcon.Information);  
22         return null;  
23     }  
24 }  

复制代码

访问.xls的文件使用的是“Microsoft.Jet.OLEDB.4.0”,访问.xlsx的文件使用的是“Microsoft.Ace.OleDb.12.0”

  • 写入excel文件

复制代码

 1 /// <summary>2 /// 写入Excel文档3 /// </summary>4 public bool SaveFP2toExcel(string filePathath)5 {6     try7     {8         string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ filePathath +";Extended Properties=Excel 8.0;";9         OleDbConnection conn = new OleDbConnection(strConn);
10         conn.Open();  
11         System.Data.OleDb.OleDbCommand cmd=new OleDbCommand ();
12         cmd.Connection =conn;
13 
14         for(int i=0;i<fp2.Sheets [0].RowCount -1;i++)
15         {
16             if(fp2.Sheets [0].Cells[i,0].Text!="")
17             {
18                 cmd.CommandText ="INSERT INTO [sheet1$] (工号,姓名,部门,职务,日期,时间) VALUES('"+fp2.Sheets [0].Cells[i,0].Text+ "','"+
19                 fp2.Sheets [0].Cells[i,1].Text+"','"+fp2.Sheets [0].Cells[i,2].Text+"','"+fp2.Sheets [0].Cells[i,3].Text+
20                 "','"+fp2.Sheets [0].Cells[i,4].Text+"','"+fp2.Sheets [0].Cells[i,5].Text+"')";
21                 cmd.ExecuteNonQuery ();
22             }
23         }
24         
25         conn.Close ();
26         return true;
27     }
28     catch(System.Data.OleDb.OleDbException ex)
29     {
30         Console.WriteLine ("写入Excel发生错误:"+ex.Message );
31         return false;
32     }
33 }

复制代码

 


 

二、Excel COM组件

一个.NET组件事实上是一个.NET下的DLL,它包含的不仅是运行程序本身,更重要的是包含这个DLL的描述信息(Meta Data,即元数据),而一个COM组件是用其类库(TLB)储存其描述信息。这些COM组件都是非受管代码,要在Visual C#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的.NET组件。所以在用Visual C#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。

添加COM组件

Create an Automation Client for Microsoft Excel

    1. Start Microsoft Visual Studio .NET.
    2. On the File menu, click New, and then click Project. Select Windows Application from the Visual C# Project types. Form1 is created by default.
    3. Add a reference to the Microsoft Excel Object Library. To do this, follow these steps:
      1. On the Project menu, click Add Reference.
      2. On the COM tab, locate Microsoft Excel Object Library, and click Select.
      3. Click OK in the Add References dialog box to accept your selections. If you are prompted to generate wrappers for the libraries that you selected, click Yes.
      4. using Excel = Microsoft.Office.Interop.Excel;
  •  读取Excel文件

复制代码

 1 private void button1_Click(object sender, EventArgs e)2 {3     Excel.Application xlApp ;4     Excel.Workbook xlWorkBook ;5     Excel.Worksheet xlWorkSheet ;6     Excel.Range range ;7 8     string str;9     int rCnt = 0;
10     int cCnt = 0;
11 
12     xlApp = new Excel.Application();
13     xlWorkBook = xlApp.Workbooks.Open("csharp.net-informations.xls");
14     xlWorkSheet = xlWorkBook.Sheets["Sheet1"];
15 
16     range = xlWorkSheet.UsedRange;
17 
18     for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
19     {
20         for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
21         {
22             str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2 ;
23             MessageBox.Show(str);
24         }
25     }
26 
27     xlWorkBook.Close(true, null, null);
28     xlApp.Quit();
29 }

复制代码

  • 写入Excel文件

复制代码

 1 private void button1_Click(object sender, EventArgs e)2 {3     Excel.Application xlApp ;4     Excel.Workbook xlWorkBook ;5     Excel.Worksheet xlWorkSheet ;6     object misValue = System.Reflection.Missing.Value;7 8     xlApp = new Excel.Application();9     xlWorkBook = xlApp.Workbooks.Add(misValue);
10     xlWorkSheet = xlWorkBook.Sheets["Sheet1"];
11 
12     //add some text 
13     xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";
14     xlWorkSheet.Cells[2, 1] = "Adding picture in Excel File";
15 
16     xlWorkBook.SaveAs("csharp.net-informations.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
17     xlWorkBook.Close(true, misValue, misValue);
18     xlApp.Quit();
19 
20     MessageBox.Show ("File created !");
21 }

复制代码

 

主要参考:http://csharp.net-informations.com/excel/files/download/csharp-open-excel_download.htm


三、第三方插件-NPOI

摘要: NPOI,顾名思义,就是POI的.NET版本。那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。在本文发布时,NPOI的最新版本是2.2.1。 

 

NPOI网址  http://npoi.codeplex.com/

C#连接Excel的连接字符串

在c#项目中导入Excel数据的时候,需要连接Excel的各个版本已满足需求,不得不做Excel各个版本的处理。

string fileExt = Path.GetExtension(excelPath); 
string conn = ""; 
if (fileExt == ".xls") 
{ conn = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + excelPath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"; 
} 
else 
{ conn = "Provider = Microsoft.ACE.OLEDB.12.0 ; Data Source =" + excelPath + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'"; 
} 

03和07及以上版本的引擎不同,03是Microsoft.Jet.OLEDB.4.0 ,07及以上是Microsoft.ACE.OLEDB.12.0 。
还发现一个小差别就是Microsoft.Jet.OLEDB.4.0引擎的Excel文档行索引从1开始,而Microsoft.ACE.OLEDB.12.0 的行索引从0开始。
 

 


http://chatgpt.dhexx.cn/article/yZQ5ZUN4.shtml

相关文章

EXCEL 连接符的简单使用

在使用EXCEL处理大量表格数据的时候&#xff0c;学会【连接符】的使用很重要。 如下图所示&#xff1a; 如果我们需要在【A列】的内容后面加两个字【“编号”】两个字&#xff0c;我们就可以使用【连接符“&”】。 1&#xff1a;在B列的此处输入【】。 2&#xff1a;选中【…

Excel连接文本字符串

Excel连接文本字符串 一&#xff1a;CONCATENATE 1&#xff09;使用 CONCATENATE 函数。在这种情况下&#xff0c;您的公式将如下所示。其中X1、X2 和 X3 是你要加入的单元格。 CONCATENATE(X1,X2,X3)2&#xff09;如果要用空格分隔单元格的值&#xff0c;可以将它们添加在引…

STM32开发入门

stm32f407系列单片机基础知识 参考stc公司标准开发手册 STM32F4xx中文参考手册1.pdf ##本文是基于stm32f407zgt6单片机做出介绍 stm32系列单片机是stc公司开发并设计出的一类高速低功耗芯片&#xff0c;其具有众多可用内部资源&#xff0c;在下文将一一介绍 芯片实物图 内部资…

Structured Streaming 快速入门系列(三)Structured Streaming 实战之 Sink

文章目录 SinkHDFS SinkKafka SinkForeach Writer自定义 SinkTigger从 Source 到 Sink 的流程错误恢复和容错语义 Sink 目标和步骤 目标 能够串联两端, 理解整个流式应用, 以及其中的一些根本的原理, 比如说容错语义能够知道如何对接外部系统, 写入数据 步骤 HDFS SinkKaf…

STM32基础入门学习笔记:内部高级功能应用

文章目录&#xff1a; 一&#xff1a;低功耗模式 1.睡眠模式测试程序 NVIC.h NVIC.c key.h key.c main.c 2.停机模式测试程序 main.c 3.待机模式测试程序 main.c 二&#xff1a;看门狗 1.独立看门狗测试程序 iwdg.h iwdg.c main.c 2.窗口看门狗测试程序 wwdg…

STM32初学者入门FreeRTOS操作系统,多任务实时系统

1.详细介绍FreeRTOS操作系统&#xff0c;然后举了几个实例 FreeRTOS&#xff08;Free Real-Time Operating System&#xff09;是一个开源的嵌入式实时操作系统&#xff0c;它专门设计用于在资源有限的嵌入式系统中运行。FreeRTOS提供了一些用于任务管理、调度、同步和通信的功…

【STM32系列汇总】博主的STM32实战快速进阶之路(持续更新)

我把之前在学习和工作中使用STM32进行嵌入式开发的经验和教程等相关整理到这里&#xff0c;方便查阅学习&#xff0c;如果能帮助到您&#xff0c;请帮忙点个赞&#xff1b; 本文的宗旨 STM32 只是一个硬件平台&#xff0c;同样地他可以换成MSP430&#xff0c;NXP的RT等等&…

<STC32G12K128入门第四节>USAT串口(实战使用ESP32进行TCP通信)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、串口是什么?二、UART寄存器1.引脚配置寄存器2.SCON寄存器3.SBUF数据发送接收缓冲区4.辅助寄存器5.串口重定向三、案例总结前言 一、串口是什么? 这个我不想多说就是一种通讯方式,想具体…

STM32入门(二)

STM32入门&#xff08;二&#xff09; 一、新建工程 二、库开发与寄存器开发的关系 固件库就是函数的集合&#xff0c;固件库函数的作用是向下负责与寄存器直接打交道&#xff0c;向上提供用户函数调用的接口&#xff08;API&#xff09;。在51的开发中我们常常的作法是直接操…

STM32 快速入门(内核架构,启动方式,开发参考资料,芯片选型)

文章目录 1、启动方式&#xff08;Start up&#xff09;2、开发参考资料2.1 STM32 中文参考手册 3、通常的芯片选型步骤4、存储器和总线构架4.1 系统构架4.1.1 ICode 总线4.1.2 DCode 总线4.1.3 系统总线4.1.4 DMA 总线4.1.5 总线矩阵4.1.6 AHB/APB 桥(APB) 4.2 存储器组织&…

STM32—串口使用及配置(入门详解)

目录 一、常用函数 二、状态标记变量 三、串口接收中断流程 四、串口工具 五、配置1&#xff08;非中断&#xff09; 六、main.c代码&#xff08;非中断&#xff09; 七、配置2&#xff08;中断&#xff09; 八、main.c代码&#xff08;中断&#xff09; 一、常用函数 …

stm32学习(入门2)

stm32学习心得 提示&#xff1a;写博客纯属第一次练手&#xff0c;不足之处希望多提建议 文章目录 stm32学习心得前言一、什么是串口二、观察现象在我们波特率不同的情况下我们会发现乱码ch340短接波特率不同情况下波特率相同情况下 stm32代码总结 前言 我们前面写了stm32对le…

【STM32Cube】学习笔记(六):DHT11温湿度传感器

文章目录 摘要一、简介1.DHT11数字温湿度传感器2.DHT11性能参数2.DHT11数据结构2.DHT11传输时序 二、硬件电路设计1.模块内部电路2.与单片机相连接电路 三、软件设计1.CubeMX配置2.CubeIDE代码 四、结果显示五、总结附录 摘要 本篇文章用STM32CubeMX和STM32CubeIDE软件编程&am…

STM32入门篇之DHT11温湿度传感器

目录 前言一、项目介绍1.1 项目名称1.2 项目设计思路二、硬件准备2.1 STM32F407ZGT6三、软件准备3.1 Keil53.2 STM32f407固件库3.3 STM32CudeMx3.4 STM32CudeMx的f407软件包四、项目实施4.1 硬件平台开发4.1.1 keil5安装4.1.2 STM32CudeMx安装4.1.3 BSP工程项目创建4.1.4 BSP工…

STM32单片机入门教程---STM32简介

文章目录 一.简介二.片上资源&#xff08;外设&#xff09;三.命名规则四.系统结构五.引脚定义六.启动配置七.最小系统电路 一.简介 STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器STM32家族系列 本次教程使用的是STM32F1系列&#xff08;主流系列&#xff09;ARM ARM…

关于新手学习STM32开发应该如何入门?

对于新手来说&#xff0c;学习STM32开发可能会感到困惑&#xff0c;尤其是在拿到开发板后该如何入门。在这里有嵌入式学习路线&#xff0c;毕设&#xff0c;各种项目&#xff0c;需要留个6。以下是部分内容概述&#xff1a;硬件介绍&#xff1a;了解STM32开发板的基本硬件组成和…

STM32_基础入门(九)_串口通讯详解

持续关注阿杰在线更新保姆式笔记~~坚持日更 参考资料&#xff1a; 《STM32F1开发指南-库函数版本》- 5.3 usart串口文件夹介绍 -第9章 串口实验 《STM32中文参考手册V10》-第25章通用同步异步收发器&#xff08;USART) 片上外设GPIO配置 --《STM32中文参考手册V10》-8.1.11 外…

STM32cubemx教程及STM32入门(四)串口通信

STM32cubemx教程及STM32入门&#xff08;四&#xff09;串口通信 2022.8.24 前言 本章主要介绍串口通信的概念以及在STM32单片机上通过STM32CubeMX和HAL库进行串口通信&#xff0c;同时重定义了printf函数。 简介 在串行通信中&#xff0c;一个字符一个字符地传输&#xff…

STM32系列--从入门到精通

使用STM32也有好几个年头&#xff0c;起初用的开发板已经积灰了&#xff0c;刷干净开发板上的灰&#xff0c;我觉得&#xff0c;应该写点什么东西了&#xff0c;把这些年来调试走过的路&#xff0c;一些心得&#xff0c;一些体会&#xff0c;记录下来&#xff0c;希望对大家有所…

STM32 从入门到精通系列讲解 - 总目录

&#x1f466; 作者介绍&#xff1a;Bazinga bingo&#xff0c;专注C语言应用硬核干货分享&#xff0c;潜心修炼&#xff0c;虚心学习&#xff0c;立志做嵌入式相关赛道的Top。 &#x1f4d5; 本文收录于《STM32开发》专栏&#xff0c;包含STM32内部模块介绍、片内资源开发、不…