C#導出.csv格式的excel表


.cs文件直接貼代碼:

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;

public class DataToCsv
{
    public DataToCsv()
    {
    }

    /// <summary>
    /// 將DataTable導出CSV表格
    /// </summary>
    /// <param name="dataTable">DataTable數據源</param>
    /// <param name="ColumnName">標題列(英文逗號","分割)</param>
    /// <param name="ColumnValue">內容列參數名稱</param>
    /// <param name="CsvName">導出的CSV表格名稱</param>
    /// <returns></returns>
    public static StringBuilder Data_To_Csv(DataTable dataTable, string ColumnName, string[] ColumnValue, string CsvName)
    {
        DataTable dt = dataTable;
        try
        {
            StringWriter swCSV = new StringWriter();
            //列名
            swCSV.WriteLine(ColumnName);//"工單編號,工單標題,工單類型,創建時間,當前狀態,當前節點名稱,當前處理人"
                                        //遍歷datatable導出數據
            foreach (DataRow drTemp in dt.Rows)
            {
                StringBuilder sbText = new StringBuilder();

                for (int i = 0; i < ColumnValue.Length; i++)  // ---------- 字段循環  
                {
                    sbText = AppendCSVFields(sbText, drTemp[ColumnValue[i].ToString()].ToString());
                }
                //去掉尾部的逗號
                sbText.Remove(sbText.Length - 1, 1);
                //寫datatable的一行
                swCSV.WriteLine(sbText.ToString());
            }
            swCSV.Close();
            return swCSV.GetStringBuilder();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    /// <summary>
    /// csv添加逗號 用來區分列
    /// </summary>
    /// <param name="argFields">字段</param>
    /// <returns>添加后內容</returns>
    public static StringBuilder AppendCSVFields(StringBuilder argSource, string argFields)
    {
        return argSource.Append(argFields.Replace(",", " ").Trim()).Append(",");
    }

    /// <summary>
    /// 彈出下載框
    /// </summary>
    /// <param name="argResp">彈出頁面</param>
    /// <param name="argFileStream">文件流</param>
    /// <param name="strFileName">文件名</param>
    public static void DownloadFile(HttpResponse argResp, StringBuilder argFileStream, string strFileName)
    {
        try
        {
            string strResHeader = "attachment; filename=" + Guid.NewGuid().ToString() + ".csv";
            if (!string.IsNullOrEmpty(strFileName))
            {
                strResHeader = "inline; filename=" + strFileName;
            }
            argResp.AppendHeader("Content-Disposition", strResHeader);//attachment說明以附件下載,inline說明在線打開
            argResp.ContentType = "application/ms-excel";
            argResp.ContentEncoding = Encoding.GetEncoding("GB2312"); // Encoding.UTF8;//
            argResp.Write(argFileStream);

        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}
View Code

調用示例:

DataSet ds = (DataSet)Session["data"];
                DataTable dt = ds.Tables[0];
                string[] values = { "S_ID", "S_Name", "S_Grade", "S_Class" };
                DataToCsv.DownloadFile(Response, DataToCsv.Data_To_Csv(dt, "學號,姓名,年級,班級", values, ViewState["Title"].ToString() + "報名表"), ViewState["Title"].ToString() + "報名表.csv");
                Response.End();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM