.NET实现DataSet转Excel

转:http://www.mzwu.com/article.asp?id=2187

 

这边我们借助一个组件MyXls来生成Excel,代码比较简单,下边的类实现将DataSet或DataTable转成Excel:

 程序代码
using System;
using System.Data;
using System.Configuration;
using System.IO;
using org.in2bits.MyXls; //MyXls命名空间

/// <summary>
///DataToXSL 的摘要说明
/// </summary>
public class DataToXSL
{
    #region DataTable 转 Excel

    /// <summary>
    /// 生成XSL
    /// </summary>
    /// <param name="table">DataTable对象</param>
    /// <param name="path">保存路径(包含文件名)</param>
    /// <returns></returns>
    public static bool CreateXLS(DataTable table, string path)
    {
        return CreateXLS(table, path, true);
    }

    /// <summary>
    /// 生成XSL
    /// </summary>
    /// <param name="table">DataTable对象</param>
    /// <param name="path">保存路径(包含文件名)</param>
    /// <param name="overwrite">是否覆盖</param>
    /// <returns></returns>
    public static bool CreateXLS(DataTable table, string path, bool overwrite)
    {
        if (File.Exists(path) && !overwrite)
            return false;

        try
        {
            //1.创建xls对象
            XlsDocument xlsDoc = new XlsDocument();
            xlsDoc.FileName = Path.GetFileName(path);

            //2.创建表
            string sheetName = string.IsNullOrEmpty(table.TableName) ? "Sheet1" : table.TableName;
            Worksheet sheet = xlsDoc.Workbook.Worksheets.Add(sheetName);

            //3.创建行列,注意cellRow,cellColumn都必须>=1
            Cells cells = sheet.Cells;

            //3.1 添加字段名
            for (int col = 0; col < table.Columns.Count; col++)
            {
                Cell cell = cells.Add(1, col + 1, table.Columns[col].ColumnName);
                cell.Font.Weight = FontWeight.Bold;
            }

            //3.2 添加记录
            for (int row = 0; row < table.Rows.Count; row++)
            {
                for (int col = 0; col < table.Columns.Count; col++)
                {
                    cells.Add(row + 2, col + 1, string.IsNullOrEmpty(table.Rows[row][col].ToString()) ? "-" : table.Rows[row][col].ToString());
                }
            }

            //4.准备保存文件夹
            if (!Directory.Exists(Path.GetDirectoryName(path)))
                Directory.CreateDirectory(Path.GetDirectoryName(path));

            //5.保存
            xlsDoc.Save(Path.GetDirectoryName(path), overwrite);
        }
        catch
        {
            return false;
        }

        return true;
    }

    #endregion

    #region DataSet 转 Excel

    /// <summary>
    /// 生成XSL
    /// </summary>
    /// <param name="ds">DataSet对象</param>
    /// <param name="path">保存路径(包含文件名)</param>
    /// <returns></returns>
    public static bool CreateXLS(DataSet ds, string path)
    {
        return CreateXLS(ds, path, true);
    }

