private void LoadSharedStringTable()
        {
            var sharedStringTablePart = this.spreadsheetDocument.WorkbookPart.SharedStringTablePart;

            if (sharedStringTablePart == null)
            {
                return;
            }

            using (var reader = OpenXmlReader.Create(sharedStringTablePart.SharedStringTable))
            {
                int i = 0;
                while (reader.Read())
                {
                    if (reader.ElementType == typeof(SharedStringItem))
                    {
                        var sharedStringItem = (SharedStringItem)reader.LoadCurrentElement();
                        this.sharedStrings.Add(sharedStringItem.Text != null ? sharedStringItem.Text.Text : string.Empty, i.ToString());
                        i++;
                    }
                }

                this.originalSharedStringCount = i;
            }
        }
Beispiel #2
0
        /// <summary>
        /// Validate rows from file
        /// </summary>
        /// <remarks></remarks>
        /// <seealso cref=""/>
        /// <param name="worksheetPart">Part of a excel worksheet where the datastructure is located</param>
        /// <param name="startRow">Rows starting</param>
        /// <param name="endRow">Rows ending</param>
        protected void ValidateRows(WorksheetPart worksheetPart, int startRow, int endRow)
        {
            //NEW OPENXMLREADER

            OpenXmlReader reader = OpenXmlReader.Create(worksheetPart);
            int           count  = 0;
            int           rowNum = 0;

            while (reader.Read())
            {
                if (reader.ElementType == typeof(Row))
                {
                    do
                    {
                        if (reader.HasAttributes)
                        {
                            rowNum = Convert.ToInt32(reader.Attributes.First(a => a.LocalName == "r").Value);
                        }

                        if (rowNum >= startRow && rowNum <= endRow)
                        {
                            Row row = (Row)reader.LoadCurrentElement();

                            this.ErrorMessages = this.ErrorMessages.Union(ValidateRow(RowToList(row), rowNum)).ToList();
                            count++;
                        }
                    } while (reader.ReadNextSibling()); // Skip to the next row

                    break;
                }
            }
        }
Beispiel #3
0
        internal void FromConditionalFormatting(X14.ConditionalFormatting cf)
        {
            this.SetAllNull();

            if (cf.Pivot != null)
            {
                this.Pivot = cf.Pivot.Value;
            }

            using (OpenXmlReader oxr = OpenXmlReader.Create(cf))
            {
                while (oxr.Read())
                {
                    SLConditionalFormattingRule2010 cfr;
                    if (oxr.ElementType == typeof(X14.ConditionalFormattingRule))
                    {
                        cfr = new SLConditionalFormattingRule2010();
                        cfr.FromConditionalFormattingRule((X14.ConditionalFormattingRule)oxr.LoadCurrentElement());
                        this.Rules.Add(cfr);
                    }
                    else if (oxr.ElementType == typeof(Excel.ReferenceSequence))
                    {
                        Excel.ReferenceSequence refseq = (Excel.ReferenceSequence)oxr.LoadCurrentElement();
                        this.ReferenceSequence = SLTool.TranslateRefSeqToCellPointRange(refseq);
                    }
                }
            }
        }
        internal void FromColorScale(ColorScale cs)
        {
            SetAllNull();

            SLConditionalFormatValueObject cfvo;
            SLColor clr;

            using (var oxr = OpenXmlReader.Create(cs))
            {
                while (oxr.Read())
                {
                    if (oxr.ElementType == typeof(ConditionalFormatValueObject))
                    {
                        cfvo = new SLConditionalFormatValueObject();
                        cfvo.FromConditionalFormatValueObject((ConditionalFormatValueObject)oxr.LoadCurrentElement());
                        Cfvos.Add(cfvo);
                    }
                    else if (oxr.ElementType == typeof(Color))
                    {
                        clr = new SLColor(new List <System.Drawing.Color>(), new List <System.Drawing.Color>());
                        clr.FromSpreadsheetColor((Color)oxr.LoadCurrentElement());
                        Colors.Add(clr);
                    }
                }
            }
        }
