Fermer

mars 19, 2020

Créer, modifier et exporter: Xamarin SpreadProcessing


La bibliothèque SpreadProcessing vous permet de créer facilement à partir de zéro, de modifier des documents existants ou de convertir entre les formats de feuille de calcul les plus courants. Vous pouvez enregistrer le classeur généré dans un flux ou dans un fichier local.

Besoin de générer des documents XLSX, CSV ou PDF dans votre application Xamarin? Vous êtes arrivé au bon endroit! Notre équipe a fourni le support de la bibliothèque SpreadProcessing dans le cadre de notre interface utilisateur Telerik pour Xamarin R1 2020 .

La bibliothèque RadSpreadProcessing vous permet de créer, modifier ou convertir facilement documents entre les formats de feuille de calcul les plus courants. Vous pouvez ensuite enregistrer le classeur généré dans un flux.

Dans cet article de blog, nous allons passer par la création d'un rapport de paie à partir de zéro, mais vérifions d'abord ce que le modèle de document d du La bibliothèque RadSpreadProcessing comprend .

Les éléments de base du modèle de document de la bibliothèque RadSpreadProcessing sont les suivants:

Formats pris en charge

Les fonctionnalités de RadSpreadProcessing vous permettent de facilement ouvrir et enregistrer des fichiers de différents formats.

Actuellement, avec RadSpreadProcessing, vous pouvez:

  • Importer et exporter Office Open XML Workbook (.XLSX)
  • Importer et exporter des valeurs séparées par des virgules (.CSV)
  • Importer et exporter des valeurs séparées par des tabulations (.TXT)
  • Exporter le format de document portable (.PDF)
  • Exporter la feuille de calcul en tant que document vers un flux ou un tableau d'octets

La bibliothèque de traitement n'a pas besoin de dépendances externes pour convertir des documents de / vers les formats pris en charge. Le modèle de document est indépendant de l'interface utilisateur .

Démo de création de rapport de paie

Avant de commencer, assurez-vous d'ajouter des références aux assemblys suivants dans votre projet:

  • Telerik.Documents.Core.dll [19659020] Telerik.Documents.Spreadsheet.dll
  • Telerik.Documents.Spreadsheet.FormatProviders.OpenXml.dll
  • Telerik.Zip.dll

Voyons à quoi le document va ressembler à la fin: [19659033] Document complet "title =" Document complet "data-openoriginalimageonclick =" true "/>

Chargement des données

Créons un classeur contenant une seule feuille de calcul intitulée" Rapport de paie ":

Classeur = new Workbook ();

Worksheet worksheet = workbook.Worksheets.Add ();

worksheet.Name = "Payroll Report" ;

Nous effectuons quelques préparatifs comme la définition des en-têtes de colonne principaux: [19659036] worksheet.Cells [1, 0] .SetValue ( "Employee" );

worksheet.Cells [1, 1] .SetValue ( " 2015 ");

feuille de calcul.Cells [1, 2] .SetValue (" 2016 "); [19659003] worksheet.Cells [1, 3] .SetValue ( "2017" );

worksheet.Cells [1, 4] .SetValue ( "2018" );

feuille de calcul.Cells [1, 5] .SetValue ( "2019" );

Maintenant, il est temps d'entrer les données de paie. Les extraits de code suivants illustrent comment saisir les informations du tableau PayrollModel dans la feuille de calcul:

public statique IEnumerable GetPayrollData ()

{

PayrollModel [] payroll = new PayrollModel []

{

nouveau ] PayrollModel ()

{

EmployeeName = "Jasper Garcia"

EmployeeSalaries = [19659037] nouvelle Liste < int > ()

{

10400,

12300,

12300,

] 13300,

14000,

}

},

nouveau PayrollModel ()

{ [19659003] EmployeeName = "Junior Rivera"

.. .

int currentCol = 1;

foreach (modèle PayrollModel dans PayrollModel.GetPayrollData ())

{

int currentRow = 1;

[1945904646] feuille de calcul.Cellules [currentRow++, currentCol] .SetValue (model.EmployeeName);

foreach ( int salaire dans model.EmployeeSalaries )

{

feuille de calcul.Cells [currentRow++, currentCol] .SetValue (salaire);

currentCol ++; [1945903939] ]

}

Après l'implémentation, ceci devrait être la feuille de calcul:

 Ensemble de données

Définition du titre

Nous allons définir le titre après avoir rempli les données car nous voulons tirer parti de la méthode GetUsedCellRange de la feuille de calcul . Cela nous permettra de savoir quel est le dernier index de colonne utilisé et de l'utiliser dans la sélection de cellules pour Fusionner toutes les cellules nécessaires:

CellRange usedCellRange = worksheet.GetUsedCellRange ( new ] IPropertyDefinition [] {CellPropertyDefinitions.ValueProperty});

int lastColumnIndex = usedCellRange.ToIndex.ColumnumnIndex; [1945904] [1945904] [1945903] ] CellSelection titleCells = worksheet.Cells [0, 1, 0, lastColumnIndex];

