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.


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.


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 .


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

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()

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.


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();

3

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


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.


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.


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()
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.