Beispiel #5
0
            private static void ParseViaSAX(string physicalPath)
            {
                using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(physicalPath, false))
                {
                    WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;

                    var sheetCount = workbookPart.Workbook.Sheets.Count();



                    foreach (WorksheetPart wsp in workbookPart.WorksheetParts)
                    {
                        var columnCount = wsp.Worksheet.Descendants <Column>().Count();
                        var rowCount    = wsp.Worksheet.Descendants <Row>().Count();
                        var cellCount   = wsp.Worksheet.Descendants <Cell>().Count();

                        OpenXmlReader reader = OpenXmlReader.Create(wsp);
                        string        text;
                        while (reader.Read())
                        {
                            text = reader.GetText();
                            System.Diagnostics.Debug.WriteLine(text + "");
                            //if (reader.ElementType == typeof(CellValue))
                            //{
                            //    text = reader.GetText();
                            //    Console.Write(text + " ");

                            //    System.Diagnostics.Debug.WriteLine(text + "");
                            //}
                        }
                    }
                }
            }
Beispiel #6
0
        public void PartReaderIgnoreWhitespaceTest(bool ignoreWhitespace)
        {
            const string PartText = "<w:document xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">" +
                                    "<w:body>" +
                                    "<w:p w:rsidP=\"001\"><w:r><w:t>  </w:t></w:r></w:p>" +
                                    "</w:body>" +
                                    "</w:document>";

            using var stream = new MemoryStream(Encoding.UTF8.GetBytes(PartText), false);

            using var reader = OpenXmlReader.Create(stream, false, ignoreWhitespace);
            Assert.False(reader.EOF);

            reader.Read();
            Assert.False(reader.EOF);

            reader.ReadFirstChild();
            Assert.True(reader.IsStartElement);
            Assert.Equal(typeof(Body), reader.ElementType);
            reader.Read();
            Assert.True(reader.IsStartElement);
            Assert.Equal(typeof(Paragraph), reader.ElementType);
            reader.Read();
            Assert.True(reader.IsStartElement);
            Assert.Equal(typeof(Run), reader.ElementType);
            reader.Read();
            Assert.True(reader.IsStartElement);
            Assert.Equal(typeof(Text), reader.ElementType);
            Assert.Equal(ignoreWhitespace, reader.GetText() == string.Empty);

            reader.Close();
        }
Beispiel #7
0
        public void WriteStringExceptionTest4()
        {
            using (var memStream = new MemoryStream())
                using (OpenXmlPartWriter target = new OpenXmlPartWriter(memStream))
                {
                    string text = "abc";
                    target.WriteStartDocument();
                    target.WriteStartElement(new Run());

                    var run = new Run(new Text("111"), new Text("222"));
                    using (var reader = OpenXmlReader.Create(run))
                    {
                        reader.Read();
                        reader.Read();
                        target.WriteStartElement(reader);
                        target.WriteString(reader.GetText());
                        reader.Read();
                        target.WriteEndElement();
                        Assert.Throws <System.InvalidOperationException>(() =>
                        {
                            target.WriteString(text);  // exception
                        });

                        reader.Close();
                    }
                }
        }
        internal void FromColorScale(X14.ColorScale cs)
        {
            SetAllNull();

            SLConditionalFormattingValueObject2010 cfvo;
            SLColor clr;

            using (var oxr = OpenXmlReader.Create(cs))
            {
                while (oxr.Read())
                {
                    if (oxr.ElementType == typeof(X14.ConditionalFormattingValueObject))
                    {
                        cfvo = new SLConditionalFormattingValueObject2010();
                        cfvo.FromConditionalFormattingValueObject(
                            (X14.ConditionalFormattingValueObject)oxr.LoadCurrentElement());
                        Cfvos.Add(cfvo);
                    }
                    else if (oxr.ElementType == typeof(X14.Color))
                    {
                        clr = new SLColor(new List <Color>(), new List <Color>());
                        clr.FromExcel2010Color((X14.Color)oxr.LoadCurrentElement());
                        Colors.Add(clr);
                    }
                }
            }
        }