    /// <summary>
    /// 生成XSL
    /// </summary>
    /// <param name="ds">DataSet对象</param>
    /// <param name="path">保存路径(包含文件名)</param>
    /// <param name="overwrite">是否覆盖</param>
    /// <returns></returns>
    public static bool CreateXLS(DataSet ds, string path, bool overwrite)
    {
        if (File.Exists(path) && !overwrite)
            return false;

        try
        {
            //1.创建xls对象
            XlsDocument xlsDoc = new XlsDocument();
            xlsDoc.FileName = Path.GetFileName(path);

            for (int i = 0; i < ds.Tables.Count; i++)
            {
                //2.创建表
                string sheetName = string.IsNullOrEmpty(ds.Tables[i].TableName) ? "Sheet" + i.ToString() : ds.Tables[i].TableName;
                Worksheet sheet = xlsDoc.Workbook.Worksheets.Add(sheetName);

                //3.创建行列,注意cellRow,cellColumn都必须>=1
                Cells cells = sheet.Cells;

                //3.1 添加字段名
                for (int col = 0; col < ds.Tables[i].Columns.Count; col++)
                {
                    Cell cell = cells.Add(1, col + 1, ds.Tables[i].Columns[col].ColumnName);
                    cell.Font.Weight = FontWeight.Bold;
                }

                //3.2 添加记录
                for (int row = 0; row < ds.Tables[i].Rows.Count; row++)
                {
                    for (int col = 0; col < ds.Tables[i].Columns.Count; col++)
                    {
                        cells.Add(row + 2, col + 1, string.IsNullOrEmpty(ds.Tables[i].Rows[row][col].ToString()) ? "-" : ds.Tables[i].Rows[row][col].ToString());
                    }
                }
            }

            //4.准备保存文件夹
            if (!Directory.Exists(Path.GetDirectoryName(path)))
                Directory.CreateDirectory(Path.GetDirectoryName(path));

            //5.保存
            xlsDoc.Save(Path.GetDirectoryName(path), overwrite);
        }
        catch
        {
            return false;
        }

        return true;
    }

    #endregion

}


调用示例:

 程序代码
using (SqlConnection conn = new SqlConnection("server=(local);database=Northwind;uid=sa;password=sa;"))
{
    DataSet ds = new DataSet();

    using (SqlDataAdapter adapter = new SqlDataAdapter("Select * FROM Customers", conn))
    {
        DataTable table = new DataTable("Customers");
        adapter.Fill(table);
        ds.Tables.Add(table);
    }

    using (SqlDataAdapter adapter = new SqlDataAdapter("Select * FROM Employees", conn))
    {
        DataTable table = new DataTable("Employees");
        adapter.Fill(table);
        ds.Tables.Add(table);
    }

    using (SqlDataAdapter adapter = new SqlDataAdapter("Select * FROM Categories", conn))
    {
        DataTable table = new DataTable("Categories");
        adapter.Fill(table);
        ds.Tables.Add(table);
    }

    DataToXSL.CreateXLS(ds, @"f:/Northwind.xls");
}



效果图:



经测试生成的Excel使用Excel2000、Excel2003均能正常打开!

MyXls官方站点:http://myxls.in2bits.org/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在VB.NET中,可以使用DataSet的Copy方法将DataSet中的数据复制到一个新的DataTable中。具体的代码如下所示: ```vb Dim dataSet As New DataSet() ' 假设ordersTable是已经填充好数据的DataTable Dim ordersTable As DataTable = dataSet.Tables("Orders") ' 创建一个新的DataTable,并将ordersTable中的数据复制到新的DataTable中 Dim newDataTable As DataTable = ordersTable.Copy() ``` 通过调用Copy方法,可以将DataSet中的数据复制到一个新的DataTable中,然后可以对新的DataTable进行操作。\[2\] 需要注意的是,如果你只是想在代码中使用DataTable,而不需要使用DataSet,可以直接从数据库中获取数据并填充到DataTable中,而不需要使用DataSet。你可以使用ADO.NET提供的SqlConnection和SqlDataAdapter类来实现这个功能。具体的代码如下所示: ```vb Dim connStr As String = "Data Source=PC-201104071256\sqlEXPRESS;Initial Catalog=Northwind;Integrated Security=True" Dim conn As New SqlConnection(connStr) Dim sql As String = "SELECT * FROM Orders" Dim adapter As New SqlDataAdapter(sql, conn) Dim dataTable As New DataTable() adapter.Fill(dataTable) ``` 通过使用SqlConnection和SqlDataAdapter类,可以连接到数据库并执行查询,然后将查询结果填充到DataTable中。\[3\] #### 引用[.reference_title] - *1* *2* [VB.Net DataSet和DataTable](https://blog.csdn.net/wulingmin21/article/details/6888461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [vb.net中从datatable读取数据到Excel](https://blog.csdn.net/weixin_35651102/article/details/117833978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值