資源簡介
具體內容請參考我的BLOG:http://blog.csdn.net/smallwhiteyt/archive/2009/11/08/4784771.aspx
如果你耐心仔細看完本文,相信以后再遇到導出EXCLE操作的時候你會很順手覺得SO EASY,主要給新手朋友們看的,老鳥可以直接飄過了,花了一晚上的時間寫的很辛苦,如果覺得對你有幫助煩請留言支持一下,我會寫更多基礎的原創內容來回報大家。
C#導出數據到EXCEL表格是個老生常談的問題了,寫這篇文章主要是給和我一樣的新手朋友提供兩種導出EXCEL的方法并探討一下導出的效率問題,本文中的代碼直接就可用,其中部分代碼參考其他的代碼并做了修改,拋磚引玉,希望大家一起探討,如有不對的地方還請大家多多包涵并指出來,我也是個新手,出錯也是難免的。
首先先總結下自己知道的導出EXCEL表格的方法,大致有以下幾種,有疏漏的請大家補充。
1.數據逐條逐條的寫入EXCEL
2.通過OLEDB把EXCEL做為數據源來寫
3.通過RANGE范圍寫入多行多列內存數據到EXCEL
4.利用系統剪貼板寫入EXCEL
好了,我想這些方法已經足夠完成我們要實現的功能了,方法不在多,在精,不是么?以上4中方法都可以實現導出EXCEL,方法1為最基礎的方法,意思就是效率可能不是太高,當遇到數據量過大時所要付出的時間也是巨大的,后面3種方法都是第一種的衍生,在第一種方法效率低下的基礎上改進的,這里主要就是一個效率問題了,當然如果你數據量都很小,我想4種方法就代碼量和復雜程度來說第1種基本方法就可以了,或當你的硬件非常牛逼了,那再差的方法也可以高效的完成也沒有探討的實際意義了,呵呵說遠了,本文主要是在不考慮硬件或同等硬件條件下單從軟件角度出發探討較好的解決方案。

