我自己找到了解决方案。这个想法是:
1.取消合并单元格,合并列,但不要合并行。
2. 对合并行应用自动调整。
3. 获取该合并行的mergedRowHeight,设置其他n行的高度等于n/mergedRowHeight。
4. 合并行。
所以结果看起来像这样:
代码是:
ArrayList mergedAreas = new ArrayList();
mergedAreas = ws.Cells.MergedCells;
AutoFitterOptions options = new AutoFitterOptions();
options.AutoFitMergedCells = true;
foreach (CellArea ca in mergedAreas)
{
if ((ca.EndColumn - ca.StartColumn > 0) && (ca.EndRow - ca.StartRow > 0))
{
ws.Cells.UnMerge(ca.StartRow, ca.StartColumn, ca.EndRow - ca.StartRow, ca.EndColumn - ca.StartColumn);
ws.Cells.Merge(ca.StartRow, ca.StartColumn, 1, ca.EndColumn - ca.StartColumn + 1);
ws.AutoFitRow(ca.StartRow, ca.StartColumn, ca.StartColumn, options);
double rowHeight = ws.Cells.Rows[ca.StartRow].Height;
for (int i = ca.StartRow; i <= ca.EndRow; i++)
{
ws.Cells.Rows[i].Height = rowHeight / (ca.EndRow - ca.StartRow + 1);
}
ws.Cells.Merge(ca.StartRow, ca.StartColumn, ca.EndRow - ca.StartRow + 1, ca.EndColumn - ca.StartColumn + 1);
}
}