Beispiel #9
0
        internal void FromConditionalFormat(ConditionalFormat cf)
        {
            SetAllNull();

            if (cf.Scope != null)
            {
                Scope = cf.Scope.Value;
            }
            if (cf.Type != null)
            {
                Type = cf.Type.Value;
            }
            if (cf.Priority != null)
            {
                Priority = cf.Priority.Value;
            }

            SLPivotArea pa;

            using (var oxr = OpenXmlReader.Create(cf))
            {
                while (oxr.Read())
                {
                    if (oxr.ElementType == typeof(PivotArea))
                    {
                        pa = new SLPivotArea();
                        pa.FromPivotArea((PivotArea)oxr.LoadCurrentElement());
                        PivotAreas.Add(pa);
                    }
                }
            }
        }
        private IEnumerable <string> GetFirstRow()
        {
            ValidateImportSettings();
            IList <string> cells = new List <string>();

            using (FileStream fileStream = new FileStream(settings.FileName, FileMode.Open, FileAccess.Read))
            {
                using (SpreadsheetDocument excel = SpreadsheetDocument.Open(fileStream, false))
                {
                    var workbook  = excel.WorkbookPart;
                    var worksheet = workbook.WorksheetParts.First();
                    using (OpenXmlReader reader = OpenXmlReader.Create(worksheet))
                    {
                        try
                        {
                            FindExcelRow(reader);
                            if (reader.ReadFirstChild())
                            {
                                cells = GetExcelRowCells(workbook, reader);
                            }
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show(e.Message);
                        }
                    }
                }
            }
            return(cells);
        }
 /// <summary>
 /// Read rows in excel file.
 /// </summary>
 /// <param name="importParametersId">Session Id.</param>
 /// <returns>Row</returns>
 private IEnumerable <Row> ReadAllRows(Guid importParametersId)
 {
     using (Stream stream = ImportParametersRepository.GetFileStream(importParametersId)) {
         using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(stream, false)) {
             using (var reader = OpenXmlReader.Create(ProcessSpreadsheetDocument(spreadsheetDocument))) {
                 while (reader.Read())
                 {
                     if (reader.ElementType != typeof(Row))
                     {
                         continue;
                     }
                     do
                     {
                         var row       = (Row)reader.LoadCurrentElement();
                         var celValues = ProcessRow(row);
                         if (celValues.Any())
                         {
                             yield return(row);
                         }
                     } while (reader.ReadNextSibling());
                 }
             }
         }
     }
 }
Beispiel #12
0
        public void ObjectDisposedThrowsOnReaderDispose()
        {
            var partreader = OpenXmlReader.Create(new Document(), false);

            partreader.Dispose();
            Assert.Throws <ObjectDisposedException>(() => partreader.ReadMiscNodes);
        }
Beispiel #13
0
        internal void FromIconSet(IconSet ics)
        {
            this.SetAllNull();

            if (ics.IconSetValue != null)
            {
                this.IconSetType = SLIconSet.TranslateIconSetToInternalSet(ics.IconSetValue.Value);
            }
            if (ics.ShowValue != null)
            {
                this.ShowValue = ics.ShowValue.Value;
            }
            if (ics.Percent != null)
            {
                this.Percent = ics.Percent.Value;
            }
            if (ics.Reverse != null)
            {
                this.Reverse = ics.Reverse.Value;
            }

            using (OpenXmlReader oxr = OpenXmlReader.Create(ics))
            {
                SLConditionalFormatValueObject cfvo;
                while (oxr.Read())
                {
                    if (oxr.ElementType == typeof(ConditionalFormatValueObject))
                    {
                        cfvo = new SLConditionalFormatValueObject();
                        cfvo.FromConditionalFormatValueObject((ConditionalFormatValueObject)oxr.LoadCurrentElement());
                        this.Cfvos.Add(cfvo);
                    }
                }
            }
        }
        public int open(string nameParam)
        {
            int retvalueTemp = 0;

            try
            {
                _doc = SpreadsheetDocument.Open(nameParam, true);
            }
            catch (Exception ee)
            {
                Console.WriteLine("<ExcelWriter>" + ee.Message);
                return(-1);
            }

            if (_doc != null)
            {
                _workBook    = _doc.WorkbookPart;
                _workSheet   = _workBook.WorksheetParts.First();
                _reader      = OpenXmlReader.Create(_workSheet);
                retvalueTemp = 1;
            }
            else
            {
                retvalueTemp = -1;
            }
            return(retvalueTemp);
        }
Beispiel #15
0
        public void WriteStartElementWithMisc()
        {
            var node = new OpenXmlMiscNode(XmlNodeType.Comment);

            using var miscReader = OpenXmlReader.Create(node, true);
            Assert.True(miscReader.Read());
            Assert.Throws <ArgumentOutOfRangeException>(() => TestWriteStartElement(WConstrWithStream, WriteStartE, miscReader, null, null));
        }
