Aspose 单元格 AutoFitMergedCells

Aspose Cells AutoFitMergedCells

我有一个 .xls 文档,其中的单元格同时垂直、水平和垂直&水平合并。我的代码是:

Workbook wb = new Workbook(inPath);
AutoFitterOptions options = new AutoFitterOptions();
options.AutoFitMergedCells = true;

wb.Worksheets[0].AutoFitRows(options);
wb.Worksheets[0].AutoFitColumns(options);

wb.Save(outPath);

AutoFitRows 影响水平合并的单元格,AutoFitColumns - 垂直合并的单元格。问题是这些都不影响同时垂直和水平合并的单元格。关于如何使它们自动适应的任何想法?

更新: Microsoft Excel 本身不支持合并单元格的自动调整。 Aspose.Cells 有时在混合水平和垂直合并时也会产生意想不到的结果。您需要 post Excel 示例文件和 Aspose forums 中的代码,以便支持人员可以对其进行详细研究。

我在 Aspose 工作,担任开发人员推广员。

我自己找到了解决办法。 思路是:

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);
    }
}