2013-03-26 749 views
85

如何在列中的文本較長時將列設置爲自動寬度?EPPlus中的自動列寬

我使用此代碼

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

這些方法都正在

有沒有辦法讓它工作嗎?

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

回答

162

使用AutoFitColumns,但你必須指定單元格了,我估計整個工作表:

VB.NET

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

C#

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

請注意,您需要調用填充工作表後填寫此方法。

+1

它不工作。 – Pengan 2013-03-28 10:33:21

+0

這確實有效...... 甚至不需要ToString – Beejee 2013-10-23 11:57:01

+6

重要的是您需要在填寫工作表後調用此方法,因爲如果工作表中沒有數據,Worksheet.Dimension屬性將返回null。 – Landeeyo 2015-01-23 10:22:07

3

您將需要計算寬度。庫中沒有自動調整功能,可以按照您的意圖工作。

自動填充列不適用於包裝文本和帶公式的單元格。

查看http://epplus.codeplex.com/discussions/218294?ProjectName=epplus瞭解如何解決問題的示例。

+0

http://epplus.codeplex.com/discussions/218294?ProjectName=epplus 我找不到任何解決此問題的解決方案。 – Pengan 2013-03-28 06:22:29

31

我已經使用這個代碼EPPlus的3.1.3.0版本,它是工作:

worksheet.Column(1).AutoFit(); 

這裏工作是變量引用我在我的代碼創建的工作表(不是一類具有靜態方法!)。

很明顯,您必須在填充列後調用此方法。

+4

需要強調最後一條語句:**在填充列後調用此方法** – 2014-12-31 21:51:46

2

不得不使用worksheet.Column(1).AutoFit(0); AutoFit()沒有做到這一點。

1

我使用它並且運行良好。

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

您能否更詳細地解釋您的代碼? – Shawn 2013-12-05 20:39:48

7

我知道有點晚了,但今天我有同樣的問題。如果您定義了worksheet.DefaultColWidth,它將不起作用。我已經刪除了該行,並添加了Worksheet.cells.AutoFitColumns();,它現在可以工作。

+3

'sheet.Cells.AutoFitColumns()'更簡單,感謝提示!在ClosedXml中,你執行'sheet.Columns()。AdjustToContents()' – nawfal 2016-06-26 07:03:45

6

我知道這是一個老問題,但我使用下面的代碼,它似乎直接解決您試圖做的事情。

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