Beispiel #16
0
    void LeerArchivoExcel(out List <string> Datos, string nombreArchivo)
    {
        SpreadsheetDocument SSD = null;

        if (File.Exists(Directory.GetCurrentDirectory() + @"\Assets\Informacion en Excel\" + nombreArchivo))
        {
            SSD = SpreadsheetDocument.Open(Directory.GetCurrentDirectory() + @"\Assets\Informacion en Excel\" + nombreArchivo, true);
        }
        else if (File.Exists(Directory.GetCurrentDirectory() + @"\" + nombreArchivo))
        {
            SSD = SpreadsheetDocument.Open(Directory.GetCurrentDirectory() + @"\" + nombreArchivo, true);
        }
        else
        {
            Debug.LogError("No se ha encontrado el archivo '" + nombreArchivo + "'. Verifique la direccion o el nombre");
            Datos = null;
            return;
        }
        WorkbookPart  WBP         = SSD.WorkbookPart;
        WorksheetPart WSP         = WBP.WorksheetParts.First();
        var           stringTable = WBP.GetPartsOfType <SharedStringTablePart>().FirstOrDefault();
        OpenXmlReader lector      = OpenXmlReader.Create(WSP);
        List <string> DatosListos = new List <string>();
        int           contador    = 0;

        while (lector.Read())
        {
            if (lector.ElementType == typeof(Row))
            {
                contador++;
            }

            if (lector.ElementType == typeof(Cell) && contador > 1)
            {
                Cell   Celda = (Cell)lector.LoadCurrentElement();
                string valor = null;

                if (Celda != null)
                {
                    valor = Celda.InnerText;
                    if (Celda.DataType != null && stringTable != null)
                    {
                        string Texto = stringTable.SharedStringTable.ElementAt(int.Parse(valor)).InnerText;
                        if (!Texto.Contains("//"))
                        {
                            DatosListos.Add(Texto);
                        }
                    }
                    else if (Celda.DataType == null && valor != "")
                    {
                        DatosListos.Add(valor);
                    }
                }
            }
        }
        Datos = DatosListos;
    }
Beispiel #17
0
        public void DomReaderBasicTest()
        {
            bool      moved             = false;
            string    paragraphOuterXml = "<w:p w:rsidP=\"001\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"><w:r><w:t>Run Text.</w:t><w:t>Run 2.</w:t></w:r></w:p>";
            Paragraph para = new Paragraph(paragraphOuterXml);

            OpenXmlReader targetReader = OpenXmlReader.Create(para);

            targetReader.Read();

            TestReaderOnParagraph(targetReader);

            moved = targetReader.Read(); // should be false

            Assert.False(moved);
            Assert.True(targetReader.EOF);
            // Assert.NotNull(targetReader.Attributes);
            // Assert.Equal(0, targetReader.Attributes.Count);
            // Assert.False(targetReader.HasAttributes);
            // Assert.False(targetReader.IsStartElement);
            // Assert.False(targetReader.IsEndElement);
            // Assert.False(targetReader.IsMiscNode);
            // Assert.Equal(typeof(Paragraph), targetReader.ElementType);
            Assert.True(string.IsNullOrEmpty(targetReader.GetText()));

            targetReader.Close();

            targetReader = OpenXmlReader.Create(para);
            targetReader.Read();

            moved = targetReader.ReadFirstChild(); // read to <w:r>

            OpenXmlElement element = targetReader.LoadCurrentElement();

            // at the end of the run
            Assert.False(targetReader.EOF);
            Assert.NotNull(targetReader.Attributes);
            Assert.Equal(0, targetReader.Attributes.Count);
            Assert.False(targetReader.HasAttributes);
            Assert.False(targetReader.IsStartElement);
            Assert.True(targetReader.IsEndElement);
            Assert.False(targetReader.IsMiscNode);
            Assert.Equal(typeof(Run), targetReader.ElementType);
            Assert.True(string.IsNullOrEmpty(targetReader.GetText()));

            // loaded element is Run
            Assert.NotNull(element);
            Assert.IsType(typeof(Run), element);

            Run run = (Run)element;

            Assert.Equal("Run Text.", (run.FirstChild as Text).Text);
            Assert.Equal("Run 2.", (run.LastChild as Text).Text);

            targetReader.Close();
        }
Beispiel #18
0
        public ExcelDataReader(Stream stream, string sheetName, bool firstRowAsHeader = true)
        {
            _document = SpreadsheetDocument.Open(stream, false);
            _sharedStrings = GetSharedStrings(_document);

            var worksheetPart = _document.WorkbookPart.GetPartById(GetSheetByName(sheetName).Id.Value);
            _reader = OpenXmlReader.Create(worksheetPart);
            SkipRows(GetEmptyRowsCount(worksheetPart));
            _headers = firstRowAsHeader ? GetFirstRowAsHeaders() : GetRangeHeaders(worksheetPart);
        }
Beispiel #19
0
        internal void FromAutoFilter(AutoFilter af)
        {
            SetAllNull();

            var iStartRowIndex    = 1;
            var iStartColumnIndex = 1;
            var iEndRowIndex      = 1;
            var iEndColumnIndex   = 1;
            var sRef = af.Reference.Value;

            if (sRef.IndexOf(":") > 0)
            {
                if (SLTool.FormatCellReferenceRangeToRowColumnIndex(sRef, out iStartRowIndex, out iStartColumnIndex,
                                                                    out iEndRowIndex, out iEndColumnIndex))
                {
                    StartRowIndex    = iStartRowIndex;
                    StartColumnIndex = iStartColumnIndex;
                    EndRowIndex      = iEndRowIndex;
                    EndColumnIndex   = iEndColumnIndex;
                }
            }
            else
            {
                if (SLTool.FormatCellReferenceToRowColumnIndex(sRef, out iStartRowIndex, out iStartColumnIndex))
                {
                    StartRowIndex    = iStartRowIndex;
                    StartColumnIndex = iStartColumnIndex;
                    EndRowIndex      = iStartRowIndex;
                    EndColumnIndex   = iStartColumnIndex;
                }
            }

            if (af.HasChildren)
            {
                SLFilterColumn fc;
                using (var oxr = OpenXmlReader.Create(af))
                {
                    while (oxr.Read())
                    {
                        if (oxr.ElementType == typeof(FilterColumn))
                        {
                            fc = new SLFilterColumn();
                            fc.FromFilterColumn((FilterColumn)oxr.LoadCurrentElement());
                            FilterColumns.Add(fc);
                        }
                        else if (oxr.ElementType == typeof(SortState))
                        {
                            SortState = new SLSortState();
                            SortState.FromSortState((SortState)oxr.LoadCurrentElement());
                            HasSortState = true;
                        }
                    }
                }
            }
        }
Beispiel #20
0
        public void ReadMiscNode()
        {
            var body = new Body(new Paragraph(new ParagraphProperties(), new Run(new Text("test"))));

            body.PrependChild(new OpenXmlMiscNode(XmlNodeType.Comment, "<!-- start body -->"));

            using var reader = OpenXmlReader.Create(body, true);
            Assert.True(reader.Read());
            Assert.True(reader.Read());
            Assert.True(reader.IsMiscNode);
        }
Beispiel #21
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();
                }
        }
 private void FirstRead()
 {
     if (this.firstRead)
     {
         this.currentSheet = this.GetSheetByIndex(this.CurrentSheetIndex);
         var currentWorksheetPart = this.document.WorkbookPart.GetPartById(this.CurrentSheetId);
         this.openXmlReader = OpenXmlReader.Create(currentWorksheetPart);
         this.SkipRows(this.GetEmptyRowsCount(currentWorksheetPart));
         this.FieldNames.AddRange(this.FirstRowAsHeader ? this.GetFirstRowAsHeaders(currentWorksheetPart) : GetRangeHeaders(currentWorksheetPart));
         this.firstRead = false;
     }
 }
Beispiel #23
0
        public void WriteStartElementWithOpenXmlReader()
        {
            var p = new Paragraph(new Run(new Text("test")))
            {
                RsidParagraphAddition = "00000000", RsidRunAdditionDefault = "00B27B3B"
            };

            using var reader = OpenXmlReader.Create(p);
            reader.Read();

            TestWriteStartElement(WConstrWithStream, WriteStartE, reader, null, null);
        }
Beispiel #24
0
        public static OpenXmlElement ToOpenXmlElement(this XElement element)
        {
            // Write XElement to MemoryStream.
            using var stream = new MemoryStream();
            element.Save(stream);
            stream.Seek(0, SeekOrigin.Begin);

            // Read OpenXmlElement from MemoryStream.
            using OpenXmlReader reader = OpenXmlReader.Create(stream);
            reader.Read();
            return(reader.LoadCurrentElement());
        }
        internal void FromCustomFilters(CustomFilters cfs)
        {
            SetAllNull();

            if ((cfs.And != null) && cfs.And.Value)
            {
                And = cfs.And.Value;
            }

            var          i = 0;
            CustomFilter cf;

            using (var oxr = OpenXmlReader.Create(cfs))
            {
                while (oxr.Read())
                {
                    if (oxr.ElementType == typeof(CustomFilter))
                    {
                        ++i;
                        cf = (CustomFilter)oxr.LoadCurrentElement();
                        if (i == 1)
                        {
                            OneCustomFilter = true;
                            if (cf.Operator != null)
                            {
                                FirstOperator = cf.Operator.Value;
                            }
                            if (cf.Val != null)
                            {
                                FirstVal = cf.Val.Value;
                            }
                        }
                        else if (i == 2)
                        {
                            OneCustomFilter = false;
                            if (cf.Operator != null)
                            {
                                SecondOperator = cf.Operator.Value;
                            }
                            if (cf.Val != null)
                            {
                                SecondVal = cf.Val.Value;
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                }
            }
        }
Beispiel #26
0
        private List <Dictionary <string, double> > ReadValues(WorksheetPart sheet, CellReader cellReader)
        {
            var data = new List <Dictionary <string, double> >();

            using (var reader = OpenXmlReader.Create(sheet))
            {
                var columns = new Dictionary <string, string>();
                Action <Dictionary <string, double>, string, double> saveValueTo = (row, columnKey, value) => row[columns[columnKey]] = value;
                var firstRowState = ReadingState.NotStarted;
                Dictionary <string, double> currentRow = null;

                while (reader.Read())
                {
                    if (isStartingReadFirstRow(reader, firstRowState))
                    {
                        firstRowState = ReadingState.Reading;
                    }

                    if (isEndingReadFirstRow(reader, firstRowState))
                    {
                        firstRowState = ReadingState.Complete;
                    }

                    if (reader.ElementType == typeof(Cell))
                    {
                        var cell      = (Cell)reader.LoadCurrentElement();
                        var columnKey = cellReader.GetColumnKeyOf(cell);

                        if (firstRowState == ReadingState.Reading)
                        {
                            var columnName = cellReader.GetValueFrom(cell);
                            columns.Add(columnKey, columnName);
                            continue;
                        }

                        if (firstRowState == ReadingState.Complete)
                        {
                            if (IsFirstColumn(columnKey))
                            {
                                currentRow = new Dictionary <string, double>();
                                data.Add(currentRow);
                            }

                            var value = cellReader.GetValueOfDouble(cell);
                            saveValueTo(currentRow, columnKey, value);
                        }
                    }
                }
            }

            return(data);
        }
Beispiel #27
0
        public void WriteStartElementWithEndElementReader()
        {
            var p = new Paragraph(new Run(new Text("test")))
            {
                RsidParagraphAddition = "00000000", RsidRunAdditionDefault = "00B27B3B"
            };

            using var reader = OpenXmlReader.Create(p);
            reader.Read();
            reader.LoadCurrentElement();

            Assert.Throws <ArgumentOutOfRangeException>(() => TestWriteStartElement(WConstrWithStream, WriteStartE, reader, null, null));
        }
Beispiel #28
0
        public override List <Model.Field> FieldDefinitions(string fileName, Model.Template template)
        {
            var fields = new List <Model.Field>();
            int row    = 0;

            using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, false)) {
                WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
                var          cellFormats  = workbookPart.WorkbookStylesPart.Stylesheet.CellFormats;
                foreach (WorksheetPart worksheetPart in workbookPart.WorksheetParts)
                {
                    OpenXmlReader reader     = OpenXmlReader.Create(worksheetPart);
                    var           needHeader = true;
                    while (reader.Read())
                    {
                        if (reader.ElementType == typeof(Row))
                        {
                            reader.ReadFirstChild();
                            int columnIndex = 0;
                            do
                            {
                                if (reader.ElementType == typeof(Cell))
                                {
                                    Cell c         = (Cell)reader.LoadCurrentElement();
                                    var  cellValue = GetCellValue(workbookPart, cellFormats, c);
                                    if (needHeader)
                                    {
                                        SetHeader(template.HasHeaders, fields, c, cellValue);
                                        if (template.HasHeaders)
                                        {
                                            continue;
                                        }
                                    }
                                    string excelColumnReference = Regex.Replace(c.CellReference, "\\d", "");
                                    var    field = fields.FirstOrDefault(f => f.ExcelColumnReference == excelColumnReference);
                                    if (field != null && field.ColumnIndex != columnIndex)
                                    {
                                        fields[columnIndex].IsNullable = true;
                                        columnIndex = field.ColumnIndex;
                                    }
                                    SetFieldType(fields, cellValue, c);
                                    columnIndex++;
                                }
                            } while (reader.ReadNextSibling());
                            needHeader = false;
                            row++;
                        }
                    }
                }
            }
            return(fields);
        }
Beispiel #29
0
        /// <summary>
        /// Gets the header (first row) of the specified sheet
        /// </summary>
        /// <param name="worksheet">The sheet to use</param>
        /// <returns>A list of cell values for the first row of the sheet</returns>
        public IList <string> GetHeader(Worksheet worksheet)
        {
            try
            {
                List <string>     result        = new List <string>();
                SharedStringTable sharedStrings = document.WorkbookPart.SharedStringTablePart.SharedStringTable;

                WorksheetPart worksheetData = (WorksheetPart)document.WorkbookPart.GetPartById(worksheet.ID);
                using (OpenXmlReader reader = OpenXmlReader.Create(worksheetData))
                {
                    // Read until a Row object is found.
                    while (reader.Read())
                    {
                        if (reader.ElementType == typeof(Row))
                        {
                            if (reader.ReadFirstChild())
                            {
                                do
                                {
                                    if (reader.ElementType == typeof(Cell))
                                    {
                                        Cell c = (Cell)reader.LoadCurrentElement();
                                        if (c.DataType != null && c.DataType == CellValues.SharedString)
                                        {
                                            result.Add(sharedStrings.ElementAt(int.Parse(c.CellValue.Text)).InnerText);
                                        }
                                        else
                                        {
                                            result.Add(c.CellValue.Text);
                                        }
                                    }
                                } while (reader.ReadNextSibling());

                                return(result);
                            }

                            // If logic reaches here, then this row had no cells.
                            // Skip to the next row and check.
                            Logger.Warn("Found a row with no cells.");
                        }
                    }
                }

                throw new SpreadsheetReaderException("No header found for worksheet.");
            }
            catch (Exception ex)
            {
                Logger.Fatal(ex, "An error occurred while getting header.");
                throw ex;
            }
        }
        public async Task <IActionResult> UploadExcelFile(IFormFile fileInfo)
        {
            try
            {
                if (fileInfo == null || fileInfo.Length == 0)
                {
                    return(BadRequest("File not found"));
                }
                Dictionary <string, Dictionary <string, string> > rowData = new Dictionary <string, Dictionary <string, string> >();
                Dictionary <string, string> colData = new Dictionary <string, string>();
                var filePath = Path.GetTempFileName();
                var memory   = new MemoryStream();
                await fileInfo.CopyToAsync(memory);

                using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(memory, false))
                {
                    WorkbookPart  workbookPart  = spreadsheetDocument.WorkbookPart;
                    WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
                    SheetData     sheetData     = worksheetPart.Worksheet.Elements <SheetData>().First();
                    OpenXmlReader reader        = OpenXmlReader.Create(worksheetPart);

                    foreach (Row rw in sheetData.Elements <Row>())
                    {
                        foreach (Cell cl in rw.Elements <Cell>())
                        {
                            if (int.Parse(cl.InnerText) >= 0)
                            {
                                int stringId = int.Parse(cl.InnerText);
                                colData.Add(cl.CellReference, workbookPart.SharedStringTablePart.SharedStringTable.Elements <SharedStringItem>().ElementAt(stringId).InnerText);
                                //colData.Add(cl.CellReference, cl.InnerText);
                            }
                        }
                        rowData.Add(Guid.NewGuid().ToString(), colData);
                        colData = new Dictionary <string, string>();
                    }
                }
                //Insert new data in newly added sheet
                CreateNewSheetAndInsertData(memory, rowData);
                memory.Position = 0;
                var path = Path.Combine(Directory.GetCurrentDirectory(), $"wwwroot/upload", fileInfo.FileName);
                using (var stream = new FileStream(path, FileMode.Create))
                {
                    await memory.CopyToAsync(stream);
                }
                return(Ok());
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }