示例#1
0
        internal int CloneStyle(ExcelStyles style, int styleID, bool isNamedStyle)
        {
            ExcelXfs xfs;

            if (isNamedStyle)
            {
                xfs = style.CellStyleXfs[styleID];
            }
            else
            {
                xfs = style.CellXfs[styleID];
            }
            ExcelXfs newXfs = xfs.Copy(this);

            //Numberformat
            if (xfs.NumberFormatId > 0)
            {
                string format = "";
                foreach (var fmt in style.NumberFormats)
                {
                    if (fmt.NumFmtId == xfs.NumberFormatId)
                    {
                        format = fmt.Format;
                        break;
                    }
                }
                int ix = NumberFormats.FindIndexByID(format);
                if (ix < 0)
                {
                    ExcelNumberFormatXml item = new ExcelNumberFormatXml(NameSpaceManager)
                    {
                        Format = format, NumFmtId = NumberFormats.NextId++
                    };
                    NumberFormats.Add(format, item);
                    ix = item.NumFmtId;
                }
                newXfs.NumberFormatId = ix;
            }

            //Font
            if (xfs.FontId > -1)
            {
                int ix = Fonts.FindIndexByID(xfs.Font.Id);
                if (ix < 0)
                {
                    ExcelFontXml item = style.Fonts[xfs.FontId].Copy();
                    ix = Fonts.Add(xfs.Font.Id, item);
                }
                newXfs.FontId = ix;
            }

            //Border
            if (xfs.BorderId > -1)
            {
                int ix = Borders.FindIndexByID(xfs.Border.Id);
                if (ix < 0)
                {
                    ExcelBorderXml item = style.Borders[xfs.BorderId].Copy();
                    ix = Borders.Add(xfs.Border.Id, item);
                }
                newXfs.BorderId = ix;
            }

            //Fill
            if (xfs.FillId > -1)
            {
                int ix = Fills.FindIndexByID(xfs.Fill.Id);
                if (ix < 0)
                {
                    var item = style.Fills[xfs.FillId].Copy();
                    ix = Fills.Add(xfs.Fill.Id, item);
                }
                newXfs.FillId = ix;
            }

            //Named style reference
            if (xfs.XfId > 0)
            {
                var id    = style.CellStyleXfs[xfs.XfId].Id;
                var newId = CellStyleXfs.FindIndexByID(id);
                //if (newId < 0)
                //{

                //    newXfs.XfId = CloneStyle(style, xfs.XfId, true);
                //}
                //else
                //{
                newXfs.XfId = newId;
                //}
            }

            int index;

            if (isNamedStyle)
            {
                index = CellStyleXfs.Add(newXfs.Id, newXfs);
            }
            else
            {
                index = CellXfs.FindIndexByID(newXfs.Id);
                if (index < 0)
                {
                    index = CellXfs.Add(newXfs.Id, newXfs);
                }
            }
            return(index);
        }
示例#2
0
        internal int CloneStyle(ExcelStyles style, int styleID, bool isNamedStyle)
        {
            ExcelXfs xfs;
            if (isNamedStyle)
            {
                xfs = style.CellStyleXfs[styleID];
            }
            else
            {
                xfs = style.CellXfs[styleID];
            }
            ExcelXfs newXfs=xfs.Copy(this);
            //Numberformat
            if (xfs.NumberFormatId > 0)
            {
                string format="";
                foreach (var fmt in style.NumberFormats)
                {
                    if (fmt.NumFmtId == xfs.NumberFormatId)
                    {
                        format=fmt.Format;
                        break;
                    }
                }
                int ix=NumberFormats.FindIndexByID(format);
                if (ix<0)
                {
                    ExcelNumberFormatXml item = new ExcelNumberFormatXml(NameSpaceManager) { Format = format, NumFmtId = NumberFormats.NextId++ };
                    NumberFormats.Add(format, item);
                    ix=item.NumFmtId;
                }
                newXfs.NumberFormatId= ix;
            }

            //Font
            if (xfs.FontId > -1)
            {
                int ix=Fonts.FindIndexByID(xfs.Font.Id);
                if (ix<0)
                {
                    ExcelFontXml item = style.Fonts[xfs.FontId].Copy();
                    ix=Fonts.Add(xfs.Font.Id, item);
                }
                newXfs.FontId=ix;
            }

            //Border
            if (xfs.BorderId > -1)
            {
                int ix = Borders.FindIndexByID(xfs.Border.Id);
                if (ix < 0)
                {
                    ExcelBorderXml item = style.Borders[xfs.BorderId].Copy();
                    ix = Borders.Add(xfs.Border.Id, item);
                }
                newXfs.BorderId = ix;
            }

            //Fill
            if (xfs.FillId > -1)
            {
                int ix = Fills.FindIndexByID(xfs.Fill.Id);
                if (ix < 0)
                {
                    var item = style.Fills[xfs.FillId].Copy();
                    ix = Fills.Add(xfs.Fill.Id, item);
                }
                newXfs.FillId = ix;
            }

            //Named style reference
            if (xfs.XfId > 0)
            {
                var id = style.CellStyleXfs[xfs.XfId].Id;
                var newId = CellStyleXfs.FindIndexByID(id);
                //if (newId < 0)
                //{
                    
                //    newXfs.XfId = CloneStyle(style, xfs.XfId, true);
                //}
                //else
                //{
                    newXfs.XfId = newId;
                //}
            }

            int index;
            if (isNamedStyle)
            {
                index = CellStyleXfs.Add(newXfs.Id, newXfs);
            }
            else
            {
                index = CellXfs.FindIndexByID(newXfs.Id);
                if (index < 0)
                {
                    index = CellXfs.Add(newXfs.Id, newXfs);
                }
            }
            return index;
        }
示例#3
0
 internal int CloneStyle(ExcelStyles style, int styleID)
 {
     return(CloneStyle(style, styleID, false));
 }
示例#4
0
 internal int CloneStyle(ExcelStyles style, int styleID)
 {
     return CloneStyle(style, styleID, false);
 }