zoukankan      html  css  js  c++  java
  • NPOI操作excel--以及组件转换成Pdf

    1.新建workbook  不同版本,个人建议07以上为准。

    public static IWorkbook Create(ExcelVersion version = ExcelVersion.Excel07)
            {
                IWorkbook workbook = null;
    
                switch (version)
                {
                    case ExcelVersion.Excel03:
                        workbook = new HSSFWorkbook();
                        break;
                    case ExcelVersion.Excel07:
                        workbook = new XSSFWorkbook();
                        break;
                    default:
                        workbook = new XSSFWorkbook();
                        break;
                }
    
                return workbook;
            }
    

     模板也是可以创建的。 

       using (FileStream file = new FileStream(template, FileMode.Open, FileAccess.Read))
                {
                    IWorkbook workbook = WorkbookFactory.Create(file);
                    return workbook;
                }
    

    workbook 可以创建多个sheet

       var sheet = workbook.CreateSheet("invoice");  //参数是sheet name
    

      sheet里面创建行

      IRow headRow = sheet.CreateRow(rowIndex);     //参数是int 型行号,默认从0开始
    

      行里创建单元格

    Row.CreateCell(0).SetCellValue("测试"); // 单元格赋值
    

      2。是我本人遇到的一些样式问题:

    a.设置列宽

     int[] columnWidth = new int[] { 5, 20, 20, 10, 8, 8, 8, 8 };
                // 单位是1/256个字符宽度
                if (columnWidth != null)
                {
                    for (int i = 0; i < columnWidth.Length; i++)
                    {
                        sheet.SetColumnWidth(i, 256 * columnWidth[i]);
                    }
                }
           
    

    b.设置边框 (都是以单元格为单位的) 

    //边框样式
                ICellStyle style = workbook.CreateCellStyle();
                style.BorderBottom = BorderStyle.Hair;
                style.BorderLeft = BorderStyle.Hair;
                style.BorderRight = BorderStyle.Hair;
                style.BorderTop = BorderStyle.Hair;
    
      //字体
                NPOI.SS.UserModel.IFont font = workbook.CreateFont();
                font.FontHeightInPoints = 8;   //8号字 字号
                font.FontName = "SimSun";   //宋体 字体
                style.SetFont(font);
    
    //加背景色
                style.FillPattern = FillPattern.SolidForeground;
                style.FillForegroundColor = HSSFColor.Teal.Index;  //HSSFColor有颜色对照表可以参考的
    
    上面只是一个style变量。
      row.GetCell(0).CellStyle = style;
    //某个单元格设置样式
    

      c.合并单元格

      sheet.AddMergedRegion(new CellRangeAddress(rowIndex, rowIndex, 0, 4));
    //参数是firstRow index,LastRowIndex,firstColumnIndex,LastColumnIndex
    

      d.设置行高和换行

      row.Height = 9 * 20;  //一定要乘以20,具体原因不记得了  设置 行高
    
    //针对内容过长,需要换行,防止excel内容被遮挡。
    // 获取当前列宽度;
                int columnWidth = sheet.GetColumnWidth(columnIndex) / 256;
                //当前行
                var currentRow = sheet.GetRow(rowIndex);
                //当前单元格
                var currentCell = currentRow.GetCell(columnIndex);
                //当前单元格内容的长度
                int length = currentCell.ToString().Length;
    
                currentRow.Height = 20 * 20;
                    //内容换行
                StringBuilder stringBuilder = new StringBuilder(currentRow.Cells[columnIndex].StringCellValue.Substring(0, 13) + "
    ");
                var appendString = currentRow.Cells[columnIndex].StringCellValue.Substring(13, length - 13);
                 stringBuilder.Append(appendString);
                    //设置换行
    
                ICellStyle wrapStyle = workbook.CreateCellStyle();
                    wrapStyle.WrapText = true;
                currentRow.Cells[columnIndex].CellStyle = wrapStyle;        
    

      

     最后加入图片:

      byte[] bytes = File.ReadAllBytes(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
                    VendorContext.Current.SealUrl));
                int pictureIndex = workbook.AddPicture(bytes, PictureType.PNG);
                var patriarch = sheet.CreateDrawingPatriarch();
                XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 1023, 0, 1, rowIndex - 1, 3, rowIndex + 2);
                var pict = patriarch.CreatePicture(anchor, pictureIndex);
                pict.Resize();
    
    
    //这块图片可能拉伸,注意XSSFClientAnchor的参数(大概是x y坐标之类的,反正多测试)
    

      

      

    改变自己,成长自己
  • 相关阅读:
    已知国内量化平台
    用 python 生成一个简单的词云图
    相似性度量的相关文章
    三种交易系统
    一个均线交易策略的回测
    Python在金融量开源项目列表
    雾霾天出行,如何精确避开“雷区”?2016 SODA数据侠十强
    通达信5分钟.lc5和.lc1文件格式
    STM32的USART中断死循环,形成死机。
    挑战练习6.4 报告编译版本
  • 原文地址:https://www.cnblogs.com/xxh-2014/p/11208699.html
Copyright © 2011-2022 走看看