Largeur de colonne automatique dans EPPlus


139

Comment rendre les colonnes à largeur automatique lorsque les textes dans les colonnes sont longs?

J'utilise ce code

 Worksheet.Column(colIndex).AutoFitColumn() 'on all columns'
 Worksheet.cells.AutoFitColumns()
 Worksheet.Column(colIndex).BestFit = True  'on all columns'

Aucune de ces méthodes ne fonctionne

Existe-t-il des moyens de le faire fonctionner?

Remarque: certains de mes textes utilisent Unicode.


2
Worksheet.cells.AutoFitColumns (); fonctionnera, mais il doit être ajouté juste après avoir formaté et imprimé toutes les données.
Suresh Kamrushi

Réponses:


250

Utilisez AutoFitColumns, mais vous devez spécifier les cellules, je suppose que la feuille de calcul entière:

VB.NET

Worksheet.Cells(Worksheet.Dimension.Address).AutoFitColumns()

C #

Worksheet.Cells[Worksheet.Dimension.Address].AutoFitColumns();

Veuillez noter que vous devez appeler cette méthode après avoir rempli la feuille de calcul.


9
Une chose importante est ici que vous devez appeler cette méthode après avoir rempli la feuille de calcul, car la propriété Worksheet.Dimension renverra null s'il n'y a pas de données dans la feuille de calcul.
Landeeyo

@Landeeyo Merci, cela m'aide. Il est important de définir la largeur après avoir rempli le contenu.
Lanka

3
La méthode AutoFitColumns ne fonctionnait pas pour moi lorsque je ne fournissais aucun paramètre, lorsque j'y ajoute une largeur minimale et maximale, cela fonctionne parfaitement.
Zeeshan Ajmal

4
C'est absolument la bonne réponse - Pangan devrait la marquer comme telle.
GDB

Si vous avez calculé des cellules, vous devez d' Worksheet.Calculate()abord appeler afin que la valeur de ces cellules puisse être déterminée.
MikeH

38

J'ai utilisé ce code avec la version 3.1.3.0 d'EPPlus et cela fonctionne:

worksheet.Column(1).AutoFit();

où une feuille de calcul est la variable référençant la feuille de calcul que j'ai créée dans mon code (pas une classe avec une méthode statique!).

Évidemment, vous devez appeler cette méthode après avoir rempli les colonnes .


obtenir une erreur toute la journée. "'System.Drawing n'est pas pris en charge sur cette plate-forme."
Kursat Turkay

15

Je sais que c'est une vieille question, mais j'utilise le code ci-dessous et il semble répondre directement à ce que vous avez essayé de faire.

using (var xls = new ExcelPackage())
{
    var ws = xls.Workbook.Worksheets.Add("Some Name");

    //**Add Column Names to worksheet!**
    //**Add data to worksheet!**

    const double minWidth = 0.00;
    const double maxWidth = 50.00;

    ws.Cells.AutoFitColumns(minWidth, maxWidth);

    return pkg.GetAsByteArray();
}

11

Je voulais juste souligner que vous pouvez ajuster des cellules sans spécifier la plage, assurez-vous simplement de l'appeler après avoir formaté toutes les colonnes, etc.

worksheet.Cells.AutoFitColumns()

1
Cela a fonctionné pour moi. N'oubliez pas de l'appeler après avoir ajouté les données. Quand je l'ai appelé avant l'ajout des données, rien ne s'est passé.
mortb

10

Je sais que c'est un peu tard mais j'ai eu le même problème aujourd'hui. Si vous avez worksheet.DefaultColWidthdéfini, cela ne fonctionnera pas. J'ai supprimé cette ligne et ajouté Worksheet.cells.AutoFitColumns();et cela fonctionne maintenant.


5
sheet.Cells.AutoFitColumns()c'est plus simple, merci pour la pointe! Dans ClosedXml, vous faitessheet.Columns().AdjustToContents()
nawfal

6

Cela fonctionne très bien pour moi.

Essayer:

ExcelWorksheet wsSheet1 = ExcelPkg.Workbook.Worksheets.Add("Sheet1");
wsSheet1.Cells[wsSheet1.Dimension.Address].AutoFitColumns();
ExcelPkg.SaveAs();

3

J'ai dû utiliser worksheet.Column(1).AutoFit(0);AutoFit () ne faisait pas l'affaire.


3

Vous devrez calculer la largeur. Il n'y a pas de fonction de dimensionnement automatique dans la bibliothèque qui fonctionnera comme vous le souhaitez.

La colonne d'ajustement automatique ne fonctionnera pas avec le texte enveloppé et les cellules avec des formules.

Consultez http://epplus.codeplex.com/discussions/218294?ProjectName=epplus pour des exemples de la manière dont vous pouvez résoudre le problème.


epplus.codeplex.com/discussions/218294?ProjectName=epplus Je ne trouve aucune solution de travail à ce problème.
Pengan

3

Le .NET Core en tant que successeur de .NET ne prend plus en charge la fonction d'ajustement automatique des cellules avec la bibliothèque EPPplus.

worksheet.Cells.AutoFitColumns();

ou

worksheet.Column(1).AutoFit();

provoque une exception:

"System.Drawing is not supported on this platform."

L'assembly System.Drawing dépend de bibliothèques spécifiques GDI et Windows qui doivent être remplacées par une autre solution. La solution à ce problème m'est inconnue.


1

Je l'utilise et fonctionne bien.

Dim objExcel As New ExcelPackage
Dim Sheet As ExcelWorksheet = objExcel.Workbook.Worksheets.Add("SheetName")
Sheet.Cells("B1:BN").AutoFitColumns()
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.