2017-07-19 1 views
1

J'utilise C# Excel Interop et tente de faire correspondre la hauteur d'une cellule fusionnée à son contenu. Ajustement automatique sur les cellules fusionnées ne peut pas être fait pour une raison quelconque, donc je le fais avec la méthode suivanteExcel - La largeur de la colonne ne correspond pas aux multiples cumulés

private void AutoFitAndMerge(Range toMerge, Range contentCell) { 
    // Get Width of entire Merged Cell 
    double width = 0.0; 
    foreach (Range col in toMerge.Columns) { 
     width += col.ColumnWidth; 
    } 

    // mimic merged cell with regular cell 
    var cellWidth = contentCell.ColumnWidth; 
    contentCell.ColumnWidth = width; 
    contentCell.WrapText = true; 

    // autofit the regular cell and copy that to merged 
    contentCell.Rows.AutoFit(); 
    var wantedHeight = contentCell.RowHeight; 

    // set it back 
    contentCell.ColumnWidth = cellWidth; 

    toMerge.Merge(); 
    toMerge.WrapText = true; 
    toMerge.RowHeight = wantedHeight; 
} 

Cela fonctionne bien à part au début, quand je Paramétrez la largeur sur les cellules fusionnées de la contentCell largeur totale, il ne s'additionne pas correctement.
Le problème est que la propriété contentCell finit par être légèrement plus petite, entraînant parfois le retour du contenu et l'allocation d'un espace trop important pour la cellule fusionnée. Cela se produit également dans Excel lorsque vous additionnez 2 largeurs de colonne ou plus et que vous l'attribuez à une cellule en tant que largeur, il finit par être légèrement plus petit.
Est-ce que les cellules ont une sorte de rembourrage/marge et comment en tenir compte?

Répondre

0

Nous avons fini d'ajouter le code suivant après le calcul largeur:

// excel has some cell padding or whatever? This is a workaround for it 
width += .514 * ((toMerge.Columns.Count-1) * 2); 

Il est un hack mais il répond à mes exigences et travaille pour moi. Qu'est-ce qu'il fait est essentiellement en supposant qu'il existe un rembourrage de toutes sortes sur toutes les cellules d'une certaine valeur et en ajoutant cela au total.

Ne l'acceptant pas comme la réponse depuis bien, ce n'est pas le cas.