zoukankan      html  css  js  c++  java
  • NPOI之Excel——合并单元格、设置样式、输入公式、设置筛选等

    首先建立一个空白的工作簿用作测试,并在其中建立空白工作表,在表中建立空白行,在行中建立单元格,并填入内容: 
    //建立空白工作簿
    IWorkbook workbook = new HSSFWorkbook();
    //在工作簿中:建立空白工作表
    ISheet sheet = workbook.CreateSheet();
    //在工作表中:建立行,参数为行号,从0计
    IRow row = sheet.CreateRow(0);
    //在行中:建立单元格,参数为列号,从0计
    ICell cell = row.CreateCell(0);
    //设置单元格内容
    cell.SetCellValue("实习鉴定表");
    
    
    设置单元格样式:设置单元格样式时需要注意,务必创建一个新的样式对象进行设置,否则会将工作表所有单元格的样式一同设置,它们应该共享的是一个样式对象:
     
    ICellStyle style = workbook.CreateCellStyle();
    //设置单元格的样式:水平对齐居中
    style.Alignment = HorizontalAlignment.CENTER;
    //新建一个字体样式对象
    IFont font = workbook.CreateFont();
    //设置字体加粗样式
    font.Boldweight = short.MaxValue;
    //使用SetFont方法将字体样式添加到单元格样式中 
    style.SetFont(font);
    //将新的样式赋给单元格
    cell.CellStyle = style;

    设置单元格宽高:
      设置单元格的高度实际是设置其所在行高,所以要在单元格所在行上设置行高,行高设置数值好像是像素点的1/20,所以*20以便达到设置效果;
      设置单元格的宽度实际上是设置其所在列宽,所以要在单元格所在列上设置(列的设置在工作表上),宽度数值好像是字符的1/256,所以*256以便达到设置效果。
     
    //设置单元格的高度
    row.Height = 30 * 20;
    //设置单元格的宽度
    sheet.SetColumnWidth(0, 30 * 256);
    合并单元格:合并单元格实际上是声明一个区域,该区域中的单元格将进行合并,合并后的内容与样式以该区域最左上角的单元格为准。
    
    
    //设置一个合并单元格区域,使用上下左右定义CellRangeAddress区域
    //CellRangeAddress四个参数为:起始行,结束行,起始列,结束列
    sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 10));
    
    
    添加公式:使用Cell的CellFormula来设置公式,是一个字符串,公式前不需要加=号。
    
    
    
    
    //通过Cell的CellFormula向单元格中写入公式
    //注:直接写公式内容即可,不需要在最前加'='
    ICell cell2 = sheet.CreateRow(1).CreateCell(0);
    cell2.CellFormula = "HYPERLINK("测试图片.jpg","测试图片.jpg")";
    
    将工作簿写入文件查看效果:
    //将工作簿写入文件
    using (FileStream fs = new FileStream("生成效果.xls", FileMode.Create, FileAccess.Write))
    {
        workbook.Write(fs);
    }
    
    
    最终效果:
    QQ截图20130503205842

    参考资料:

    NPOI的下载地址:http://npoi.codeplex.com/
    NPOI的使用教程(中文):http://tonyqus.sinaapp.com/

    出处:https://www.cnblogs.com/xwgli/archive/2013/05/03/3057824.html


    设置Excel的自动筛选功能

    最新导出数据需要使用Excel的筛选功能,网上多方查找,终于在一个繁体的网站上找到了方法,呃,这个网站还是Java的,讲的是POI,不过.NET的NPOI也就一样用了。

    CellRangeAddress c = CellRangeAddress.ValueOf("A1");
    sheet.SetAutoFilter(c);

    通过设置要进行自动筛选的单个单元格或者多个单元格,然后在sheet上进行设置自动筛选。

    (参考:http://www.javaworld.com.tw/jute/post/view?bid=11&id=301435

    顺便一起说一个

    单元格数字格式的问题

    NPOI向Excel文件中插入数值时,可能会出现数字当作文本的情况(即左上角有个绿色三角),这样单元格的值就无法参与运算。这是因为在SetCellValue设置单元格值的时候使用了字符串进行赋值,默认被转换成了字符型。如果需要纯数字型的,请向SetCellValue中设置数字型变量。

    以上两个问题的示例代码如下:

    //建立空白工作薄
    IWorkbook workbook = new HSSFWorkbook();
    
    //在工作薄中建立工作表
    ISheet sheet = workbook.CreateSheet();
    
    //填充筛选的内容
    sheet.CreateRow(0).CreateCell(0).SetCellValue("省份");
    sheet.CreateRow(1).CreateCell(0).SetCellValue("河北省");
    sheet.CreateRow(2).CreateCell(0).SetCellValue("湖南省");
    
    //验证数字格式问题
    sheet.GetRow(1).CreateCell(2).SetCellValue("123");
    sheet.GetRow(2).CreateCell(2).SetCellValue(123);
    
    //设置Excel的自动筛选
    CellRangeAddress c = CellRangeAddress.ValueOf("A1");
    sheet.SetAutoFilter(c);
    
    //写文件
    using (FileStream fs = new FileStream("haha.xls", FileMode.Create, FileAccess.Write))
    {
        workbook.Write(fs);
    }

    最终的效果显示:

    QQ截图20130708153031

    更多NPOI相关:http://www.cnblogs.com/xwgli/category/467970.html 

    出处:https://www.cnblogs.com/xwgli/p/3178153.html

  • 相关阅读:
    Rsync算法
    java学习之异常
    多边形的扫描转换(一)X扫描线算法
    区域填充算法
    直线绘制的三个著名的常用算法(二)中点画线法
    Dev C++图形环境配置
    直线绘制的三个著名的常用算法(三)Bresenham算法
    直线绘制的三个著名的常用算法(一)数值微分法(DDA)
    反走样
    网课——计算机图形学(第一课)
  • 原文地址:https://www.cnblogs.com/mq0036/p/9835965.html
Copyright © 2011-2022 走看看