.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 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;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
- 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/
时间: 2024-10-12 22:04:53