2017-10-17 44 views
2
因爲Excel忽略合併單元格時,自動調整一個行跨行合併單元格

文本被切斷。OfficeOpenXML Excel中調整行與細胞穿過它們合併

我如何可以調整單元格的高度,以它的內容爲調整爲不工作行?

我張貼了這一點,在那裏幫助其他人有這個問題。我發佈了一個解決方案作爲答案。

+0

@TomBlodget感謝。編輯使這更容易閱讀。 –

回答

2

對於這個解決方案,我只是顯示了關於調整不顯示數據

行代碼

解決方案:

/// 
/// Merged Row Model Psuedo Code 
/// 
MergedRow { 
    // Fields merged across rows 
    ... 
    // list of rows with non merged data 
    list<indvidulerow> data 
} 

/// 
/// Code to find rows with merged cells. 
/// 

... // worksheet prep 
var mergedRows = new Dictionary<int, MergedRow>(); 
... // begin generating rows 
... 
// code generating the first merged cell of a row 
using (var r = sheet.Cells[rowIndex, 1, rowIndex+ mergedRow.Data.Count - 1, 1]){ 
if(mergedRow.Data.count>1){ 
    r.Merge=true; 
    mergedRows.Add(rowIndex, mergedRow); 
} 
... // code for remainder of of cell 


/// 
/// Code to Resize Rows. Making last row expand enough to see 
/// all content in merged cells 
/// 

foreach (var firstRowIndex in mergedRows.Keys){ 
    var numRowsMerged = mergedRows[firstRowIndex].Data.Count; 
    var columnHeights = new List<ColumnHeightCalcModel>(); 
    for (var colIndex = 0; colIndex < totalColumns; colIndex++){ 
     var calcModel = new ColumnHeightCalcModel(); 
     var combinedHeight = 0.0; 
     var lastRowHeight = 0.0; 
     for (rowIndex = 0; rowIndex < numRowsMerged; rowIndex++){ 
      var cell = sheet.Cells[firstRowIndex + rowIndex, colIndex + 1]; 
      var cellText = cell.Text; 
      var cellmerged = cell.Merge; 
      var cellWidth = sheet.Column(colIndex+1).Width; 
      var font = cell.Style.Font; 
      if (string.IsNullOrEmpty(cellText)) combinedHeight += 0.0; 
      var bitmap =new Bitmap(1,1); 
      var graphics = Graphics.FromImage(bitmap); 
      var pixelWidth = Convert.ToInt32(cellWidth * 6.0); //6.0 pixels per excel column width 
      var drawingFont = new Font(font.Name, font.Size); 
      var size = graphics.MeasureString(cellText, drawingFont, pixelWidth); 

      //72 DPI and 96 points per inch. Excel height in points with max of 409 per Excel requirements. 
      combinedHeight += Math.Min(Convert.ToDouble(size.Height) * 72/96, 409); 
      if (cellmerged) break; 
      lastRowHeight = Math.Min(Convert.ToDouble(size.Height) * 72/96, 409);       
     } 
     calcModel.TotalCombinedHeight = combinedHeight; 
     calcModel.LastRowHeight = lastRowHeight; 
     columnHeights.Add(calcModel); 
    } 
    var row = sheet.Row(firstRowIndex + numRowsMerged - 1); 
    row.CustomHeight = true; 
    var maxCombo = columnHeights.Max(col => col.TotalCombinedHeight); 
    var maxLast = columnHeights.Max(col => col.LastRowHeight); 
    row.Height = maxCombo - maxLast; 
} 

端到端解決方案

鏈接,幫我找到這個解決方案

以下鏈接適用於合併列,但它有助於合併行。

Autofit Row Height of Merged Cell in EPPlus