Как автоматически установить столбец с объединенными ячейками? - PullRequest
2 голосов
/ 14 января 2012

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

Ответы [ 4 ]

2 голосов
/ 14 января 2012

Вы не можете использовать автозаполнение для столбцов с объединенными ячейками в Excel.

См. Статью поддержки MS:

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

1 голос
/ 14 июля 2015

Я написал функцию для этого с 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;
    }
0 голосов
/ 22 июня 2016

пожалуйста, попробуйте это

     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;
}
0 голосов
/ 25 октября 2013

Возможно, вы можете преобразовать это в C #, но я нашел макрос VB здесь , который будет имитировать автозаполнение любых объединенных ячеек на активном листе.Источник кредитов парирует с 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
...