コード例 #1
0
        public static List <string> GetMusicNames(string excelPath)
        {
            List <string> names       = new List <string>();
            SlExcelReader slExcel     = new SlExcelReader();
            SlExcelData   slExcelData = slExcel.ReadExcel(excelPath);

            names = slExcelData.DataRows.SelectMany(l => l).Distinct().ToList();
            names.AddRange(slExcelData.Headers);
            return(names);
        }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        ///
        /// <param name="path"></param>
        /// <returns></returns>
        public SlExcelData ReadExcel(string path)
        {
            var data = new SlExcelData();

            // Open the excel document
            SpreadsheetDocument document = null;
            List <Row>          rows     = new List <Row>();

            try
            {
                rows = OpenExcel(path, data, out document);
            }
            catch (IOException)
            {
                throw new Exception("El archivo está abiero. Por favor ciérrelo.");
            }


            if (rows.Count <= 1 || document == null)
            {
                return(data);
            }

            foreach (var row in rows)
            {
                var dataRow = new List <string>();

                var  cellEnumerator = GetExcelCellEnumerator(row);
                bool hayDatos       = false;
                while (cellEnumerator.MoveNext())
                {
                    var cell = cellEnumerator.Current;
                    var text = ReadExcelCell(cell, document.WorkbookPart).Trim();
                    dataRow.Add(text);
                    if (!hayDatos & !string.IsNullOrEmpty(text))
                    {
                        hayDatos = true;
                    }
                }
                if (hayDatos)
                {
                    data.DataRows.Add(dataRow);
                }
            }
            document.Close();
            return(data);
        }
コード例 #3
0
        private static List <Row> OpenExcel(string path, SlExcelData data, out SpreadsheetDocument document)
        {
            List <Row> rows;

            document = SpreadsheetDocument.Open(path, false);
            var workbookPart = document.WorkbookPart;

            var sheets = workbookPart.Workbook.Descendants <Sheet>();
            var sheet  = sheets.First();

            data.SheetName = sheet.Name;

            Worksheet workSheet = ((WorksheetPart)workbookPart.GetPartById(sheet.Id)).Worksheet;

            var columns = workSheet.Descendants <Columns>().FirstOrDefault();

            data.ColumnConfigurations = columns;

            var sheetData = workSheet.Elements <SheetData>().First();

            rows = sheetData.Elements <Row>().ToList();

            return(rows);
        }
コード例 #4
0
        public byte[] GenerateExcel(SlExcelData data)
        {
            var stream   = new MemoryStream();
            var document = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook);

            var workbookpart = document.AddWorkbookPart();

            workbookpart.Workbook = new Workbook();
            var worksheetPart = workbookpart.AddNewPart <WorksheetPart>();
            var sheetData     = new SheetData();

            worksheetPart.Worksheet = new Worksheet(sheetData);

            var sheets = document.WorkbookPart.Workbook.
                         AppendChild <Sheets>(new Sheets());

            var sheet = new Sheet()
            {
                Id      = document.WorkbookPart.GetIdOfPart(worksheetPart),
                SheetId = 1, Name = data.SheetName ?? "Sheet 1"
            };

            sheets.AppendChild(sheet);

            // Add header
            UInt32 rowIdex = 0;
            var    row     = new Row {
                RowIndex = ++rowIdex
            };

            sheetData.AppendChild(row);
            var cellIdex = 0;

            foreach (var header in data.Headers)
            {
                row.AppendChild(CreateTextCell(ColumnLetter(cellIdex++), rowIdex, header ?? string.Empty));
            }
            if (data.Headers.Count > 0)
            {
                // Add the column configuration if available
                if (data.ColumnConfigurations != null)
                {
                    var columns = (Columns)data.ColumnConfigurations.Clone();
                    worksheetPart.Worksheet
                    .InsertAfter(columns, worksheetPart.Worksheet.SheetFormatProperties);
                }
            }

            // Add sheet data
            foreach (var rowData in data.DataRows)
            {
                cellIdex = 0;
                row      = new Row {
                    RowIndex = ++rowIdex
                };
                sheetData.AppendChild(row);
                foreach (var callData in rowData)
                {
                    var cell = CreateTextCell(ColumnLetter(cellIdex++), rowIdex, callData ?? string.Empty);
                    row.AppendChild(cell);
                }
            }

            workbookpart.Workbook.Save();
            document.Close();

            return(stream.ToArray());
        }