asp.net 匯出Excel方法總結

來源:互聯網
上載者:User

一:這種方法是把 DataSet的DataTable裡面的資料拼接成html的<table></table>形式輸出。

  缺點:(1)這是一種偽Excel格式,用Excel開啟的時候會提示 "格式與副檔名格式不一致" 每次都要手動確定開啟,煩

              (2)這樣一個一個的迴圈,效率低

     優點:直接從瀏覽器輸出,使用者可以選擇儲存路徑

    public string GetExportString(DataSet ds)    {        StringBuilder data = new StringBuilder();//因為迴圈很多,用 StringBuilder速度會快很多        //data = ds.DataSetName + "\n";        foreach (DataTable tb in ds.Tables)//多個表        {            //data += tb.TableName + "\n";            data.Append("<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\">");            //寫出列名            data.Append("<tr style=\"font-weight: bold; white-space: nowrap;\">");            foreach (DataColumn column in tb.Columns)            {data.Append("<td>");data.Append(column.ColumnName);data.Append("</td>");            }            data.Append("</tr>");            //寫出資料            foreach (DataRow row in tb.Rows)            {                data.Append("<tr>");                foreach (DataColumn column in tb.Columns)                {                    //if (column.ColumnName.Equals("證件編號") || column.ColumnName.Equals("報名編號"))                    //    data.Append("<td style=\"vnd.ms-excel.numberformat:@\">" + row[column].ToString() + "</td>");                    //else                     data.Append("<td>"); data.Append(row[column].ToString()); data.Append("</td>");                }                data.Append("</tr>");            }            data.Append("</table>");        }        return data.ToString();    }    public void ExportDsToXls(Page page, string fileName, DataSet ds)    {        page.Response.Clear();        page.Response.Buffer = true;        page.Response.Charset = "GB2312";        //page.Response.Charset = "UTF-8";
     //如果輸出中文名亂碼的話,可以這樣編碼 檔案名稱 HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) page.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + System.DateTime.Now.ToString("_yyMMdd_hhmm") + ".xls"); page.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//設定輸出資料流為簡體中文 page.Response.ContentType = "application/ms-excel";//設定輸出檔案類型為excel檔案。 page.EnableViewState = false; page.Response.Write(GetExportString(ds)); page.Response.End(); }//style="vnd.ms-excel.numberformat:@" 可以去除自動科學計數法的困擾//輸出為Table,能夠最大限度的減少欄位中資料對產生的檔案格式的影響,在這裡我沒有處理資料中含有HTML標籤的情況 在頁面後台中,這樣使用就可以了:

 二:用到 Microsoft.Office.Interop.Excel dll,在伺服器輸出,輸出的Excel在伺服器,(如果是b/s架構的話還要想著怎麼把這個匯出的檔案拿回來),而且如果出現異常或者中斷的話,在伺服器上面有很多excel的進程需要手動去關閉,要不過不了多久,伺服器就掛掉了,所以這個方法比較適合用在WinForm的開發,不適合用在web的。

        public void DataTabletoExcel(System.Data.DataTable tmpDataTable, string strFileName)        {            if (tmpDataTable == null)                return;            int rowNum = tmpDataTable.Rows.Count;            int columnNum = tmpDataTable.Columns.Count;            int rowIndex = 1;            int columnIndex = 0;            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();            xlApp.DefaultFilePath = "";            xlApp.DisplayAlerts = true;            xlApp.SheetsInNewWorkbook = 1;            Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);            //將DataTable的列名匯入Excel表第一行            foreach (DataColumn dc in tmpDataTable.Columns)            {                columnIndex++;                xlApp.Cells[rowIndex, columnIndex] = dc.ColumnName;            }            //將DataTable中的資料匯入Excel中            for (int i = 0; i < rowNum; i++)            {                rowIndex++;                columnIndex = 0;                for (int j = 0; j < columnNum; j++)                {                    columnIndex++;                    xlApp.Cells[rowIndex, columnIndex] = tmpDataTable.Rows[i][j].ToString();                }            }            //xlBook.SaveCopyAs(HttpUtility.UrlDecode(strFileName, System.Text.Encoding.UTF8));            xlBook.SaveCopyAs(strFileName);        }

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.