EPPlus中的自动列宽


139

当列中的文本很长时,如何使列成为自动宽度?

我用这个代码

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

这些方法均无效

有什么方法可以使其工作?

注意:我的一些文本使用Unicode。


2
Worksheet.cells.AutoFitColumns(); 可以使用,但应在格式化和打印所有数据后立即添加。
Suresh Kamrushi

Answers:


249

使用AutoFitColumns,但您必须指定单元格,我假设整个工作表为:

VB.NET

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

C#

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

请注意,填写工作表后,您需要调用此方法。


9
重要的是这里您需要在填充工作表之后调用此方法,因为如果工作表中没有数据,Worksheet.Dimension属性将返回null。
Landeeyo 2015年

@Landeeyo谢谢它对我有帮助。填充内容后设置宽度很重要。
兰卡

3
当我不提供任何参数时,AutoFitColumns方法对我不起作用,当我向其添加最小和最大宽度时,它可以完美运行。
Zeeshan Ajmal 2015年

4
这绝对是正确的答案-Pangan应该这样标记。
GDB 2015年

如果已计算出单元格,则必须先调用,Worksheet.Calculate()以便可以确定这些单元格的值。
MikeH

38

我已经将此代码与EPPlus的3.1.3.0版本一起使用,并且可以正常工作:

worksheet.Column(1).AutoFit();

工作表是引用我在代码中创建的工作表的变量(不是具有静态方法的类!)。

显然,您必须在填充列之后调用此方法


整天出错。“此平台不支持'System.Drawing。”
Kursat Turkay

15

我知道这是一个老问题,但是我使用下面的代码,它似乎可以直接解决您尝试做的事情。

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

只是想指出您可以在不指定范围的情况下容纳单元格,只需确保在格式化所有列等后调用它:

worksheet.Cells.AutoFitColumns()

1
这对我有用。添加数据后,切记要调用它。当我在添加数据之前调用它时,没有任何反应。
mortb

10

我知道有点晚了,但是今天我遇到了同样的问题。如果您有worksheet.DefaultColWidth定义,它将无法使用。我删除了该行并添加了Worksheet.cells.AutoFitColumns();它,现在可以使用。


5
sheet.Cells.AutoFitColumns()更简单,谢谢!在ClosedXml中,您需要sheet.Columns().AdjustToContents()
nawfal

6

对我来说很好。

尝试:

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

3

不得不使用worksheet.Column(1).AutoFit(0);AutoFit()并不能解决问题。



3

作为.NET的后继产品的.NET Core不再支持使用EPPplus库自动调整单元格的功能。

worksheet.Cells.AutoFitColumns();

要么

worksheet.Column(1).AutoFit();

导致异常:

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

System.Drawing程序集依赖于GDI和Windows特定的库,必须将其替换为另一种解决方案。对我来说,这个问题的解决方案是未知的。


1

我用这个并且运行良好。

Dim objExcel As New ExcelPackage
Dim Sheet As ExcelWorksheet = objExcel.Workbook.Worksheets.Add("SheetName")
Sheet.Cells("B1:BN").AutoFitColumns()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.