Ejemplo n.º 1
0
        private static Dictionary <string, Dictionary <string, DefinedName> > GetCacheNames(ExecuteArgs param)
        {
            var cacheNames = new Dictionary <string, Dictionary <string, DefinedName> >(StringComparer.OrdinalIgnoreCase);

            foreach (var item in param.Codes.Where(p => p.Attribute.Category == "General" || p.Attribute.Category == param.ProcedureCategory))
            {
                var split = item.Attribute.Code.Split('!');
                if (split.Length == 2)
                {
                    var sheet = split[0].Trim('\'');
                    if (!cacheNames.TryGetValue(sheet, out var names))
                    {
                        cacheNames[sheet] = names = new Dictionary <string, DefinedName>();
                    }
                    var defName = new DefinedName
                    {
                        Name      = item.Attribute.Code,
                        Sheet     = sheet,
                        Reference = split[1],
                        Code      = item
                    };
                    names[defName.Range.Start.ToString()] = defName;
                }
            }
            return(cacheNames);
        }
Ejemplo n.º 2
0
        private void ParseTableDefinition(ExecuteArgs param, Dictionary <string, DefinedName> cacheNames, Stream tableDefinitionPart, TableDefinitionPart newTableDefinitionPart)
        {
            using (var reader = OpenXmlReader.Create(tableDefinitionPart))
                using (var writer = XmlWriter.Create(newTableDefinitionPart.GetStream(),
                                                     new XmlWriterSettings {
                    Encoding = Encoding.UTF8, CloseOutput = true
                }))
                {
                    writer.WriteStartDocument(true);
                    while (reader.Read())
                    {
                        if (reader.ElementType == typeof(Excel.Table))
                        {
                            var table = (Excel.Table)reader.LoadCurrentElement();

                            var code = param.ParseCode(table.Name);
                            if (code != null)
                            {
                                var reference = CellRange.Parse(table.Reference.Value);
                                var defName   = new DefinedName
                                {
                                    Name       = table.Name,
                                    Range      = reference,
                                    Code       = code,
                                    CacheValue = param.GetValue(code)
                                };
                                if (defName.CacheValue is QResult result && result.Values.Count > 0)
                                {
                                    var index = reference.Start.Row + result.Values.Count;
                                    if (index > reference.End.Row)
                                    {
                                        defName.NewRange = new CellRange(reference.Start, new CellReference(reference.End.Col, index));
                                        table.Reference  = defName.NewRange.ToString();
                                        //table.TotalsRowCount = (uint)newrange.Rows;
                                    }
                                    defName.Table = table;
                                    cacheNames[defName.Range.Start.ToString()] = defName;
                                }
                            }
                            WriteElement(writer, table);
                        }
                        else if (reader.IsStartElement)
                        {
                            WriteStartElement(writer, reader);
                        }
                        else if (reader.IsEndElement)
                        {
                            writer.WriteEndElement();
                        }
                    }
                    writer.WriteEndDocument();
                    writer.Flush();
                }
        }
Ejemplo n.º 3
0
 private void ParseWorkbookPart(ExecuteArgs param, Dictionary <string, Dictionary <string, DefinedName> > cacheNames, Stream workbookPart, WorkbookPart newWorkbookPart, List <Excel.Sheet> sheetList)
 {
     using (var reader = OpenXmlReader.Create(workbookPart))
         using (var writer = XmlWriter.Create(newWorkbookPart.GetStream(),
                                              new XmlWriterSettings {
             Encoding = Encoding.UTF8, CloseOutput = true
         }))
         {
             writer.WriteStartDocument(true);
             while (reader.Read())
             {
                 //if (reader.ElementType == typeof(AlternateContent))
                 //{
                 //    var alternate = (AlternateContent)reader.LoadCurrentElement();
                 //    continue;
                 //}
                 if (reader.ElementType == typeof(Excel.DefinedName))
                 {
                     var name = (Excel.DefinedName)reader.LoadCurrentElement();
                     if (!string.IsNullOrEmpty(name.InnerText))
                     {
                         var split = name.InnerText.Split('!');
                         if (split.Length == 2)
                         {
                             var sheet = split[0].Trim('\'');
                             var code  = param.ParseCode(name.Name);
                             if (code != null)
                             {
                                 if (!cacheNames.TryGetValue(sheet, out var names))
                                 {
                                     cacheNames[sheet] = names = new Dictionary <string, DefinedName>();
                                 }
                                 var defName = new DefinedName
                                 {
                                     Name      = name.Name,
                                     Sheet     = sheet,
                                     Reference = split[1],
                                     Code      = code
                                 };
                                 names.Add(defName.Range.Start.ToString(), defName);
                             }
                         }
                     }
                     WriteElement(writer, name);
                 }
                 else if (reader.ElementType == typeof(Excel.Sheet))
                 {
                     var sheet = (Excel.Sheet)reader.LoadCurrentElement();
                     sheetList.Add(sheet);
                     WriteElement(writer, sheet);
                 }
                 else if (reader.IsStartElement)
                 {
                     WriteStartElement(writer, reader);
                 }
                 else if (reader.IsEndElement)
                 {
                     writer.WriteEndElement();
                 }
             }
             writer.WriteEndDocument();
             writer.Flush();
         }
 }