代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.ComponentModel;
using?System.Data;
using?System.Drawing;
using?System.Linq;
using?System.Text;
using?System.Windows.Forms;
using?System.Data.OleDb;
using?System.Reflection;
using?Microsoft.Office.Interop.Excel;
using?System.Runtime.InteropServices;
/*
?*?軟件名:C#實現導出EXCEL?
?*?作者:SmallWhite
?*?2009-11-7?23:00
?*?QQ?296326
?*?EMail?smallwhite@yahoo.cn
?*/
namespace?DatagridviewToExcel
{
????public?partial?class?Form1?:?Form
????{
????????System.DateTime?TimeP?=?new?System.DateTime(0);
????????public?Form1()
????????{
????????????InitializeComponent();
????????}
????????private?void?Form1_Load(object?sender?EventArgs?e)
????????{
????????????button2.Enabled?=?false;
????????????button3.Enabled?=?false;
????????}
????????#region?打開文件獲取文件路徑
????????///?
????????///?
????????///?
????????///?
????????private?string?getPath()
????????{
????????????//打開一個文件選擇框
????????????openFileDialog1.title?=?“Excel文件“;
????????????openFileDialog1.FileName?=?““;
????????????openFileDialog1.InitialDirectory?=?Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);//為了獲取特定的系統文件夾,可以使用System.Environment類的靜態方法GetFolderPath()。該方法接受一個Environment.SpecialFolder枚舉,其中可以定義要返回路徑的哪個系統目錄
????????????openFileDialog1.Filter?=?“Excel文件(*.xls)|*.xls“;
????????????openFileDialog1.ValidateNames?=?true;?????//文件有效性驗證ValidateNames,驗證用戶輸入是否是一個有效的Windows文件名
????????????openFileDialog1.CheckFileExists?=?true;??//驗證路徑有效性
????????????openFileDialog1.CheckPathExists?=?true;?//驗證文件有效性
????????????string?strName?=?string.Empty;
????????????if?(openFileDialog1.ShowDialog()?==?DialogResult.OK)
????????????{
????????????????strName?=?openFileDialog1.FileName;
????????????}
????????????if?(strName?==?““)
????????????{
????????????????MessageBox.Show(“沒有選擇Excel文件!無法進行數據導入“);
????????????}
????????????return?strName;
????????}
????????#endregion
????????#region?導入一個EXCEL表格的數據進DATASET以進行測試之用
????????///?
????????///?
????????///?
????????void?loadSouce()
????????{
????????????try
????????????{
????????????????//連接EXCEL數據源
????????????????string?strPath?=?this.getPath();
????????????????string?strConn?=?“Provider=Microsoft.Jet.OLEDB.4.0;Data?Source=“?+?strPath?+?“;Extended?Properties=“?+?“\““?+?“Excel?8.0;HDR=Yes;IMEX=1“?+?“\““;
????????????????OleDbConnection?conn?=?new?OleDbConnection(strConn);
????????????????conn.Open();
????????????????/*
?????????????????如果用戶把sheet表名改了就是報下面的錯:
????????????????‘sheet1$‘?不是一個有效名稱。請確認它不包含無效的字符或標點,且名稱不太長。?
????????????????如果可以動態獲得Excel中各個sheet的名稱能動態的選中返回哪個sheet的數據,
????????????????即使用戶更改了名稱也不怕,完全可以把所有sheet的名稱列出來供用戶選擇:?
????????????????下面就把解決問題的代碼列出來,主要用到了OleDbConnection.GetOleDbSchemaTable()方法
?????????????????*/
????????????????//返回Excel的架構,包括各個sheet表的名稱類型,創建時間和修改時間等
????????????????System.Data.DataTable?dtSheetName?=?conn.GetOleDbSc
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????8704??2009-11-07?21:02??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\bin\Debug\DatagridviewToExcel.exe
?????文件??????22016??2009-11-07?21:02??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\bin\Debug\DatagridviewToExcel.pdb
?????文件??????14328??2009-11-07?21:02??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\bin\Debug\DatagridviewToExcel.vshost.exe
?????文件????????490??2007-07-21?01:33??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\bin\Debug\DatagridviewToExcel.vshost.exe.manifest
?????文件?????217088??2009-11-08?00:58??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\bin\Release\DatagridviewToExcel.exe
?????文件??????32256??2009-11-08?00:58??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\bin\Release\DatagridviewToExcel.pdb
?????文件??????14328??2009-11-08?00:58??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\bin\Release\DatagridviewToExcel.vshost.exe
?????文件????????490??2007-07-21?01:33??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\bin\Release\DatagridviewToExcel.vshost.exe.manifest
?????文件????1100392??2009-11-06?13:36??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\bin\Release\Microsoft.Office.Interop.Excel.dll
?????文件??????64088??2009-11-06?13:36??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\bin\Release\Microsoft.Vbe.Interop.dll
?????文件?????223800??2009-11-06?13:36??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\bin\Release\office.dll
?????文件???????4197??2009-11-07?23:54??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\DatagridviewToExcel.csproj
?????文件??????20857??2009-11-08?00:58??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\Form1.cs
?????文件???????7581??2009-11-07?23:50??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\Form1.Designer.cs
?????文件?????156236??2009-11-07?23:50??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\Form1.resx
?????文件??????99678??2009-11-07?23:10??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\ICO.ico
?????文件???????1024??2009-11-07?21:02??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\obj\Debug\DatagridviewToExcel.csproj.FileListAbsolute.txt
?????文件????????847??2009-11-07?21:02??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\obj\Debug\DatagridviewToExcel.csproj.GenerateResource.Cache
?????文件???????8704??2009-11-07?21:02??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\obj\Debug\DatagridviewToExcel.exe
?????文件????????180??2009-11-07?21:02??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\obj\Debug\DatagridviewToExcel.Form1.resources
?????文件??????22016??2009-11-07?21:02??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\obj\Debug\DatagridviewToExcel.pdb
?????文件????????180??2009-11-07?21:02??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\obj\Debug\DatagridviewToExcel.Properties.Resources.resources
?????文件???????1403??2009-11-08?00:58??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\obj\Release\DatagridviewToExcel.csproj.FileListAbsolute.txt
?????文件????????847??2009-11-07?23:50??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\obj\Release\DatagridviewToExcel.csproj.GenerateResource.Cache
?????文件?????217088??2009-11-08?00:58??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\obj\Release\DatagridviewToExcel.exe
?????文件?????100244??2009-11-07?23:54??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\obj\Release\DatagridviewToExcel.Form1.resources
?????文件??????32256??2009-11-08?00:58??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\obj\Release\DatagridviewToExcel.pdb
?????文件????????180??2009-11-07?23:54??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\obj\Release\DatagridviewToExcel.Properties.Resources.resources
?????文件???????8663??2009-11-07?21:12??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\obj\Release\ResolveAssemblyReference.cache
?????文件????????500??2009-11-07?20:50??C#導出數據到EXCEL方法談(附實例源碼和超級無敵詳細講解)\DatagridviewToExcel\DatagridviewToExcel\Program.cs
............此處省略25個文件信息
- 上一篇:C#+AE根據點坐標生成shp文件
- 下一篇:一個很漂亮的WPF TreeView
評論
共有 條評論