NPOI 复制 工作表

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

    /// 
    /// 复制表
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 预计总列数
    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);
        }
    }  
    /// 
    /// 复制行 带设置列宽度
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    /// 
    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);
        }
    }

        /// 
        /// 复制原有sheet的合并单元格到新创建的sheet
        /// 
        /// 
        /// 
        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));
        }
    }
    /// 
    /// 复制单元格
    /// 
    /// 
    /// 
    /// 
    /// 
    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));
    }

 

你可能感兴趣的:(NET)