示例#1
0
        public static async Task ImportFile <T>(MGrid <T> pGrid, Stream pFile)
        {
            using var doc = SpreadsheetDocument.Open(pFile, false);

            var worksheetPart = doc.WorkbookPart.WorksheetParts.FirstOrDefault();

            var worksheet = worksheetPart.Worksheet;

            SharedStringTablePart sstpart = doc.WorkbookPart.GetPartsOfType <SharedStringTablePart>().FirstOrDefault();
            SharedStringTable     sst     = sstpart?.SharedStringTable;

            var sheetdata = worksheet.OfType <SheetData>().FirstOrDefault();

            var rows = sheetdata.OfType <Row>();

            var firstValues = GetRow(doc, sst, rows.First());

            var propInfo = GetPropertyInfos(pGrid.PropertyInfos, firstValues);

            if (!propInfo.Any())
            {
                return;
            }

            foreach (var row in rows.Skip(1))
            {
                var rowValues = GetRow(doc, sst, row);

                ProgressRow(propInfo, rowValues, (rowVal, pi) =>
                {
                    if (pi.GetCustomAttribute <RequiredAttribute>() != null && rowVal == null)
                    {
                        throw new UserMessageException($"Column {pi.Name} has an empty value!");
                    }
                });
            }

            foreach (var row in rows.Skip(1))
            {
                var rowValues = GetRow(doc, sst, row);

                T obj = pGrid.CreateNewT();

                var proceeded = ProgressRow(propInfo, rowValues, (object rowVal, IMPropertyInfo pi) =>
                {
                    pi.SetValue(obj, rowVal);
                });

                if (!proceeded)
                {
                    continue;
                }

                pGrid.NewValue = obj;
                await pGrid.OnFormSubmit(new MFormSubmitArgs(null, new Dictionary <string, object>(), obj, true));
            }
        }