C#dataset中数据导出到excel

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Reflection;
using Microsoft.Office;
//using Excel = Microsoft.Office.Interop.Excel;
using Excel;

/// <summary>
///InOutInfoToExcel 的摘要说明
/// </summary>
public class InOutInfoToExcel
{
 public InOutInfoToExcel()
 {
  //
  //TODO: 在此处添加构造函数逻辑
  //
 }

/// <summary>
    /// 导出excel单个sheet(导出的excel文件的名字只能为英文,中文的话名字是乱码  且只能导出一个sheet)
    /// </summary>
    /// <param name="ds"></param>
    /// <param name="FileName"></param>
    public void ToExcel(DataSet ds, string FileName)
    {
        //HttpContext.Current.Response.Charset = "UTF-8";
        HttpContext.Current.Response.Charset = "GB2312";
        //HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;//设置输出流为简体中文
        System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
        HttpContext.Current.Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件
        HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName);
        //设置数字为文本格式
        string strStyle = "<style>td{mso-number-format:\"\\@\";}</style>";
        System.IO.StringWriter tw = new System.IO.StringWriter();//定义StringWriter输出对象
        HtmlTextWriter hw = new HtmlTextWriter(tw);//定义HtmlTextWriter对象
        //ctl.RenderControl(hw);//用RenderControl方法输出excel
        //DataGrid dg = new DataGrid();
        //dg.DataSource = ds.Tables[0];
        //dg.DataBind();
        //dg.RenderControl(hw);
        hw.WriteLine(strStyle);
        GridView gv = new GridView();
        gv.DataSource = ds.Tables[0];
        gv.DataBind();
        gv.RenderControl(hw);
        HttpContext.Current.Response.Write(tw.ToString());//输出
        HttpContext.Current.Response.Flush();
        HttpContext.Current.Response.End();
    }
        /// <summary>
    ///导出Excel文件 (多个sheet)
    /// </summary>
    /// <param name="dv">用于导出的DataSET[数组]</param>
    /// <param name="tmpExpDir">导出的文件夹的虚拟路径(在程序里建一个文件夹导出到此文件夹中)/</param>
    /// <param name="refFileName">文件名,例如test.xls</param>
    /// <param name="sheetName">Sheet的名称,如果导出多个Sheet[数租]</param>
    /// <param name="sheetSize">每个Sheet包含的数据行数,此数值不包括标题行。所以,对于65536行数据,请将此值设置为65535</param>
    /// <param name="setBorderLine">导出完成后,是否给数据加上边框线</param>  
    public bool WebExportToExcel_1(DataSet[] dv, string tmpExpDir, string refFileName, string[] sheetName, int sheetSize, bool setBorderLine)
    {
        int RowsToDivideSheet = sheetSize;//计算Sheet行数
        int sheetCount = dv.Length;
        GC.Collect();// 回收其他的垃圾
        Application excel; _Workbook xBk; _Worksheet xSt = null;

excel = new Excel.ApplicationClass(); xBk = excel.Workbooks.Add(true);
        //申明循环中要使用的变量 
        int dvRowStart = 0;
        int dvRowEnd; int rowIndex = 0; int colIndex = 0;
        //对全部Sheet进行操作
        for (int sheetIndex = 0; sheetIndex < sheetCount; sheetIndex++)
        {
            rowIndex = 1; colIndex = 1; //设置初始化的行和列
            //计算起始行
            dvRowStart = 1; //sheetIndex * RowsToDivideSheet;
            //计算结束行
            dvRowEnd = RowsToDivideSheet; //dvRowStart + RowsToDivideSheet - 1;
            if (dvRowEnd > dv[sheetIndex].Tables[0].Rows.Count)
            { dvRowEnd = dv[sheetIndex].Tables[0].Rows.Count + 1; }
            //创建一个Sheet 
            if (null == xSt)
            { xSt = (Excel._Worksheet)xBk.Worksheets.Add(Type.Missing, Type.Missing, 1, Type.Missing); }
            else { xSt = (Excel._Worksheet)xBk.Worksheets.Add(Type.Missing, xSt, 1, Type.Missing); }
            //设置SheetName
            // xSt.Name = null;
            xSt.Name = sheetName[sheetIndex].ToString();
            //if (sheetCount > 1)
            //{ xSt.Name += "1"; }
            //取得标题 
            foreach (DataColumn col in dv[sheetIndex].Tables[0].Columns)
            { //设置标题格式
                xSt.get_Range(excel.Cells[rowIndex, colIndex], excel.Cells[rowIndex, colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;
                //设置标题居中对齐
                xSt.get_Range(excel.Cells[rowIndex, colIndex], excel.Cells[rowIndex, colIndex]).Font.Bold = true;
                //填值,并进行下一列
                excel.Cells[rowIndex, colIndex++] = col.ColumnName;
            }
            //取得DATASET表格中数据
            //int drvIndex;
            //for (drvIndex = dvRowStart; drvIndex <= dvRowEnd-1; drvIndex++)
            //{
            //    //新起一行,当前单元格移至行首
            //    rowIndex++;
            //    colIndex = 1;
            //    for (int i = 1; i <= dv[sheetIndex].Tables[0].Columns.Count; i++)
            //    {
            //        string aa = dv[sheetIndex].Tables[0].Rows[0][i-1].ToString();
            //        excel.Cells[rowIndex, colIndex] = "‘" + aa + "";
            //        colIndex++;
            //    }
            //}
            //以下代码就是经过修正后的。上面注释的代码有问题。
            foreach (DataRow dr in dv[sheetIndex].Tables[0].Rows)
            {
                //新起一行,当前单元格移至行首
                rowIndex++;
                colIndex = 1;
                for (int i = 1; i <= dv[sheetIndex].Tables[0].Columns.Count; i++)
                {
                    string aa = dr[i - 1].ToString();
                    excel.Cells[rowIndex, colIndex] = "‘" + aa + "";
                    colIndex++;
                }
            }
            Excel.Range allDataWithTitleRange = xSt.get_Range(excel.Cells[1, 1], excel.Cells[rowIndex, colIndex]);
            allDataWithTitleRange.Select();
            allDataWithTitleRange.Columns.AutoFit();
            if (setBorderLine)
            { allDataWithTitleRange.Borders.LineStyle = 1; }

}//Sheet循环结束
        string absFileName = HttpContext.Current.Server.MapPath(System.IO.Path.Combine(tmpExpDir, refFileName));
        xBk.SaveCopyAs(absFileName); xBk.Close(false, null, null);
        excel.Quit();
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);
        xBk = null; excel = null; xSt = null; GC.Collect();
        return true;
    }
}

