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; }
internal int CloneStyle(ExcelStyles style, int styleID) { return CloneStyle(style, styleID, false); }