C# NPOI Excel 跨工作薄Workbook复制工作表Sheet

跨工作薄复制Sheet,并不是单纯的将Sheet的数据复制到新Sheet中,需要将数据、公式等包括数据格式(DataFormat),单元格的风格(CellStyle)等等都复制到新Sheet中。

NPOI目前的版本为2.5.1,其Excel处理已经可以较好的支持XSSF(2007及以上)与HSSF(2003及以下)各自的工作薄间的Sheet拷贝,但XSSF工作薄与HSSF工作薄间的Sheet拷贝仍未实现。而2.4.1版的HSSF的Sheet拷贝也并未完善,虽然大部分功能已实现,颜色上有异常,2.5.1版已正常。为了处理各种情况下的Sheet的拷贝,网上有比较多的示例,比较成功的示例虽然有所不同但处理方式大同小异,有些处理考虑也有不到的地方。可参考:NPOI中如何复制Sheetpoi操作excel,复制sheet,复制行,复制单元格。由于某些原因,此处只考虑NPOI 2.4.1的版本下的处理,某些不同的版本可能会有些不同。

处理思路:Sheet的复制主要考虑的就是单元格Cell,分Cell的数据与风格。数据处理网上有许多成功示例,请自寻不赘述。风格处理包括:单元格的各种情况,其中重点是字体与颜色的处理(私设:这也是目前NPOI未解决得好的原因吧 :-p )。本人参考了许多示例,Sheet复制已经能够基本解决,但一直未能处理好颜色情况(包括字体颜色),注意:此处指HSSF与XSSF间的相互或自我复制的不同情况。以下出现的代码示例中,有关颜色部分被屏蔽,呵呵,虽未成功但一直努力中……如有哪位能够解决并提供代码的话,那么基本上NPOI的Sheet复制基本上就成功了。当然,仍然有其它的方面需要解决(如:Chart、Picture……),但对于一般的代码应用,估计差不多了吧。

不多说了……翠花,上酸菜——

public static class NPOIExt
{
    /// <summary>
    /// 跨工作薄Workbook复制工作表Sheet
    /// </summary>
    /// <param name="sSheet">源工作表Sheet</param>
    /// <param name="dWb">目标工作薄Workbook</param>
    /// <param name="dSheetName">目标工作表Sheet名</param>
    /// <param name="clonePrintSetup">是否复制打印设置</param>
    public static ISheet CrossCloneSheet(this ISheet sSheet, IWorkbook dWb, string dSheetName, bool clonePrintSetup)
    {
        ISheet dSheet;
        dSheetName = string.IsNullOrEmpty(dSheetName) ? sSheet.SheetName : dSheetName;
        dSheetName = (dWb.GetSheet(dSheetName) == null) ? dSheetName : dSheetName + "_拷贝";
        dSheet = dWb.GetSheet(dSheetName) ?? dWb.CreateSheet(dSheetName);
        CopySheet(sSheet, dSheet);
        if (clonePrintSetup)
            ClonePrintSetup(sSheet, dSheet);
        dWb.SetActiveSheet(dWb.GetSheetIndex(dSheet));  //当前Sheet作为下次打开默认Sheet
        return dSheet;
    }
    /// <summary>
    /// 跨工作薄Workbook复制工作表Sheet
    /// </summary>
    /// <param name="sSheet">源工作表Sheet</param>
    /// <param name="dWb">目标工作薄Workbook</param>
    /// <param name="dSheetName">目标工作表Sheet名</param>
    public static ISheet CrossCloneSheet(this ISheet sSheet, IWorkbook dWb, string dSheetName)
    {
        bool clonePrintSetup = true;
        return CrossCloneSheet(sSheet, dWb, dSheetName, clonePrintSetup);
    }
    /// <summary>
    /// 跨工作薄Workbook复制工作表Sheet
    /// </summary>
    /// <param name="sSheet">源工作表Sheet</param>
    /// <param name="dWb">目标工作薄Workbook</param>
    public static ISheet CrossClon
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值