如何自动调整已合并单元格的列?

在C#中,对于Excel电子表格,我该如何自动调整已合并单元格的列? 我试着用下面的代码来做这件事,但是它不自动填充列。

这是我的代码到目前为止:

Worksheet xlSheet xlSheet.Cells[2, 1] = "Autobiographies and Titles, Autobiographies and Titles, Autobiographies and Titles, Autobiographies and Titles, Autobiographies and Titles, Autobiographies and Titles, Autobiographies and Titles, Autobiographies and Titles"; Range hRangeSubsystemName = xlSheet.get_Range("A2", "G2"); hRangeSubsystemName.MergeCells = true; hRangeSubsystemName.EntireColumn.AutoFit(); 

您不能在Excel中使用合并单元格的列上使用自动调整。

请参阅MS支持文章:

http://support.microsoft.com/kb/212010

我写了一个函数来做到这一点与Gembox,你可能会发现有帮助

 private int AutoSizeMergedCells(CellRange myMergedCells, string text) { var file = new ExcelFile(); file.Worksheets.Add("AutoSize"); var ws = file.Worksheets[0]; ws.Cells[0, 0].Column.Width = myMergedCells.Sum(x => x.Column.Width); ws.Cells[0, 0].Value = text; ws.Cells[0, 0].Style.WrapText = true; ws.Cells[0, 0].Row.AutoFit(); var result = ws.Cells[0, 0].Row.Height; file = null; return result; } 

也许你可以把它转换成C#,但是我在这里发现了一个VBmacros,它将模拟活动工作表上任何合并单元格的自动调整。 来自MrExcel.com的来源信用招架

 Sub AutoFitMergedCellRowHeight() Dim CurrentRowHeight As Single, MergedCellRgWidth As Single Dim CurrCell As Range Dim ActiveCellWidth As Single, PossNewRowHeight As Single Dim StartCell As Range, c As Range, MergeRng As Range, Cell As Range Dim a() As String, isect As Range, i 'Take a note of current active cell Set StartCell = ActiveCell 'Create an array of merged cell addresses that have wrapped text For Each c In ActiveSheet.UsedRange If c.MergeCells Then With c.MergeArea If .Rows.Count = 1 And .WrapText = True Then If MergeRng Is Nothing Then Set MergeRng = c.MergeArea ReDim a(0) a(0) = c.MergeArea.Address Else Set isect = Intersect(c, MergeRng) If isect Is Nothing Then Set MergeRng = Union(MergeRng, c.MergeArea) ReDim Preserve a(UBound(a) + 1) a(UBound(a)) = c.MergeArea.Address End If End If End If End With End If Next c Application.ScreenUpdating = False 'Loop thru merged cells For i = 0 To UBound(a) Range(a(i)).Select With ActiveCell.MergeArea If .Rows.Count = 1 And .WrapText = True Then 'Application.ScreenUpdating = False CurrentRowHeight = .RowHeight ActiveCellWidth = ActiveCell.ColumnWidth For Each CurrCell In Selection MergedCellRgWidth = CurrCell.ColumnWidth + MergedCellRgWidth Next .MergeCells = False .Cells(1).ColumnWidth = MergedCellRgWidth .EntireRow.AutoFit PossNewRowHeight = .RowHeight .Cells(1).ColumnWidth = ActiveCellWidth .MergeCells = True .RowHeight = IIf(CurrentRowHeight > PossNewRowHeight, _ CurrentRowHeight, PossNewRowHeight) End If End With MergedCellRgWidth = 0 Next i StartCell.Select Application.ScreenUpdating = True 'Clean up Set CurrCell = Nothing Set StartCell = Nothing Set c = Nothing Set MergeRng = Nothing Set Cell = Nothing End Sub 

请试试这个

  private double AutoSizeMergedCells( string text) { Excel.Worksheet ws = xlWorkBook.Sheets[1]; `enter code here`ws.Cells[14, 10].ColumnWidth = 9.29+7.43+10.71+11.29;(size width range) ws.Cells[14, 10].Value = text; ws.Cells[14, 10].Style.WrapText = true; ws.Cells[14, 10].Rows.AutoFit(); var result = ws.Cells[14, 10].RowHeight; ws.Cells[14, 10].Value = ""; return result; }