NPOI 复制 工作表

复制原有的列宽,隐藏列,但没实现形状的复制。

    /// <summary>
    /// 复制表
    /// </summary>
    /// <param name="wb"></param>
    /// <param name="fromSheet"></param>
    /// <param name="toSheet"></param>
    /// <param name="copyValueFlag"></param>
    /// <param name="cellnum">预计总列数</param>
    public static void CopySheet(IWorkbook wb, ISheet fromSheet, ISheet toSheet, bool copyValueFlag,int cellnum=40)
    {
        //合并区域处理
        MergerRegion(fromSheet, toSheet);
       
        System.Collections.IEnumerator rows = fromSheet.GetRowEnumerator();
      
       
        //一行最后一个方格的编号(即总的列数)       
       
        for (int i =0; i< cellnum; i++)  // 设置隐藏的列  
        {
            if (fromSheet.IsColumnHidden(i))
            {              
                toSheet.SetColumnHidden(i, true);
            }
        }
        while (rows.MoveNext())
        {
            IRow row = null;
            if (wb is HSSFWorkbook)
                row = rows.Current as HSSFRow;
            else
                row = rows.Current as NPOI.XSSF.UserModel.XSSFRow;
            IRow newRow = toSheet.CreateRow(row.RowNum);
     
            CopyRow(wb, row, newRow, copyValueFlag, fromSheet, toSheet);
        }
    }  
    /// <summary>
    /// 复制行 带设置列宽度
    /// </summary>
    /// <param name="wb"></param>
    /// <param name="fromRow"></param>
    /// <param name="toRow"></param>
    /// <param name="copyValueFlag"></param>
    /// <param name="fromSheet"></param>
    /// <param name="toSheet"></param>
    public static void CopyRow(IWorkbook wb, IRow fromRow, IRow toRow, bool copyValueFlag, ISheet fromSheet, ISheet toSheet)
    {
        System.Collections.IEnumerator cells = fromRow.GetEnumerator(); //.GetRowEnumerator();
        toRow.Height = fromRow.Height;
        while (cells.MoveNext())
        {
            ICell cell = null;
            if (wb is HSSFWorkbook) cell = cells.Current as HSSFCell;
            else cell = cells.Current as NPOI.XSSF.UserModel.XSSFCell;
            int column = cell.ColumnIndex; int row = cell.RowIndex; int coun = fromSheet.GetColumnWidth(row);//获取列宽 
          
            toSheet.SetColumnWidth(row, coun);//设置列宽 
           
            ICell newCell = toRow.CreateCell(cell.ColumnIndex);

            CopyCell(wb, cell, newCell, copyValueFlag);
        }
    }

        /// <summary>
        /// 复制原有sheet的合并单元格到新创建的sheet
        /// </summary>
        /// <param name="fromSheet"></param>
        /// <param name="toSheet"></param>
        public static void MergerRegion(ISheet fromSheet, ISheet toSheet)
    {
        int sheetMergerCount = fromSheet.NumMergedRegions;
        for (int i = 0; i < sheetMergerCount; i++)
        {
            //Region mergedRegionAt = fromSheet.GetMergedRegion(i); //.MergedRegionAt(i);
            //CellRangeAddress[] cra = new CellRangeAddress[1];
            //cra[0] = fromSheet.GetMergedRegion(i);
            //Region[] rg = Region.ConvertCellRangesToRegions(cra);
            
            toSheet.AddMergedRegion(fromSheet.GetMergedRegion(i));
        }
    }
    /// <summary>
    /// 复制单元格
    /// </summary>
    /// <param name="wb"></param>
    /// <param name="srcCell"></param>
    /// <param name="distCell"></param>
    /// <param name="copyValueFlag"></param>
    public static void CopyCell(IWorkbook wb, ICell srcCell, ICell distCell, bool copyValueFlag)
    {
        ICellStyle newstyle = wb.CreateCellStyle();
        CopyCellStyle(wb, srcCell.CellStyle, newstyle);
        
        //样式
        distCell.CellStyle = newstyle;
        //评论
        if (srcCell.CellComment != null)
        {
            distCell.CellComment = srcCell.CellComment;
        }
        // 不同数据类型处理
        CellType srcCellType = srcCell.CellType;
      
        distCell.SetCellType(srcCellType);
        if (copyValueFlag)
        {
            if (srcCellType == CellType.Numeric)
            {

                if (HSSFDateUtil.IsCellDateFormatted(srcCell))
                {
                    distCell.SetCellValue(srcCell.DateCellValue);
                }
                else
                {
                    distCell.SetCellValue(srcCell.NumericCellValue);
                }
            }
            else if (srcCellType == CellType.String)
            {
                distCell.SetCellValue(srcCell.RichStringCellValue);
            }
            else if (srcCellType == CellType.Blank)
            {
                // nothing21
            }
            else if (srcCellType == CellType.Boolean)
            {
                distCell.SetCellValue(srcCell.BooleanCellValue);
            }
            else if (srcCellType == CellType.Error)
            {
                distCell.SetCellErrorValue(srcCell.ErrorCellValue);
            }
            else if (srcCellType == CellType.Formula)
            {
                distCell.SetCellFormula(srcCell.CellFormula);
            }
            else
            { // nothing29
            }
        }
    }


    public static void CopyCellStyle(IWorkbook wb, ICellStyle fromStyle, ICellStyle toStyle)
    {
        toStyle.Alignment = fromStyle.Alignment;
        
        //边框和边框颜色
        toStyle.BorderBottom = fromStyle.BorderBottom;
        toStyle.BorderLeft = fromStyle.BorderLeft;
        toStyle.BorderRight = fromStyle.BorderRight;
        toStyle.BorderTop = fromStyle.BorderTop;
        toStyle.TopBorderColor = fromStyle.TopBorderColor;
        toStyle.BottomBorderColor = fromStyle.BottomBorderColor;
        toStyle.RightBorderColor = fromStyle.RightBorderColor;
        toStyle.LeftBorderColor = fromStyle.LeftBorderColor;       
        //背景和前景
        toStyle.FillBackgroundColor = fromStyle.FillBackgroundColor;
        toStyle.FillForegroundColor = fromStyle.FillForegroundColor;

        toStyle.DataFormat = fromStyle.DataFormat;
        toStyle.FillPattern = fromStyle.FillPattern;
        //toStyle.Hidden=fromStyle.Hidden;
        toStyle.IsHidden = fromStyle.IsHidden;
        toStyle.Indention = fromStyle.Indention;//首行缩进
        toStyle.IsLocked = fromStyle.IsLocked;
        toStyle.Rotation = fromStyle.Rotation;//旋转
        toStyle.VerticalAlignment = fromStyle.VerticalAlignment;
        toStyle.WrapText = fromStyle.WrapText;
        toStyle.SetFont(fromStyle.GetFont(wb));
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值