private void SaveSharedStringHandler(ZipOutputStream stream, CompressionLevel compressionLevel, string fileName) { //Packaging.ZipPackagePart stringPart; //if (_package.Package.PartExists(SharedStringsUri)) //{ // stringPart=_package.Package.GetPart(SharedStringsUri); //} //else //{ // stringPart = _package.Package.CreatePart(SharedStringsUri, @"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml", _package.Compression); //Part.CreateRelationship(UriHelper.GetRelativeUri(WorkbookUri, SharedStringsUri), Packaging.TargetMode.Internal, ExcelPackage.schemaRelationships + "/sharedStrings"); //} //StreamWriter sw = new StreamWriter(stringPart.GetStream(FileMode.Create, FileAccess.Write)); //Init Zip stream.CompressionLevel = (OfficeOpenXml.Packaging.Ionic.Zlib.CompressionLevel)compressionLevel; stream.PutNextEntry(fileName); var cache = new StringBuilder(); var sw = new StreamWriter(stream); cache.AppendFormat("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?><sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"{0}\" uniqueCount=\"{0}\">", _sharedStrings.Count); foreach (string t in _sharedStrings.Keys) { SharedStringItem ssi = _sharedStrings[t]; if (ssi.isRichText) { cache.Append("<si>"); ConvertUtil.ExcelEncodeString(cache, t); cache.Append("</si>"); } else { if (t.Length > 0 && (t[0] == ' ' || t[t.Length - 1] == ' ' || t.Contains(" ") || t.Contains("\t") || t.Contains("\n"))) //Fixes issue 14849 { cache.Append("<si><t xml:space=\"preserve\">"); } else { cache.Append("<si><t>"); } ConvertUtil.ExcelEncodeString(cache, ConvertUtil.ExcelEscapeString(t)); cache.Append("</t></si>"); } if (cache.Length > 0x600000) { sw.Write(cache.ToString()); cache = new StringBuilder(); } } cache.Append("</sst>"); sw.Write(cache.ToString()); sw.Flush(); // Issue 15252: Save SharedStrings only once //Part.CreateRelationship(UriHelper.GetRelativeUri(WorkbookUri, SharedStringsUri), Packaging.TargetMode.Internal, ExcelPackage.schemaRelationships + "/sharedStrings"); }
private void SaveSharedStringHandler(ZipOutputStream stream, CompressionLevel compressionLevel, string fileName) { stream.CompressionLevel = (OfficeOpenXml.Packaging.Ionic.Zlib.CompressionLevel)compressionLevel; stream.PutNextEntry(fileName); var cache = new StringBuilder(); var sw = new StreamWriter(stream); cache.AppendFormat("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?><sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"{0}\" uniqueCount=\"{0}\">", SharedStrings.Count); foreach (string t in SharedStrings.Keys) { SharedStringItem ssi = SharedStrings[t]; if (ssi.isRichText) { cache.Append("<si>"); ConvertUtil.ExcelEncodeString(cache, t); cache.Append("</si>"); } else { if (t.Length > 0 && (t[0] == ' ' || t[t.Length - 1] == ' ' || t.Contains(" ") || t.Contains("\t") || t.Contains("\n") || t.Contains("\n"))) //Fixes issue 14849 { cache.Append("<si><t xml:space=\"preserve\">"); } else { cache.Append("<si><t>"); } ConvertUtil.ExcelEncodeString(cache, ConvertUtil.ExcelEscapeString(t)); cache.Append("</t></si>"); } if (cache.Length > 0x600000) { sw.Write(cache.ToString()); cache = new StringBuilder(); } } cache.Append("</sst>"); sw.Write(cache.ToString()); sw.Flush(); }