titleCells.SetValue ( "Company Name" );

titleCells.Merge ();

 Jeu de titres de document "title =" Jeu de titres de document "data-openoriginalimageonclick =" true "/> </a data-recalc-dims=

Styles

Créons quelques styles :

CellStyle normalStyle = classeur.Styles [ "Normal" ];

normalStyle.Fill = Patte rnFill.CreateSolidFill ( nouveau ThemableColor (ThemeColorType.Background2));

normalStyle.FontFamily = nouveau [19659038ypeThemableFontorFontilyFontam);

normalStyle.FontSize = UnitHelper.PointToDip (10);

normalStyle.VerticalAlignment = RadVerticalAl ;

CellStyle companyNameStyle = classeur.Styles.Add ( "CompanyNameStyle" );

companyNameStyle.FontFamily = nouveau nouveau ThemableFontFamily (ThemeFontType.Major);

companyNameStyle.FontSize = UnitHelper.PointToDip (32);

. HorizontalAlignment = RadHorizontalAlignment.Center;

CellStyle columnHeadersStyle = workbook.Styles.Add ( "ColumnHeadersStyle" [19659042]);

columnHeadersStyle.FontFamily = nouveau ThemableFontFamily (ThemeFontType.Major);

columnHeadersStyle.BottomBorder = nouveau CellBorder (CellBorderStyle.Thick, nouveau ThemableColor (ThemeColorType.Accent6));

.FontSize = UnitHelper.PointToDip (12);

CellStyle editableAreaStyle = workbook.Styles.Add ( "EditableAreaStyle" );

editableAreaStyle. Fill = PatternFill.CreateSolidFill ( new ThemableColor (ThemeColorType.Background1));

editableAreaStyle.FontFamily = new ThemableFamily 19659041] "Segoe UI Light" );

editableAreaStyle.FontSize = UnitHelper.PointToDip (10);

editableAreaStyle.HorizontalAlignment = RadHorizontalAlignment.Right;

CellStyle totalStyle = classeur.Styles.Add ( "TotalStyle" ); [1945904] ]

totalStyle.Fill = PatternFill.CreateSolidFill ( nouveau ThemableColor (ThemeColorType.Accent6));

totalStyle. FontSize = UnitHelper.PointToDip (12);

totalStyle.ForeColor = new ThemableColor (ThemeColorType.Background1);

Application des styles déjà créés :

CellRange usedCellRange = worksheet.GetUsedCellRange ( new IPropertyDefinition [] {CellPropertyDefinitions.ValueProperty});

usedCellRange.ToIndex.ColumnIndex;

int lastRowIndex = usedCel lRange.ToIndex.RowIndex;

worksheet.Cells [0, 1, 0, lastColumnIndex] .SetStyleName ( "CompanyNameStyle" );

worksheet.Cells [1, 0, 1, lastColumnIndex] .SetStyleName ( "ColumnHeadersStyle" );

feuille de calcul.Cells [2, 1, lastRowIndex, lastColumnIndex] .SetStyleName ( "EditableAreaStyle" );

feuille de calcul.Cellules [lastRowIndex + 1, 0, lastRowIndex + 1, lastColumnIndex] .SetStyleName ( "TotalStyle" );

Pour un aperçu plus complet, nous allons importer un logo d'entreprise :

FloatingImage companyLogo = nouveau FloatingImage (feuille de calcul, nouveau CellIndex (0, 0), 1, 1)

[1945903838] {

Largeur = 65,

Hauteur = 65,

};

en utilisant (Stream stream = ...)

{

companyLogo.ImageSource = new Telerik.Windows.Documents.Media.ImageSource (stream, "jpg" );

}

worksheet.Shapes.Add (companyLogo);

Après de telles améliorations, voyons à quoi ressemble le document:

 Styles appliqués "title = "Styles appliqués" data-openoriginalimageonclick = "true" /> </a data-recalc-dims=

Nous sommes très proches du résultat souhaité.

Quand il s'agit de régler la largeur de la colonne (ou la hauteur des lignes), nous deux options: la première consiste à bénéficier de la méthode AutoFitWidth des colonnes (ou la méthode AutoFitHeight des colonnes) et la seconde consiste à définir leur largeur et leur hauteur exactes en utilisant respectivement SetWidth ou SetHeight . Dans notre exemple, nous mélangeons les deux approches:

CellRange usedCellRange = worksheet.GetUsedCellRange ( new IPropertyDefinition [] {CellPropertyDefinitions.ValueProperty});

int lastColumnIndex = usedCellRange.ToIndex.ColumnIndex;

feuille de calcul.Columns [0, lastColumnIndex] .AutoFitWidth ();

double rowHeight = companyLogo.Height; [1945904] [1945903] feuille de calcul.Rows [0] .SetHeight ( new RowHeight (rowHeight, true ));

Nous avons déjà configuré notre document et sa mise en forme, voyons maintenant comment nous pouvons le manipuler à l'aide d'un ensemble de fonctionnalités précieuses.

Formules

