C#操作Excel文件三种方式

简介: C#操作Excel文件三种方式

.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 /// 
 2 /// 写入Excel文档
 3 /// 
 4 public bool SaveFP2toExcel(string filePathath)
 5 {
 6     try
 7     {
 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;i0].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

Start Microsoft Visual Studio .NET.

On the File menu, click New, and then click Project. Select Windows Application from the Visual C# Project types. Form1 is created by default.

Add a reference to the Microsoft Excel Object Library. To do this, follow these steps:

On the Project menu, click Add Reference.

On the COM tab, locate Microsoft Excel Object Library, and click Select.

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.

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/

相关文章
|
5月前
|
Python
Excel中如何批量重命名工作表与将每个工作表导出到单独Excel文件
本文介绍了如何在Excel中使用VBA批量重命名工作表、根据单元格内容修改颜色,以及将工作表导出为独立文件的方法。同时提供了Python实现导出工作表的代码示例,适用于自动化处理Excel文档。
|
7月前
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
380 10
|
7月前
|
存储 监控 算法
基于 C# 的局域网计算机监控系统文件变更实时监测算法设计与实现研究
本文介绍了一种基于C#语言的局域网文件变更监控算法,通过事件驱动与批处理机制结合,实现高效、低负载的文件系统实时监控。核心内容涵盖监控机制选择(如事件触发机制)、数据结构设计(如监控文件列表、事件队列)及批处理优化策略。文章详细解析了C#实现的核心代码,并提出性能优化与可靠性保障措施,包括批量处理、事件过滤和异步处理等技术。最后,探讨了该算法在企业数据安全监控、文件同步备份等场景的应用潜力,以及未来向智能化扩展的方向,如文件内容分析、智能告警机制和分布式监控架构。
211 3
|
12月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
2778 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
10月前
|
文字识别 Serverless 开发工具
【全自动改PDF名】批量OCR识别提取PDF自定义指定区域内容保存到 Excel 以及根据PDF文件内容的标题来批量重命名
学校和教育机构常需处理成绩单、报名表等PDF文件。通过OCR技术,可自动提取学生信息并录入Excel,便于统计分析和存档管理。本文介绍使用阿里云服务实现批量OCR识别、内容提取、重命名及导出表格的完整步骤,包括开通相关服务、编写代码、部署函数计算和设置自动化触发器等。提供Python示例代码和详细操作指南,帮助用户高效处理PDF文件。 链接: - 百度网盘:[链接](https://pan.baidu.com/s/1mWsg7mDZq2pZ8xdKzdn5Hg?pwd=8866) - 腾讯网盘:[链接](https://share.weiyun.com/a77jklXK)
1456 5
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分到不同的工作表中。本文通过一个示例代码展示了如何生成一个包含总成绩表和三个班级表的Excel文件。代码首先创建了一个包含学生姓名、班级和各科成绩的数据框,然后按班级分组,将每个班级的数据分别写入不同的工作表。最后,生成的Excel文件将包含四个工作表,分别为总成绩表和三个班级的成绩表。
233 6
按条件将Excel文件拆分到不同的工作表
|
12月前
|
C#
基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
229 9
|
Python
批量将不同的工作簿合并到同一个Excel文件
本文介绍如何使用Python的`pandas`库批量合并不同工作簿至同一Excel文件。通过模拟生成三个班级的成绩数据,分别保存为Excel文件,再将这些文件合并成一个包含所有班级成绩的总成绩单。步骤包括安装必要库、生成数据、保存与合并工作簿。
379 6
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分为多个工作表。本文通过一个具体示例,展示了如何根据学生班级将成绩数据拆分到不同的工作表中,并生成一个包含总成绩表和各班级成绩表的Excel文件。代码简洁明了,适合初学者学习和应用。
393 6
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
263 1

热门文章

最新文章