zoukankan      html  css  js  c++  java
  • C# 如何将DataTable转成Excel文件(利用Aspose.Cells.dll插件生成)

    由于刚开始使用文件流导出Excel文件,微软Excel打开报安全警告问题,WPS不会,微软Excel会,所有利用第三方插入Aspose.Ceils.dll插入做Excel导出

    优点:不需要安装微软Excel这些,只需引用Aspose.Ceils.dll,就可以了

    1、下载Aspose.Cell.dll

     http://www.xdowns.com/app/309341.html

    2、整体demo

    1)导出Excel方法

      public static class ExportHelper
        {
            /// <summary>
            /// DataTable数据生成Excel文件(用文件流(StreamWriter)写入,弃用原因:微软Excel打开报安全警告问题,WPS不会,微软Excel会 )
            /// </summary>
            /// <param name="tab">DataTable数据源</param>
            /// <param name="path">保存文件路径(包含文件名)</param>
            public static void CreateExcelByFileStream(DataTable tab, string path)
            {
                try
                {
                    StreamWriter sw = new StreamWriter(path, false, Encoding.GetEncoding("gb2312"));
                    StringBuilder sb = new StringBuilder();
                    for (int k = 0; k < tab.Columns.Count; k++)
                    {
                        sb.Append(tab.Columns[k].ColumnName.ToString() + "	");
                    }
                    sb.Append(Environment.NewLine);
    
                    for (int i = 0; i < tab.Rows.Count; i++)
                    {
                        for (int j = 0; j < tab.Columns.Count; j++)
                        {
                            sb.Append(tab.Rows[i][j].ToString() + "	");
                        }
                        sb.Append(Environment.NewLine);//每写一行数据后换行
                    }
                    sw.Write(sb.ToString());
                    sw.Flush();
                    sw.Close();//释放资源
                }
                catch (Exception ex)
                {
                    //MessageBox.Show(ex.Message);
                }
            }
    
            /// <summary>
            /// DataTable数据生成Excel文件(调用第三方Aspose.Cells.dll插件)
            /// </summary>
            /// <param name="data">导入Excel的dataTable数据源</param>
            /// <param name="filepath">保存的文件路径</param>
            public static void CreateExcelByAsposeCells(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; //单元格
                    //创建 列名行的样式
                    Style style = book.Styles[book.Styles.Add()];
                    style.Borders[BorderType.LeftBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 左边界线  
                    style.Borders[BorderType.RightBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 右边界线  
                    style.Borders[BorderType.TopBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 上边界线  
                    style.Borders[BorderType.BottomBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 下边界线   
                    style.HorizontalAlignment = TextAlignmentType.Center; //单元格内容的水平对齐方式文字居中
                    style.Font.Name = "宋体"; //字体
                    style.Font.IsBold = true; //设置粗体
                    style.Font.Size = 12; //设置字体大小
                    style.ForegroundColor = System.Drawing.Color.FromArgb(153, 204, 0); //背景色
                    style.Pattern = Aspose.Cells.BackgroundType.Solid; //背景样式
                    style.IsTextWrapped = true; //单元格内容自动换行
    
                    //创建 数据行的样式
                    Style conStyle = book.Styles[book.Styles.Add()];
                    conStyle.Borders[BorderType.LeftBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 左边界线  
                    conStyle.Borders[BorderType.RightBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 右边界线  
                    conStyle.Borders[BorderType.TopBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 上边界线  
                    conStyle.Borders[BorderType.BottomBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 下边界线
                    conStyle.Font.Name = "宋体";
                    conStyle.HorizontalAlignment = TextAlignmentType.Left;  //单元格内容的水平对齐方式文字居中
                    conStyle.Font.IsBold = false;
                    conStyle.Font.Size = 11;
    
                    //表格填充数据
                    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(conStyle); //添加样式 style
                        }                   
                    }
                    sheet.AutoFitColumns(); //自适应宽
                    book.Save(filepath); //保存
                    GC.Collect();
                }
                catch (Exception e)
                {
                    //logger.Error("生成excel出错:" + e.Message);
                }
            }
        }

    2)调用方法

     public class HomeController : Controller
        {
            // GET: Default
            public ActionResult Index()
            {
                //调用导出方法
                ExportExcel();
                return View();
            }
    
           /// <summary>
           /// 将DataTable转成Excel文件
           /// </summary>
            public void ExportExcel() {
                //获取tab数据
                DataTable tabs = GetDataTableDemo();
                //调用文件流导出方法(微软Excel打开报安全警告问题,WPS不会,微软Excel会
    //ExportHelper.CreateExcelByFileStream(tabs, "D:\Excel导出测试.xlsx");
    //调用AsposeCells.dll执行导出的数据 ExportHelper.CreateExcelByAsposeCells(tabs, "D:\Excel导出测试.xlsx"); } /// <summary> /// 定义DataTable数据源 /// </summary> /// <returns></returns> public DataTable GetDataTableDemo() { //定义列数据 DataTable tab = new DataTable(); tab.Columns.Add("ID", typeof(int)); tab.Columns.Add("学号", typeof(string)); tab.Columns.Add("名称", typeof(string)); tab.Columns.Add("性别", typeof(string)); tab.Columns.Add("班级", typeof(string)); //添加列的数据 for (int i = 0; i < 10; i++) { DataRow row = tab.NewRow(); //添加每行的数据 row["ID"] = (i + 1); row["学号"] = (i + 1).ToString().PadLeft(4, '0'); row["名称"] = "学生" + (i + 1); row["性别"] = (i + 1) % 2 == 0 ? "" : ""; row["班级"] = (i + 1) % 2 == 0 ? "重点班" : "普通班"; //添加到datatable中 tab.Rows.Add(row); } return tab; } }

    3、运行项目,查看结果

     

     4、Demo源码下载

     链接:https://pan.baidu.com/s/15qqjFPup5spbzUR9KsZhLQ
    提取码:1234

  • 相关阅读:
    正则表达式全部符号解释
    如何在开机启动时自动打开小键盘灯
    SQL SERver2005中row_number() 的用法
    用命令打开控制面板的各项
    SQL Server 2008 对 TSQL 语言的增强
    SQL2000DBCC DBREINDEX重建索引提高SQL Server性能
    Sql Server 中常用的字符串函数
    coalesce的用法
    word to PD R qm addin 运行时错误‘91’
    Windows系统:开始–运行–命令大全
  • 原文地址:https://www.cnblogs.com/xielong/p/13597757.html
Copyright © 2011-2022 走看看