zoukankan      html  css  js  c++  java
  • 使用Aspose.Cell.dll导出Excel总结

      这两天项目上用Aspose导出Excel来着。开始感觉挺简单的,但是实际操作起来还是挺复杂的,调试占的时间很长。主要是动态生成列、合并单元格、调样式占了很长时间,还是总结一下吧。

      基础操作:

      //EXCEL模板路径

      var filePath = HttpContext.Current.Server.MapPath("~/" + ConfigurationManager.CurrentPackage.Settings["FilePath"]);

      //打开模板sheet

        var book = new Workbook();
        book.Open(filePath);
        var sheet = book.Worksheets[0];

        //根据需要给单元格赋值,Excel行列的索引都是从0开始的。

      sheet.Cells[i,j].PutValue("**");

      动态生成列:

      根据模板情况访问数据库得到DataTable,尽量得到和Excel布局相近的数据记录。循环写单元格,合并需要合并的单元格,设置样式。

      合并单元格: 

        //合并标题行,因为列是动态添加的,所以标题居中显示,得重新根据列宽合并单元格
        Range rangeTitle = sheet.Cells.CreateRange(firstRow, firstColumn, totalRows, totalColumns);//创建需要合并的Range范围再进行合并
          //rangeTitle.UnMerge(); //如果这个范围中本来n个单元格已经是合并过的,需要取消合并再Merge,否则会报错。
        rangeTitle.Merge(); //合并range

      样式:

        int styleIndex = book.Styles.Add(); //在当前样式集合中创建一个样式,返回创建样式索引,设置样式必须在原有样式集合中再添加一个样式,否则会覆盖原样式
        Style style = book.Styles[styleIndex]; 
        style.RotationAngle = 255; //这个角度值研究了半天,可以把汉字从左到右显示,改成从上到下,垂直显示。可以试一下。

        Range range = sheet.Cells.CreateRange(startRowIndex - catalogNameRowSpan + 1, 0, catalogNameRowSpan, 1); //得到要使用样式的范围
        range.SetStyle(style); //设置样式

        //根据原有样式,拷贝样式

        Range rangeRows = sheet.Cells.CreateRange(firstRow, firstColumn, totalRows, totalColumns);//要赋样式的范围
        rangeRows.CopyStyle(sheet.Cells.CreateRange(4, 1, 1, 6)); //把(4, 1, 1, 6)的样式赋到rangeRows范围上。

        //应用样式(给单元格加边框,每个边的框宽度根据多次设置样式的最大粗细为准)

        Style GridStyle = book.Styles[book.Styles.Add()];
        GridStyle.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Medium; //设置上边框粗细
        GridStyle.Borders[BorderType.TopBorder].Color = Color.Black; //设置边框颜色
        GridStyle.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Medium;//设置下边框粗细
        GridStyle.Borders[BorderType.BottomBorder].Color = Color.Black;
        GridStyle.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;//设置左边框粗细
        GridStyle.Borders[BorderType.LeftBorder].Color = Color.Black;
        GridStyle.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Medium;//设置右边框粗细
        GridStyle.Borders[BorderType.RightBorder].Color = Color.Black;
        GridStyle.HorizontalAlignment = TextAlignmentType.Center;//文本居中对齐
        GridStyle.Font.Size = 9; //设置字体9号
        Range range1 = sheet.Cells.CreateRange(4, 0, 1, 6 + totalColumns); //样式应用范围
        StyleFlag borderStyle = new StyleFlag(); //标示集合,启用哪个样式
        borderStyle.Borders = true; //启用Borders样式
        borderStyle.HorizontalAlignment = true; //启用水平对齐样式
        borderStyle.Font = false;//不使用配置的字体样式
        range1.ApplyStyle(GridStyle, borderStyle); //应用多种样式。borders设置:由于LeftBorder设置CellBorderType.Thin,范围是单行多列多单元格的,所以每个单元格左边框被设置两次,按最粗的样式显示,第一个单元格左框是Thin,其他列的单元格左框是Medium。

  • 相关阅读:
    JTA
    JPA
    深度优先搜索与广度优先搜索
    http和https区别
    数据库系统阶段特点
    Java中定义和声明
    java之集合ArrayList实例
    java实例之商品库
    java之封装
    java之类和对象
  • 原文地址:https://www.cnblogs.com/ThinkWorld/p/3305415.html
Copyright © 2011-2022 走看看