NPOI中如何复制Sheet
来源:互联网 发布:浏览器域名劫持 编辑:程序博客网 时间:2024/05/29 16:47
NPOI已经发布到了2.0的版本,可喜的是该版本支持到了Excel2007,但缺憾的是没有复制SHEET表的功能,只有一个CloneSheet方法,确实没明白怎么使用。所以在网上搜索了一下,只找一个JAVA的版本,好像也是自己写的代码实现的。于是拿过来翻译了一下,复制SHEET后的格式基本没变,但单元格的宽度没有实现,ICell接口没有类似于Width的属性,只好作罢。
哪位如果知道CloneSheet方法的使用,恳请留言,免去不必要的操作和代码。
public class SheetClone { 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)); } /// <summary> /// 复制表 /// </summary> /// <param name="wb"></param> /// <param name="fromSheet"></param> /// <param name="toSheet"></param> /// <param name="copyValueFlag"></param> public static void CopySheet(IWorkbook wb, ISheet fromSheet, ISheet toSheet, bool copyValueFlag) { //合并区域处理 MergerRegion(fromSheet, toSheet); System.Collections.IEnumerator rows = fromSheet.GetRowEnumerator(); 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); } } /// <summary> /// 复制行 /// </summary> /// <param name="wb"></param> /// <param name="fromRow"></param> /// <param name="toRow"></param> /// <param name="copyValueFlag"></param> public static void CopyRow(IWorkbook wb, IRow fromRow, IRow toRow, bool copyValueFlag) { System.Collections.IEnumerator cells = fromRow.GetEnumerator(); //.GetRowEnumerator(); toRow.Height = fromRow.Height; while (cells.MoveNext()) { ICell cell = null; //ICell cell = (wb is HSSFWorkbook) ? cells.Current as HSSFCell : cells.Current as NPOI.XSSF.UserModel.XSSFCell; if (wb is HSSFWorkbook) cell = cells.Current as HSSFCell; else cell = cells.Current as NPOI.XSSF.UserModel.XSSFCell; 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 } } } }
- NPOI中如何复制Sheet
- NPOI 复制Sheet(转载)
- NPOI 如何复制一行
- Excel中Sheet复制
- NPOI跨Sheet复制(含格式、字体、合并区域)
- NPOI 将一个sheet指定区域复制到另一个sheet,复制数据,样式和备注
- NPOI复制Excel工作簿Sheet以及删除Excel工作簿
- 复制sheet
- excel sheet中数据的快速复制
- 解决使用NPOI在已有Sheet中插入多张图片问题
- C#利用NPOI在同一个Excel文件中创建多个sheet
- 解决使用NPOI在已有Sheet中插入多张图片问题
- Delphi操作EXCEL复制Sheet到另一个XLS文件中
- python excel sheet复制
- PHPExcel sheet复制
- 如何在NPOI中实现宽度自适应和高度自适应
- vim中如何复制
- 如何添加NPOI引用
- 从MSN上拔下来的全世界国家下拉框(附带SQL执行脚本)
- HDU 4635 多校第四场 1004 强联通
- 暑期宅在家,不如去传智播客免费学c/c++课程!
- FreeBSD图形界面安装
- DB2 rollforward 命令使用详解
- NPOI中如何复制Sheet
- Linux设备驱动开发笔记
- libxml2交叉编译问题及解决办法
- 最简单的聊天程序
- php 链接sqlserver 中文无法插入的解决
- Oauth1.0与2.0的认证流程笔记
- 一个日期进化函数
- 如何把jquery 的dialog和ztree结合
- UVA 10254 - The Priest Mathematician (dp | 汉诺塔 | 找规律 | 大数)