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/

相关文章
|
26天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
35 4
|
2月前
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
|
2月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
2月前
|
数据处理 Python
Python 高级技巧:深入解析读取 Excel 文件的多种方法
在数据分析中,从 Excel 文件读取数据是常见需求。本文介绍了使用 Python 的三个库:`pandas`、`openpyxl` 和 `xlrd` 来高效处理 Excel 文件的方法。`pandas` 提供了简洁的接口,而 `openpyxl` 和 `xlrd` 则针对不同版本的 Excel 文件格式提供了详细的数据读取和处理功能。此外,还介绍了如何处理复杂格式(如合并单元格)和进行性能优化(如分块读取)。通过这些技巧,可以轻松应对各种 Excel 数据处理任务。
201 16
|
2月前
|
存储 C#
【C#】大批量判断文件是否存在的两种方法效率对比
【C#】大批量判断文件是否存在的两种方法效率对比
42 1
|
2月前
|
JSON 数据格式
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
79 2
|
2月前
|
IDE 开发工具 数据安全/隐私保护
Python编程--实现用户注册信息写入excel文件
Python编程--实现用户注册信息写入excel文件
|
2月前
|
前端开发 JavaScript API
前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法
前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法
141 0
|
2月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
96 0
|
2月前
|
iOS开发 MacOS Python
Python编程-macOS系统数学符号快捷键录入并生成csv文件转换为excel文件
Python编程-macOS系统数学符号快捷键录入并生成csv文件转换为excel文件