DataTable 截取及DataTable 导出到Excel

 /// <summary>
    /// 截取包含所需字段的DataTable
    /// </summary>
    /// <param name="dt">需要进行截取处理的DataTable</param>
    /// <param name="dataName">需要截取的相关数据列名</param>
    /// <returns>截取处理后的DataTable</returns>
    private DataTable reGetTable(DataTable dt, string[] dataName)
    {
        try
        {
            DataTable newDt = new DataTable();
            for (int i = 0; i < dataName.Length; i++)
            {
                DataColumn dc = new DataColumn();
                dc.ColumnName = dataName[i];
                newDt.Columns.Add(dc);
            }
            DataRow r;
            object[] rowArray = new object[dataName.Length];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                r = newDt.NewRow();
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    for (int k = 0; k < dataName.Length; k++)
                    {
                        if (dt.Columns[j].ColumnName == dataName[k])
                        {
                            rowArray[k] = dt.Rows[i][dataName[k]].ToString();
                        }
                    }
                }
                r.ItemArray = rowArray;
                newDt.Rows.Add(r);
            }
            if (newDt.Rows.Count > 0)
            {
                return newDt;
            }
            else
            {
                return null;
            }
        }
        catch (Exception)
        {
            return null;
        }
       
    }
    /// <summary>
    ///将DataTable内的数据导出到Excel
    /// </summary>
    /// <param name="dt">需要导出的DataTable</param>
    /// <param name="headText">与DataTable列对应的表头Excel</param>
    public void dataTableExport(DataTable dt, string[] headText)
    {
        try
        {
            if (dt.Rows.Count > 0)
            {
                Excel.Application excel = new Excel.Application();
                excel.Application.Workbooks.Add(true);
                excel.Visible = true;
                if (headText.Length != dt.Columns.Count)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        excel.Cells[1, i + 1] = dt.Columns[i].ColumnName.ToString();
                    }
                }
                else if (headText.Length > 0 && headText.Length == dt.Columns.Count)
                {
                    for (int i = 0; i < headText.Length; i++)
                    {
                        if (headText[i].Trim() == "")
                        {
                            excel.Cells[1, i + 1] = dt.Columns[i].ColumnName.ToString();
                        }
                        else
                        {
                            excel.Cells[1, i + 1] = headText[i];
                        }
                    }
                }
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        if (dt.Rows[i][j].GetType() == typeof(string))
                        {
                            excel.Cells[i + 2, j + 1] = "'" + dt.Rows[i][j].ToString();
                        }
                        else if(dt.Rows[i][j].GetType() == typeof(DateTime))
                        {
                            excel.Cells[i + 2, j + 1] = dt.Rows[i][j].ToString();
                        }
                    }
                }
              
            }
            else
            {
                return;
            }
        }
        catch (Exception)
        {
            return;
        }

    }


有些拙劣,一直想控制导出的Excel的单元格格式,以及设置其自适应高度和宽度,但百度多时无果,暂且告一段落。希望各位高人多多指点
posted @ 2009-10-13 17:54  青衫难改  阅读(555)  评论(0)    收藏  举报