C#匯出資料到Excel的幾種方法

來源:互聯網
上載者:User

 

 

1.首先聲明,這些方法也都是本人搜集的資料,然後為已所用,程式中不足之處,還請高手指點.
2.網上有好多關於用SQL語句匯入匯出的例子,這裡不再重複寫了。

方法1:調用com組件,匯出access資料到Excel,就是直接調用access的匯出功能,此方法速度超級快
using Access;

Access.ApplicationClass oAccess = new Access.ApplicationClass();
oAccess.Visible = false;
try
{
//ACCESS9:
oAccess.OpenCurrentDatabase("d://wcf.mdb",false,"");
//匯出到excel
oAccess.DoCmd.TransferSpreadsheet(Access.AcDataTransferType.acExport,Access.AcSpreadSheetType.acSpreadsheetTypeExcel9,"工作表名","d://wcf.xls",true,null,null);
//匯入txt
//oAccess.DoCmd.TransferText(Access.AcTextTransferType.acExportDelim,"","Enterprise","d://wcf.txt",true,"",0);
oAccess.CloseCurrentDatabase();
oAccess.DoCmd.Quit(Access.AcQuitOption.acQuitSaveNone);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oAccess);
oAccess = null;
MessageBox.Show("匯入成功");
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
GC.Collect();
}
方法2:此方法速度也是超級快,只不過匯出的格式非標準的Excel格式,預設工作表名與檔案名稱相同
string FileName="d://abc.xls";
System.Data.DataTable dt=new System.Data.DataTable();
FileStream objFileStream;
StreamWriter objStreamWriter;
string strLine="";
objFileStream = new FileStream(FileName,FileMode.OpenOrCreate,FileAccess.Write);
objStreamWriter = new StreamWriter(objFileStream,System.Text.Encoding.Unicode);

for(int i=0;i<dt.Columns.Count;i++)
{
strLine=strLine+dt.Columns[i].ColumnName.ToString()+Convert.ToChar(9);
}
objStreamWriter.WriteLine(strLine);
strLine="";

for(int i=0;i<dt.Rows.Count;i++)
{
strLine=strLine+(i+1)+Convert.ToChar(9);
for(int j=1;j<dt.Columns.Count;j++)
{
strLine=strLine+dt.Rows[i][j].ToString()+Convert.ToChar(9);
}
objStreamWriter.WriteLine(strLine);
strLine="";
}
objStreamWriter.Close();
objFileStream.Close();

方法3:用Ado.net 此方法速度較以上兩個顯得慢了一些,資料量越大越明顯
int Id=0;
string Name="測試";
string FileName="d://abc.xls";
System.Data.DataTable dt=new System.Data.DataTable();
long totalCount=dt.Rows.Count;
long rowRead=0;
float percent=0;
OleDbParameter[] parm=new OleDbParameter[dt.Columns.Count];
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName +";Extended Properties=Excel 8.0;";
OleDbConnection objConn = new OleDbConnection(connString);
OleDbCommand objCmd = new OleDbCommand();
objCmd.Connection = objConn;
objConn.Open();
//建立表結構
objCmd.CommandText = @"CREATE TABLE Sheet1(序號 Integer,名稱 varchar)";
objCmd.ExecuteNonQuery();
//建立插入動作的Command
objCmd.CommandText = "INSERT INTO Sheet1("+Id+","+Name+")";
parm[0]=new OleDbParameter("@Id", OleDbType.Integer);
objCmd.Parameters.Add(parm[0]);
parm[1]=new OleDbParameter("@Company", OleDbType.VarChar);
objCmd.Parameters.Add(parm[1]);
//遍曆DataTable將資料插入建立的Excel檔案中
for(int i=0;i<dt.Rows.Count;i++)
{  
parm[0].Value=i+1;
for(int j=1;j<parm.Length;j++)
{
parm[j].Value =dt.Rows[i][j];
}
objCmd.ExecuteNonQuery();
rowRead++;
percent=((float)(100*rowRead))/totalCount;  
//this.FM.CaptionText.Text = "正在匯出資料,已匯出[" + percent.ToString("0.00") + "%]...";
if(i==dt.Rows.Count-1)
//this.FM.CaptionText.Text = "請稍後......";
System.Windows.Forms .Application.DoEvents();
}
objConn.Close();
//this.FM.CaptionText.Text = "";

方法4:此方法調用com組件,速度都慢於以上3個方法
using Excel;

System.Data.DataTable dt=new System.Data.DataTable();
string FileName="d://abc.xls";

