C#把DataTable导出为Excel文件

 更新时间:2022年04月10日 15:01:59   作者:農碼一生  
这篇文章介绍了C#把DataTable导出为Excel文件的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

实现DataTable转为Excel文件,和上次分享的Excel文件转为DataTable互为反操作。DataTable转化为Excel文件是通过传入一个DataTable类型的参数,然后将传入的DataTable转化为Excel文件。实现关键代码如下:

方法一:

/// <summary>
/// DataTable数据导出Excel
/// </summary>
/// <param name="data"></param>
/// <param name="filepath"></param>
public static void DataTableExport(DataTable data, string filepath)
{
    try
    {
        //Workbook book = new Workbook("E:\\test.xlsx"); //打开工作簿
        Workbook book = new Workbook(); //创建工作簿
        Worksheet sheet = book.Worksheets[0]; //创建工作表
        Cells cells = sheet.Cells; //单元格
        //创建样式
        Aspose.Cells.Style style = book.Styles[book.Styles.Add()];
        style.Borders[Aspose.Cells.BorderType.LeftBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 左边界线  
        style.Borders[Aspose.Cells.BorderType.RightBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 右边界线  
        style.Borders[Aspose.Cells.BorderType.TopBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 上边界线  
        style.Borders[Aspose.Cells.BorderType.BottomBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 下边界线   
        style.HorizontalAlignment = TextAlignmentType.Center; //单元格内容的水平对齐方式文字居中
        style.Font.Name = "宋体"; //字体
        style1.Font.IsBold = true; //设置粗体
        style.Font.Size = 11; //设置字体大小
        //style.ForegroundColor = System.Drawing.Color.FromArgb(153, 204, 0); //背景色
        //style.Pattern = Aspose.Cells.BackgroundType.Solid; //背景样式
        //style.IsTextWrapped = true; //单元格内容自动换行
        
        //表格填充数据
        int Colnum = data.Columns.Count;//表格列数 
        int Rownum = data.Rows.Count;//表格行数 
        //生成行 列名行 
        for (int i = 0; i < Colnum; i++)
        {
            cells[0, i].PutValue(data.Columns[i].ColumnName); //添加表头
            cells[0, i].SetStyle(style); //添加样式
            //cells.SetColumnWidth(i, data.Columns[i].ColumnName.Length * 2 + 1.5); //自定义列宽
            //cells.SetRowHeight(0, 30); //自定义高
        }
        //生成数据行 
        for (int i = 0; i < Rownum; i++)
        {
            for (int k = 0; k < Colnum; k++)
            {
                cells[1 + i, k].PutValue(data.Rows[i][k].ToString()); //添加数据
                cells[1 + i, k].SetStyle(style); //添加样式
            }
            cells[1 + i, 5].Formula = "=B" + (2 + i) + "+C" + (2 + i);//给单元格设置计算公式,计算班级总人数
        }
        sheet.AutoFitColumns(); //自适应宽
        book.Save(filepath); //保存
        GC.Collect();
    }
    catch (Exception e)
    {
        logger.Error("生成excel出错:" + e.Message);
    }
}

方法二:

public void ToExcel(DataTable dt)
    {
        #region 3s  
        var FilePath = @"D:\ToExcel\";//产生Excel文件路径
        DeleteFile(FilePath);
        //创建全新的Workbook 
        var workbook = new HSSFWorkbook();//一個sheet最多65536行
        var count = 0;
        for (double i = 0; i < Convert.ToDouble(dt.Rows.Count) / Convert.ToDouble(65534); i++)//每个Excel文件的一个页签只能存放65536行数据
        {
            var row_index = 0;
            //创建Sheet
            workbook.CreateSheet("Sheet" + i);
            //根据Sheet名字获得Sheet对象  
            var sheet = workbook.GetSheet("Sheet" + i);
            IRow row;
            row = sheet.CreateRow(row_index);

            //写入标题
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                row.CreateCell(j).SetCellValue(dt.Columns[j].Caption.ToString());
            }
            row = sheet.CreateRow(++row_index);

            //写入数据
            for (int j = 0; j < (dt.Rows.Count - count > 65534 ? 65534 : dt.Rows.Count - count); j++)
            {
                var r = dt.Rows[j + count];
                for (int k = 0; k <dt.Columns.Count; k++)
                {
                    row.CreateCell(k).SetCellValue(r[k].ToString());

                    //如果是数字,判断是否需要转换为数字
                    //if (IsNumeric(r[k].ToString()))
                    //{
                    //    row.CreateCell(k).SetCellValue(Convert.ToDouble(r[k].ToString()));
                    //}
                    //else
                    //{
                    //    row.CreateCell(k).SetCellValue(r[k].ToString());
                    //}
                }

                row = sheet.CreateRow(++row_index);
            }
            count += row_index - 2;
        }
        //保存Workbook方式一: 以文件形式保存到服务器中(每次导出都会生成一个文件,慎重使用)
        var FileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";

        var sw = File.Create(FilePath + FileName);
        workbook.Write(sw);
        sw.Close();
        var EC = new ExcelConverter();
        EC.WebopenExcel(Response, FilePath + FileName);
        #endregion
    }

到此这篇关于C#把DataTable导出为Excel文件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C#如何通过probing指定dll寻找文件夹详解

    C#如何通过probing指定dll寻找文件夹详解

    这篇文章主要给大家介绍了关于C#如何通过probing指定dll寻找文件夹的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • c#利用Grahics进行图片裁剪

    c#利用Grahics进行图片裁剪

    这两天做了一个图片对比工具,里面要处理两张大的图片,所以要对图片先进行裁剪,下面看看我的方法吧
    2013-12-12
  • C#设计模式之Visitor访问者模式解决长隆欢乐世界问题实例

    C#设计模式之Visitor访问者模式解决长隆欢乐世界问题实例

    这篇文章主要介绍了C#设计模式之Visitor访问者模式解决长隆欢乐世界问题,简单描述了访问者模式的定义并结合具体实例形式分析了C#使用访问者模式解决长隆欢乐世界问题的具体实现技巧,需要的朋友可以参考下
    2017-09-09
  • C#基础入门之算法:交换

    C#基础入门之算法:交换

    本文主要介绍了C#中算法:交换的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • UnityShader3实现彩光效果

    UnityShader3实现彩光效果

    这篇文章主要为大家详细介绍了UnityShader3实现彩光效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • C#从实体对象集合中导出Excel的代码

    C#从实体对象集合中导出Excel的代码

    数据的导出是项目中经常要实现的功能,就拿最常见的要导出成Excel来说,网上看来看去,都是介绍从Datatable中导出
    2008-08-08
  • C#中winform控制textbox输入只能为数字的方法

    C#中winform控制textbox输入只能为数字的方法

    这篇文章主要介绍了C#中winform控制textbox输入只能为数字的方法,包括使用keyPress事件限制键盘输入以及TextChanged事件限制粘贴等情况,来实现控制输入为数字的功能,需要的朋友可以参考下
    2015-01-01
  • c# 对CSV文件操作(写入、读取、修改)

    c# 对CSV文件操作(写入、读取、修改)

    这篇文章主要介绍了c# 如何对CSV文件操作,帮助大家更好的理解和学习C#,感兴趣的朋友可以了解下
    2020-08-08
  • Unity使用摄像机实现望远镜效果

    Unity使用摄像机实现望远镜效果

    这篇文章主要为大家详细介绍了Unity摄使用像机实现望远镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • C#读取视频的宽度和高度等信息的方法

    C#读取视频的宽度和高度等信息的方法

    这篇文章主要介绍了C#读取视频的宽度和高度等信息的方法,通过执行一条CMD命令来实现读取视频宽度和高度的功能,具有不错的实用价值,需要的朋友可以参考下
    2014-11-11

最新评论