1. 程式人生 > >c# 大批量資料匯出到excel

c# 大批量資料匯出到excel

技術要點:1.使用的是StreamWriter sw = new StreamWriter(path, false,Encoding.GetEncoding("gb2312"));最終生成檔案
2.使用 StringBuilder sb = new StringBuilder();類把查詢出來的資料組合為一句超長字串一次性插入到excel中,
sb.Append(ds.Tables[0].Columns[k].ColumnName.ToString() + "\t");
注意,可不能漏了"\t" 這個是非常重要的! 因為c# "\t"就等於 鍵盤上的Tab [朋友們可以試試:開啟新的txt然後輸入1按Tab,輸入2按Tab,輸入3按Tab儲存,然後開啟excel檔案 把剛剛儲存的txt檔案拉進去開啟你就發現原來。這樣寫的話1 2 3 會分別在每個單元格上的了。所以上面才使用 "\t"連起來資料庫出來的那堆資料,這樣一次性導進去,他們就會按照每個單元格來填充!]



需要引用:
using System.Threading;
using System.IO;
方法如下:

C# code
privatevoid button1_Click(object sender, EventArgs e)
        {            
            saveFileDialog1.Title ="儲存的excel檔案";
            saveFileDialog1.InitialDirectory ="c:\\";
            saveFileDialog1.Filter ="Excel97-2003 (*.xls)|*.xls|All Files (*.*)|*.*
"; saveFileDialog1.ShowDialog(); if (saveFileDialog1.FileName ==""|| saveFileDialog1.FileName ==null) { MessageBox.Show("檔名不能為空!"); return; } string path = saveFileDialog1.FileName; string constr
="Data Source=.;Initial Catalog=Exhibition;User ID=sa;Password="; string sql = GetStrSql(); DataSet ds=new DataSet(); using (SqlConnection con =new SqlConnection(constr)) { SqlDataAdapter da =new SqlDataAdapter(sql, con); da.Fill(ds); } if (ds ==null) { MessageBox.Show("資料獲取有誤!"); return; } WriteExcel(ds, path); } publicvoid WriteExcel(DataSet ds, string path) { try { long totalCount = ds.Tables[0].Rows.Count; lblTip.Text ="共有"+ totalCount +"條資料。"; Thread.Sleep(1000); long rowRead =0; float percent =0; StreamWriter sw =new StreamWriter(path, false,Encoding.GetEncoding("gb2312")); StringBuilder sb =new StringBuilder(); for (int k =0; k < ds.Tables[0].Columns.Count; k++) { sb.Append(ds.Tables[0].Columns[k].ColumnName.ToString() +"\t"); } sb.Append(Environment.NewLine); for (int i =0; i < ds.Tables[0].Rows.Count; i++) { rowRead++; percent = ((float)(100* rowRead)) / totalCount; Pbar.Maximum = (int)totalCount; Pbar.Value = (int)rowRead; lblTip.Text ="正在寫入["+ percent.ToString("0.00") +"%]...的資料"; System.Windows.Forms.Application.DoEvents(); for (int j =0; j < ds.Tables[0].Columns.Count; j++) { sb.Append(ds.Tables[0].Rows[i][j].ToString() +"\t"); } sb.Append(Environment.NewLine); } sw.Write(sb.ToString()); sw.Flush(); sw.Close(); MessageBox.Show("已經生成指定Excel檔案!"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } publicstring GetStrSql() { string strSql ="select * from table"; return strSql; }