private void GenerateSharedStringTablePartContent(SharedStringTablePart sharedStringTablePart, SaveContext context) { // Call all table headers to make sure their names are filled var x = 0; Worksheets.ForEach(w => w.Tables.ForEach(t => x = (t as XLTable).FieldNames.Count)); sharedStringTablePart.SharedStringTable = new SharedStringTable {Count = 0, UniqueCount = 0}; var stringId = 0; var newStrings = new Dictionary<String, Int32>(); var newRichStrings = new Dictionary<IXLRichText, Int32>(); foreach ( var c in Worksheets.Cast<XLWorksheet>().SelectMany( w => w.Internals.CellsCollection.GetCells( c => ((c.DataType == XLCellValues.Text && c.ShareString) || c.HasRichText) && (c as XLCell).InnerText.Length > 0 && XLHelper.IsNullOrWhiteSpace(c.FormulaA1) ))) { c.DataType = XLCellValues.Text; if (c.HasRichText) { if (newRichStrings.ContainsKey(c.RichText)) c.SharedStringId = newRichStrings[c.RichText]; else { var sharedStringItem = new SharedStringItem(); foreach (var rt in c.RichText.Where(r => !String.IsNullOrEmpty(r.Text))) { sharedStringItem.Append(GetRun(rt)); } if (c.RichText.HasPhonetics) { foreach (var p in c.RichText.Phonetics) { var phoneticRun = new PhoneticRun { BaseTextStartIndex = (UInt32)p.Start, EndingBaseIndex = (UInt32)p.End }; var text = new Text {Text = p.Text}; if (p.Text.PreserveSpaces()) text.Space = SpaceProcessingModeValues.Preserve; phoneticRun.Append(text); sharedStringItem.Append(phoneticRun); } var f = new XLFont(null, c.RichText.Phonetics); if (!context.SharedFonts.ContainsKey(f)) context.SharedFonts.Add(f, new FontInfo {Font = f}); var phoneticProperties = new PhoneticProperties { FontId = context.SharedFonts[ new XLFont(null, c.RichText.Phonetics)]. FontId }; if (c.RichText.Phonetics.Alignment != XLPhoneticAlignment.Left) phoneticProperties.Alignment = c.RichText.Phonetics.Alignment.ToOpenXml(); if (c.RichText.Phonetics.Type != XLPhoneticType.FullWidthKatakana) phoneticProperties.Type = c.RichText.Phonetics.Type.ToOpenXml(); sharedStringItem.Append(phoneticProperties); } sharedStringTablePart.SharedStringTable.Append(sharedStringItem); sharedStringTablePart.SharedStringTable.Count += 1; sharedStringTablePart.SharedStringTable.UniqueCount += 1; newRichStrings.Add(c.RichText, stringId); c.SharedStringId = stringId; stringId++; } } else { if (newStrings.ContainsKey(c.Value.ToString())) c.SharedStringId = newStrings[c.Value.ToString()]; else { var s = c.Value.ToString(); var sharedStringItem = new SharedStringItem(); var text = new Text {Text = s}; if (!s.Trim().Equals(s)) text.Space = SpaceProcessingModeValues.Preserve; sharedStringItem.Append(text); sharedStringTablePart.SharedStringTable.Append(sharedStringItem); sharedStringTablePart.SharedStringTable.Count += 1; sharedStringTablePart.SharedStringTable.UniqueCount += 1; newStrings.Add(c.Value.ToString(), stringId); c.SharedStringId = stringId; stringId++; } } } }
public XLStyle(IXLStylized container, IXLStyle initialStyle = null, Boolean useDefaultModify = true) { if (initialStyle != null) { Font = new XLFont(container, initialStyle.Font, useDefaultModify); Alignment = new XLAlignment(container, initialStyle.Alignment); Border = new XLBorder(container, initialStyle.Border, useDefaultModify); Fill = new XLFill(container, initialStyle.Fill, useDefaultModify); NumberFormat = new XLNumberFormat(container, initialStyle.NumberFormat); Protection = new XLProtection(container, initialStyle.Protection); } else { Font = new XLFont(container, null); Alignment = new XLAlignment(container); Border = new XLBorder(container, null); Fill = new XLFill(container); NumberFormat = new XLNumberFormat(container, null); Protection = new XLProtection(container); } DateFormat = NumberFormat; }
private bool FontsAreEqual(Font f, IXLFont xlFont) { var nf = new XLFont {Bold = f.Bold != null, Italic = f.Italic != null}; if (f.Underline != null) { nf.Underline = f.Underline.Val != null ? f.Underline.Val.Value.ToClosedXml() : XLFontUnderlineValues.Single; } nf.Strikethrough = f.Strike != null; if (f.VerticalTextAlignment != null) { nf.VerticalAlignment = f.VerticalTextAlignment.Val != null ? f.VerticalTextAlignment.Val.Value.ToClosedXml() : XLFontVerticalTextAlignmentValues.Baseline; } nf.Shadow = f.Shadow != null; if (f.FontSize != null) nf.FontSize = f.FontSize.Val; var fColor = GetColor(f.Color); if (fColor.HasValue) nf.FontColor = fColor; if (f.FontName != null) nf.FontName = f.FontName.Val; if (f.FontFamilyNumbering != null) nf.FontFamilyNumbering = (XLFontFamilyNumberingValues)f.FontFamilyNumbering.Val.Value; return nf.Equals(xlFont); }