private static void ExportToSingleSheet([NotNull] WorkbookPart workbookPart, [NotNull] IResourceScope scope) { var languages = scope.Languages.Concat(scope.Comments).Distinct().ToArray(); var entries = scope.Entries.ToArray(); var sheet = new Sheet { Name = "ResXResourceManager", Id = "Id1", SheetId = 1 }; var headerRow = _singleSheetFixedColumnHeaders.Concat(languages.GetLanguageColumnHeaders(scope)); var dataRows = entries.Select(e => new[] { e.Container.ProjectName, e.Container.UniqueName }.Concat(e.GetDataRow(languages, scope))); var rows = new[] { headerRow }.Concat(dataRows); var dataAppender = new DataAppender(_singleSheetFixedColumnHeaders.Length); workbookPart.Workbook = new Workbook().AppendItem(new Sheets(sheet)); var sheetData = rows.Aggregate(new SheetData(), dataAppender.AppendRow); if (sheetData.ChildElements.Count > 1048576) { throw new ImportException("The Excel limit is 1048576 rows per sheet. The data can't be exported"); } workbookPart .AddNewPart <WorksheetPart>(sheet.Id) .Worksheet = new Worksheet() .AppendItem(sheetData) .Protect(); }
private static void ExportToMultipleSheets([NotNull] ResourceManager resourceManager, [NotNull] WorkbookPart workbookPart, [CanBeNull] IResourceScope scope) { var entitiesQuery = GetMultipleSheetEntities(resourceManager); if (scope != null) { var entitiesInScope = scope.Entries.Select(entry => entry.Container).Distinct().ToArray(); entitiesQuery = entitiesQuery.Where(entity => entitiesInScope.Contains(entity.ResourceEntity)); } var entities = entitiesQuery.ToArray(); workbookPart.Workbook = new Workbook().AppendItem(entities.Aggregate(new Sheets(), (seed, item) => seed.AppendItem(item.CreateSheet()))); var dataAppender = new DataAppender(_fixedColumnHeaders.Length); foreach (var item in entities) { workbookPart .AddNewPart <WorksheetPart>(item.Id) .Worksheet = new Worksheet() .AppendItem(item.GetDataRows(scope).Aggregate(new SheetData(), dataAppender.AppendRow)) .Protect(); } }
public CsrFiller(DataViewRow input, int idvColIndex, DataViewType type, DataAppender <TSrc> dataAppender, CsrData csrData) : base() { Contracts.AssertValue(input); Contracts.Assert(0 <= idvColIndex && idvColIndex < input.Schema.Count); if (type is VectorDataViewType) { _getVec = RowCursorUtils.GetVecGetterAs <TSrc>((PrimitiveDataViewType)type.GetItemType(), input, idvColIndex); } else { _get = RowCursorUtils.GetGetterAs <TSrc>(type, input, idvColIndex); } _csrData = csrData; _dataAppender = dataAppender; }
public static CsrFillerBase Create(EnvironmentBlock *penv, DataViewRow input, int idvCol, DataViewType idvColType, InternalDataKind outputDataKind, CsrData csrData) { if (outputDataKind == InternalDataKind.R4) { switch (idvColType.GetItemType().GetRawKind()) { case InternalDataKind.I1: DataAppender <sbyte> appendI1 = (sbyte val, int i) => csrData.AppendR4((float)val, i); return(new CsrFiller <sbyte>(input, idvCol, idvColType, appendI1, csrData)); case InternalDataKind.I2: DataAppender <short> appendI2 = (short val, int i) => csrData.AppendR4((float)val, i); return(new CsrFiller <short>(input, idvCol, idvColType, appendI2, csrData)); case InternalDataKind.U1: DataAppender <byte> appendU1 = (byte val, int i) => csrData.AppendR4((float)val, i); return(new CsrFiller <byte>(input, idvCol, idvColType, appendU1, csrData)); case InternalDataKind.U2: DataAppender <ushort> appendU2 = (ushort val, int i) => csrData.AppendR4((float)val, i); return(new CsrFiller <ushort>(input, idvCol, idvColType, appendU2, csrData)); case InternalDataKind.R4: DataAppender <float> appendR4 = (float val, int i) => csrData.AppendR4((float)val, i); return(new CsrFiller <float>(input, idvCol, idvColType, appendR4, csrData)); default: throw Contracts.Except("Source data type not supported"); } } else if (outputDataKind == InternalDataKind.R8) { switch (idvColType.GetItemType().GetRawKind()) { case InternalDataKind.I1: DataAppender <sbyte> appendI1 = (sbyte val, int i) => csrData.AppendR8((double)val, i); return(new CsrFiller <sbyte>(input, idvCol, idvColType, appendI1, csrData)); case InternalDataKind.I2: DataAppender <short> appendI2 = (short val, int i) => csrData.AppendR8((double)val, i); return(new CsrFiller <short>(input, idvCol, idvColType, appendI2, csrData)); case InternalDataKind.I4: DataAppender <int> appendI4 = (int val, int i) => csrData.AppendR8((double)val, i); return(new CsrFiller <int>(input, idvCol, idvColType, appendI4, csrData)); case InternalDataKind.U1: DataAppender <byte> appendU1 = (byte val, int i) => csrData.AppendR8((double)val, i); return(new CsrFiller <byte>(input, idvCol, idvColType, appendU1, csrData)); case InternalDataKind.U2: DataAppender <ushort> appendU2 = (ushort val, int i) => csrData.AppendR8((double)val, i); return(new CsrFiller <ushort>(input, idvCol, idvColType, appendU2, csrData)); case InternalDataKind.U4: DataAppender <uint> appendU4 = (uint val, int i) => csrData.AppendR8((double)val, i); return(new CsrFiller <uint>(input, idvCol, idvColType, appendU4, csrData)); case InternalDataKind.R4: DataAppender <float> appendR4 = (float val, int i) => csrData.AppendR8((double)val, i); return(new CsrFiller <float>(input, idvCol, idvColType, appendR4, csrData)); case InternalDataKind.R8: DataAppender <double> appendR8 = (double val, int i) => csrData.AppendR8((double)val, i); return(new CsrFiller <double>(input, idvCol, idvColType, appendR8, csrData)); default: throw Contracts.Except("Source data type not supported"); } } throw Contracts.Except("Target data type not supported."); }