Commençons par Formules . La formule est une expression calculant la valeur d'une cellule. La bibliothèque est livrée avec plus de 200 fonctions intégrées. L'API vous permet également de brancher facilement des fichiers personnalisés. L'utilisation de la méthode GetUsedCellRange va à nouveau nous aider à itérer toutes les cellules contenant des données et à définir la valeur d'une formule pré-préparée:

CellRange usedCellRange = worksheet.GetUsedCellRange ( new [19659038] IPropertyDefinition [] {CellPropertyDefinitions.ValueProperty});

int firstRowIndex = 3;

int lastUsedRowIndex = usedCellRange.ToIndex.RowIndex;

worksheet.Cells [lastUsedRowIndex + 1, 0] .SetValue ( "TOTALS" );

for ( int ] columnIndex = 1; columnIndex <= usedCellRange.ToIndex.ColumnIndex; columnIndex ++)

{

char currentColCharVal = Convert.ToChar ((columnIndex + 1) + 64);

[1949046] [1949090] 59039] string formula = $ "= Sum ({currentColCharVal} {firstRowIndex}: {currentColCharVal} {lastUsedRowIndex + 1})" ;

feuille de calcul.Cellules [lastUsedRowIndex + 1, columnIndex] .SetValue (formule);

}

 Autofitted "title =" Autofitted "data-openoriginalimageonclick =" true "/> </a data-recalc-dims=

Protection de la feuille de calcul

La deuxième fonctionnalité que nous allons examiner est Protection de la feuille de calcul [19459008 Vous pouvez protéger chaque feuille de calcul contre toute modification. Le modèle propose des options de protection qui vous permettent de choisir un ensemble de commandes disponibles pour l'utilisateur lorsque la protection est activée. Dans notre exemple, nous allons protéger toutes les cellules à l'exception de celles contenant les salaires annuels.

CellRange usedCellRange = worksheet.GetUsedCellRange ( new IPropertyDefinition [] {CellPropertyDefinitions.ValueProperty});

intCell .ToIndex.RowIndex;

int lastColumnIndex = usedCellRange.ToIndex.ColumnIndex;

][1945 nouveau CellRange (2, 1, lastRowIndex - 1, lastColumnIndex);

feuille de calcul. Cellules [cellRange] .SetIsLocked ([1965903737] false [19659042]];

WorksheetProtectionOptions options =

new WorksheetProtectionOptions (allowFiltering: false allowSorting : false allowFormatColumns: true allowDeleteRows: false ); [1 9459004]

worksheet.Protect ( "password" options);

 Protection Set "title =" Protection Set "data -openoriginalimageonclick = "true" /> </a data-recalc-dims=

Rechercher et remplacer

Vous pouvez facilement Rechercher et remplacer un nombre particulier ou une chaîne de texte dans un classeur, une feuille de calcul ou une plage spécifiée de cellules. Dans l'extrait de code suivant, nous allons modifier le titre «Nom de l'entreprise» par un nom personnalisé: «Ma société».

Options ReplaceOptions = nouveau ReplaceOptions () [19659003] {

StartCell = new worksheetCellIndex (feuille de travail, 0, 0) ,

FindWhat = "Nom de l'entreprise"

ReplaceWith = "My Company"

FindWithin = FindWithin.Sheet,

};

FindResult findResult = workbook.Find (options);

options.StartCell = findRes ult.FoundCell;

workbook.Replace (options);

 Titre remplacé "title =" Titre remplacé "data-openoriginalimageonclick =" true "/> </a data-recalc-dims=

Panneaux antigel

Figer les volets vous permet de toujours garder une partie de la feuille de calcul visible lors du défilement. Vous pouvez facilement l'implémenter à l'aide de la méthode FreezePanes accessible via la propriété ViewState de la feuille de calcul.

CellIndex fixedPaneTopLeftCellIndex = new CellIndex (0, 0);

feuille de calcul.ViewState.FreezePanes (fixedPaneTopLeftCellIndex, 1965); ]  Panes Freezed "title =" Panes Freezed "data-openoriginalimageonclick =" true "/> </a data-recalc-dims=

Validation des données

Avec la fonctionnalité Validation des données nous allons prendre le contrôle de ce que l'utilisateur peut entrer dans une cellule. Différentes règles de validation des données sont disponibles, notamment la liste, le nombre, la date, la longueur du texte ou des règles personnalisées. Pour notre exemple, nous allons utiliser une validation de données pour nous assurer que le salaire entré est un nombre compris entre 0 et 80000.

CellRange usedCellRange = worksheet.GetUsedCellRange ( new IPropertyDefinition [] {CellPropertyDefinitions. ValueProperty});

int lastRowIndex = usedCellRange.ToIndex.RowIndex;

int lastColumnIndex = usedCellRange.ToIndex.ColumnIndex;

CellRange cellRange = new CellRange (2, 1, lastRowIndex - 1, lastColumnIndex]] dataValidationRuleCellIndex = new CellIndex (0, 0);

NumberDataValidationRuleContext context = new NumberDataValidationRuleContext (feuille de calcul, dataValidationRuleCellIndex)




Source link