NanoXLSX.Writer 3.0.0-rc.3
Loading...
Searching...
No Matches
SharedStringWriter.cs
1/*
2 * NanoXLSX is a small .NET library to generate and read XLSX (Microsoft Excel 2007 or newer) files in an easy and native way
3 * Copyright Raphael Stoeckli © 2025
4 * This library is licensed under the MIT License.
5 * You find a copy of the license in project folder or on: http://opensource.org/licenses/MIT
6 */
7
10using NanoXLSX.Registry;
11using NanoXLSX.Registry.Attributes;
12using NanoXLSX.Utils;
13using NanoXLSX.Utils.Xml;
14
16{
20 [NanoXlsxPlugIn(PlugInUUID = PlugInUUID.SharedStringsWriter)]
21 internal class SharedStringWriter : ISharedStringWriter
22 {
23 private XmlElement sst;
24 private SortedMap sharedStrings;
25
26 #region properties
30 public Workbook Workbook { get; set; }
31
35 public XmlElement XmlElement { get => sst; }
36
40 public int SharedStringsTotalCount { get; set; }
41
45 public ISortedMap SharedStrings
46 {
47 get { return sharedStrings; }
48 }
49
50 #endregion
51 #region constructors
55 public SharedStringWriter()
56 {
57 }
58
59 #endregion
60 #region methods
65 public void Init(IBaseWriter baseWriter)
66 {
67 this.Workbook = baseWriter.Workbook;
68 sharedStrings = new SortedMap();
69 SharedStringsTotalCount = 0;
70 }
71
75 public void Execute()
76 {
77 sst = XmlElement.CreateElement("sst");
78 sst.AddDefaultXmlNameSpace("http://schemas.openxmlformats.org/spreadsheetml/2006/main");
79 sst.AddAttribute("count", ParserUtils.ToString(SharedStringsTotalCount));
80 sst.AddAttribute("uniqueCount", ParserUtils.ToString(sharedStrings.Count));
81 foreach (IFormattableText text in sharedStrings.Keys)
82 {
83 XmlElement child = XmlElement.CreateElement("si");
84
85 child.AddChildElement(text.GetXmlElement());
86 sst.AddChildElement(child);
87 }
88
89 WriterPlugInHandler.HandleInlineQueuePlugins(ref sst, Workbook, PlugInUUID.SharedStringsInlineWriter);
90 }
91 #endregion
92 }
93}