Largura automática da coluna no EPPlus

139

Como fazer com que as colunas tenham largura automática quando os textos nas colunas são longos?

Eu uso esse código

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

Nenhum desses métodos está funcionando

Existem maneiras de fazê-lo funcionar?

Nota: Alguns dos meus textos usam Unicode.

Pengan
fonte
2
Worksheet.cells.AutoFitColumns (); funcionará, mas deve ser adicionado logo após a formatação e impressão de todos os dados.
Suresh Kamrushi

Respostas:

250

Use AutoFitColumns, mas você deve especificar as células, eu assumo a planilha inteira:

VB.NET

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

C #

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

Observe que você precisa chamar esse método depois de preencher a planilha.

Tim Schmelter
fonte
9
É importante que você precise chamar esse método depois de preencher a planilha porque a propriedade Worksheet.Dimension retornará nulo se não houver dados na planilha.
Landeeyo 23/01
@ Landeeyo Obrigado por me ajudar. É importante definir a largura após o preenchimento do conteúdo.
Lanka
3
O método AutoFitColumns não estava funcionando para mim quando eu não fornecia parâmetros, quando adiciono largura mínima e máxima a ele, funciona perfeitamente.
precisa saber é o seguinte
4
Esta é absolutamente a resposta correta - Pangan deve marcar como tal.
GDB
Se você calculou as células, deve chamar Worksheet.Calculate()primeiro para que o valor dessas células possa ser determinado.
mikeh
38

Eu usei esse código com a versão 3.1.3.0 do EPPlus e está funcionando:

worksheet.Column(1).AutoFit();

onde uma planilha é a variável que faz referência à planilha que eu criei no meu código (não uma classe com um método estático!).

Obviamente, você deve chamar esse método depois de preencher as colunas .

Daniele Armanasco
fonte
recebendo erro o dia todo. "'System.Drawing não é suportado nesta plataforma."
Kursat Turkay
15

Sei que essa é uma pergunta antiga, mas uso o código abaixo e parece abordar diretamente o que você tentou fazer.

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();
}
TrailTrackers
fonte
11

Só queria salientar que você pode ajustar as células sem especificar o intervalo, basta chamar isso depois de formatar todas as colunas, etc:

worksheet.Cells.AutoFitColumns()
johnny 5
fonte
1
Isso funcionou para mim. Lembre-se de chamá-lo depois de adicionar os dados. Quando o chamei antes da adição dos dados, nada aconteceu.
mortb
10

Eu sei que é um pouco tarde, mas eu tive o mesmo problema hoje. Se você tiver worksheet.DefaultColWidthdefinido, não funcionará. Eu removi essa linha e a adicionei Worksheet.cells.AutoFitColumns();e ela funciona agora.

Jose
fonte
5
sheet.Cells.AutoFitColumns()é mais simples, obrigado pela dica! No ClosedXml, você fazsheet.Columns().AdjustToContents()
nawfal 26/06
6

Está funcionando muito bem para mim.

Experimentar:

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

Teve que usar o worksheet.Column(1).AutoFit(0);AutoFit () não estava funcionando.

xtds
fonte
3

Você precisará calcular a largura. Não há nenhuma função de dimensionamento automático na biblioteca que funcione como você deseja.

A coluna de ajuste automático não funcionará com texto agrupado e células com fórmulas.

Consulte http://epplus.codeplex.com/discussions/218294?ProjectName=epplus para obter exemplos de como você pode resolver o problema.

ffffff01
fonte
epplus.codeplex.com/discussions/218294?ProjectName=epplus Não consigo encontrar nenhuma solução para esse problema.
Pengan
3

O .NET Core como sucessor do .NET não suporta mais a função de ajuste automático de células com a biblioteca EPPplus.

worksheet.Cells.AutoFitColumns();

ou

worksheet.Column(1).AutoFit();

causa exceção:

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

O assembly System.Drawing depende de bibliotecas específicas do GDI e do Windows que precisam ser substituídas por outra solução. A solução para esse problema é desconhecida para mim.

Ondrej Rozinek
fonte
1

Eu uso isso e está funcionando bem.

Dim objExcel As New ExcelPackage
Dim Sheet As ExcelWorksheet = objExcel.Workbook.Worksheets.Add("SheetName")
Sheet.Cells("B1:BN").AutoFitColumns()
Jhonny Nina
fonte