long totalCount=dt.Rows.Count;
long rowRead=0;
float percent=0;
Excel.Application xlApp=null;
xlApp=new Excel.Application();
Excel.Workbooks workbooks=xlApp.Workbooks;
Excel.Workbook workbook=workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel.Worksheet worksheet=(Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
Excel.Range range;

//寫入欄位
for(int i=0;i<dt.Columns.Count;i++)
{
worksheet.Cells[1,i+1]=dt.Columns[i].ColumnName; 
range=(Excel.Range)worksheet.Cells[1,i+1];
}
for(int r=0;r<dt.Rows.Count;r++)
{
worksheet.Cells[r+2,1]=r+1;
for(int i=0;i<dt.Columns.Count;i++)
{
//worksheet.Cells[r+2,i+1]=dt.Rows[r][i];
if(i+1!=dt.Columns.Count)
worksheet.Cells[r+2,i+2]=dt.Rows[r][i+1];
}
rowRead++;
percent=((float)(100*rowRead))/totalCount;  
//this.FM.CaptionText.Text = "正在匯出資料,已匯出[" + percent.ToString("0.00") + "%]...";
System.Windows.Forms .Application.DoEvents();
}
range=worksheet.get_Range(worksheet.Cells[2,1],worksheet.Cells[dt.Rows.Count+2,dt.Columns.Count]);
workbook.Saved =true;
workbook.SaveCopyAs(FileName);
//this.FM.CaptionText.Text = "";

方法5:利用剪貼簿 ,有人說此方法很快,但是我用時,這種方法最慢,請高手指點.
System.Data.DataTable dt=new System.Data.DataTable();
string filePath=@"d:/abc.xls";

object oMissing = System.Reflection.Missing.Value;
Excel.ApplicationClass xlApp = new Excel.ApplicationClass();
try
{
xlApp.Visible = false;
xlApp.DisplayAlerts = false;
Excel.Workbooks oBooks = xlApp.Workbooks;
Excel._Workbook xlWorkbook = null;
xlWorkbook = oBooks.Open(filePath,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,
oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing);

Excel.Worksheet xlWorksheet;
// 添加入一個新的Sheet頁。
xlWorksheet = (Excel.Worksheet)xlWorkbook.Worksheets.Add(oMissing,oMissing,1,oMissing);
// 以TableName作為新加的Sheet頁名。
xlWorksheet.Name ="企業名錄";
// 取出這個DataTable中的所有值,暫存於stringBuffer中。
string stringBuffer = "";

for( int j=0; j<dt.Rows.Count; j++ )
{
for( int k=0; k<dt.Columns.Count; k++ )
{
stringBuffer += dt.Rows[j][k].ToString();
if( k < dt.Columns.Count - 1 )
stringBuffer += "/t";
}
stringBuffer += "/n";
}
// 利用系統剪下板
System.Windows.Forms.Clipboard.SetDataObject("");
// 將stringBuffer放入剪下板。
System.Windows.Forms.Clipboard.SetDataObject(stringBuffer);
// 選中這個sheet頁中的第一個儲存格
((Excel.Range)xlWorksheet.Cells[1,1]).Select();
// 粘貼!
xlWorksheet.Paste(oMissing,oMissing);
// 清空系統剪下板。
System.Windows.Forms.Clipboard.SetDataObject("");

// 儲存並關閉這個活頁簿。
xlWorkbook.Close( Excel.XlSaveAction.xlSaveChanges, oMissing, oMissing );
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook);
xlWorkbook = null;

這些方法都沒有關閉Excel進程,這種資料很多,在此不多寫了,希望這些能對一些人帶來方便.

 

 http://community.csdn.net/Expert/topic/4570/4570895.xml?temp=1.687258E-02

附:

http://topic.csdn.net/u/20091108/01/2893410f-001d-4b35-8252-cd3f941b7be7.html

http://topic.csdn.net/u/20091104/14/f7c72172-2bd8-4a1a-b5d1-c0d80878bf27.html

 

說明:關於效率方面

1.直接用命令列效率最高

2.用資料來源的方式其次

3.用COM組件最慢,但是如果是批量的匯入效率可能會高點

 

 

//========================

其他總結

 

 

這個是操作EXCEL的··應該是你想要的?··如果要匯出的執行個體的話其他的人回答就是了
1 開啟Excel dim myexcel as new Excel.Application() myexcel.visible=true

2 添加新的活頁簿 myexcel.Workbooks.add()

3 設定第二個工作表為使用中工作表 myexcel.worksheets(2).Acivate()

4 開啟指定的Excel檔案 myexcel.workbooks.open("c:/my.xls")

5 顯示Excel視窗 myexcel.visible=true

6 更改Excel的標題列 myexcel.caption="歡迎,歡迎!"

7 為Excel的儲存格賦值 myexcel.cells(1,4).value=100 此語句使Excel當前工作表的第一行第四列,即D1儲存格等於100, 也可以這樣寫: myexcel.Range("D1").value=100

8 設定指定列的寬度(單位:字元個數) myexcel.ActiveSheet.colums(1).columnwidth=20 設定當前工作表第1列的寬度為20

9 設定指定行的高度(單位:磅) myexcel.ActiveSheet.rows(1).rowHeight=1/0.035 1磅 =0.035厘米 設定第1行的高度為1CM

10 插入分頁符 myexcel.Activesheet.rows(20).pagebreak=1 在第20行前插入分頁符

11 刪除分頁符 myexcel.Activesheet.columns(20).pagebreak=0 在第20列前刪除分頁符

12 指定邊框線的寬度 myexcel.Activesheet.range("B3:D3").borders(1).weight=3 其中borders參數指定儲存格邊框的位置: 1:左 2:右 3:頂 4:底 5:斜/ 6:斜/

13 指定邊框線條的類型 myexcel.Activesheet.range("B1:D3").borders(2).linestyle=1 此語句將當前工作表的B1:D3儲存格的右邊框設定為實線 linestyle參數: 1:細實線 2:細虛線 3:點虛線 4:雙細實線

14 設定頁尾 myexcel.activesheet.pagesetup.centerfooter="第&p頁" 注意:設定頁首頁尾時要保證電腦上裝有印表機,否則出錯!

15 設定頁首 myexcel.activesheet.pagesetup.centerfooter="第&p頁"

16 設定頁首到頂斷距離為2cm myexcel.Activesheet.pagesetup.Headermargin=2/0.035

17 設定頁尾到底端距離為2cm myexcel.Activesheet.pagesetup.Footermargin=2/0.035

18 設定頂邊邊距為2cm myexcel.Activesheet.pagesetup.topmargin=2/0.035

19 設定底邊邊距為2cm myexcel.Activesheet.pagesetup.Bottommargin=2/0.035

20 設定左邊邊距為2cm myexcel.Activesheet.pagesetup.Leftmargin=2/0.035

21 設定右邊邊距為2cm myexcel.Activesheet.pagesetup.Rightmargin=2/0.035

22 設定頁面水平置中 myexcel.activesheet.pagesetup.CenterHorizontally=true

23 設定頁面垂直置中 myexcel.activesheet.pagesetup.Centervertically=true

24 設定頁面紙張大小 (1,窄行 8.5*11 ;39 ,寬行 14*11) myexcel.activesheet.pagesetup.papersize=1

25 列印儲存格網格線 myexcel.activesheet.pagesetup.PrintGridlines=true

26 複製整個工作表 myexcel.activesheet.Usedrange.Copy

27 複製指定地區 myexcel.activesheet.range("a1:b5").Copy

28 粘貼 myexcel.worksheets("sheet2").range("A1").PasteSpecial

29 在第2行前插入一行 myexcel.activesheet.rows(2).Insert

30 在第2列前插入一列 myexcel.Activesheet.Columns(2).Insert

31 合并 C4:D4 儲存格 myexcel.Activesheet.Range("C4:D4").Merge()

32 自動調整第2列列寬 myexcel.activesheet.Columns(2).AutoFit

33 設定字型 myexcel.Activesheet.cells(2,1).font.name="黑體"

34 設定字型大小 myexcel.Activesheet.cells(2,1).font.size=25

35 設定字型為斜體 myexcel.Activesheet.cells(2,1).font.Italic=true

36 設定字型為粗體 myexcel.Activesheet.cells(2,1).font.Bold=true

37 清除儲存格內容 myexcel.activesheet.cells(2,1).ClearContents

38 預覽列印工作表 myexcel.Activesheet.PrintPreview

39 列印工作表 myexcel.Activesheet.Printout

40 工作表另存新檔 myexcel.ActiveWorkbook.saveas("C:/book2.xls")

41 放棄存檔 myexcel.ActiveWorkbook.saved=false

42 關閉活頁簿 myexcel.Workbooks.close

43 退出 Excel myexcel.quit

http://wenwen.soso.com/z/q183619223.htm

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.