时间: 2024-10-10 05:04:43

C#dataset中数据导出到excel的相关文章

将datagrid中数据导出到excel中 -------&lt;&lt;工作日志2014-6-6&gt;&gt;

1.下载log4j jar包,放入lib目录, 导入项目中   下载地址 http://logging.apache.org/ 2.创建log4j.properties 文件  目录 Src  下面是一个 log4j.properties的例子(注:来源于网上,非本人所写) ################################################################################ # 其语法:log4j.rootLogger = [ leve

Python-将数据表中数据导出到excel

''' 需求:写一个函数,随便输入一个表名,把这个表里面所有的数据,导出到excel里面 思路: 1.'select * from %s' ,查出这个表所有的数据 2.再把所有的数据写到excel xlwt ''' import pymysql,hashlib,xlwt def op_mysql(sql:str): mysql_info = { 'host': 'XXX.XXX.XXX.XXX', 'port': XXXX, 'password': 'XXXX', 'user': 'XXXX',

C#将datatable中数据导出到excel

using Excel = Microsoft.Office.Interop.Excel;//添加 Microsoft.Office.Interop.Excel.dll 引用 class ExcelManager { public delegate void ProgressBarEventHandler(int max, int value);//导出进度条所需最大值与进度值 public event ProgressBarEventHandler ProgressBarEvent; publ

Qt中将QTableView中的数据导出为Excel文件

如果你在做一个报表类的程序,可能将内容导出为Excel文件是一项必须的功能.之前使用MFC的时候我就写过一个类,用于将grid中的数据导出为Excel文件.在使用了QtSql模块后,我很容易的将这个类改写应用在Qt程序中.类的名字叫“ExportExcelObject”.使用起来很简单: [cpp] view plaincopy // 1. declare an object // – fileName Excel 文件路径 // – sheetName Excel 工作表(sheet)名称 /

将数据库的数据导出到excel中

这篇文章主要介绍了asp中把数据导出为excel的2种方法:分别用excel组件.文件组件实现,需要的朋友可以参考下.我们在做项目的时候经常要将数据库的数据导出到excel中,很多asp用户并不知道怎么写.这里总结了两种方法来导出excel,希望能帮到大家. 方法一:用excel组件 方法二:使用文件组件 可以看出,第一种方法是直接导出的是excel文件,而第二张方法是到处的是文本文件,只不过后缀名改成了xls. 然后看起来就是excel了. 经过对比第一种方法的效率没有第二种方法的效率高,而且

使用原生php将数据库数据导出到excel文件中

最近在工作中遇到一个需求,需要将数据库中的数据导出到excel文件中,并下载excel文件.因为以前没做过,所以就百度了一下, 网上说的大多是使用PHPExcel类来操作excel文件,这还要去下载这个类才能使用,而我只想使用原生的php,不想那么麻烦,好在 也有网友说到关于原生php生成excel文件的方法,其实很简单,下面把我结合网上资料自己实践的代码分享一下. 一般我们这种导数据的操作都是通过用户在网页页面上点击某个按钮触发相应js方法,然后请求php接口来实现的,所以主要有两种 方法来完

机房收费系统之vb中的MSFlexGrid控件中的数据导出为Excel的步骤

MSFlexGrid控件中的数据导出为Excel表格的方法有很多,我觉得它们都大同小异,总起来说就是vb先调用Excel,然后再将数据导入进去.在数据导出的过程中,我的收获如下,下面是我把MSFlexGrid控件的数据导出到Excel中的步骤. 1 首先确保 在工程中引用Microsoft Excel 14.0 Object Library   和  Microsoft ActiveX Data Objects 2.6 Libray 代码部分, <span style="font-size

tablib把数据导出为Excel、JSON、CSV等格式的Py库(写入数据并导出exl)

#tablib把数据导出为Excel.JSON.CSV等格式的Py库 #python 3 import tablib #定义列标题 headers = ('1列', '2列', '3列', '4列', '5列') #需写入的数据,按照一行一行的输入 #元组数据的个数必须和列数一致 data = [('23','23','34','23','34'),('sadf','23','sdf','23','fsad')] #写入数据 mylist = tablib.Dataset(*data, head

C#创建Excel文件并将数据导出到Excel文件

C#创建Excel文件,这里实际上是从资源中提取一个事先创建好的Excel文件,文件提取成功后,使用OleDb方法连接Excel,向Excel文件中写入数据. 创建解决方案 菜单>新建>项目>Windows窗体应用程序: 添加相关组件: 添加两个DataGridView,一个TextBox,两个按钮 ,如下图: 添加Excel资源: 先在文件夹中新建一个Excel文件,在Sheet1表的第一行设置列名: 双击"Resources.resx"文件打开资源文件视图: 添加