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:
- Workbook est le cœur du modèle de document. Il présente plusieurs caractéristiques importantes telles que Feuille de travail active Histoire Collection de styles de cellules Thème et autres. Il peut également être considéré comme une collection de feuilles de calcul.
- La feuille de calcul est un ensemble de cellules organisées en lignes et en colonnes.
- La cellule est l'unité de données de base d'une feuille de calcul, le point d'intersection d'un
- Les lignes et les colonnes sont des groupes de cellules qui sont respectivement sur la même ligne horizontale ou verticale.
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:
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 ();
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:
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);
}
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);
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);
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); ] 
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