Aspose Cells AutoFitMergedCells

时间:2015-02-26 09:46:44

标签: c# aspose-cells

我有一个.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 - 垂直合并的单元格。问题是这些细胞也不会影响垂直合并的细胞。水平同时。有关如何让它们自动调整的任何想法?

Not working autofit

2 个答案:

答案 0 :(得分:0)

<强>更新 Microsoft Excel不支持在合并的单元格上本机自动调整。 Aspose.Cells有时会在混合水平和垂直合并上产生意想不到的结果。您需要在Aspose forums中发布示例Excel文件和代码,以便支持人员可以详细查看。

我与Aspose一起担任开发者布道者。

答案 1 :(得分:0)

我自己找到了解决方案。 这个想法是:

1。取消合并单元格,合并列,但不要合并行。

2。对合并行应用自动调整。

3。获取此合并行的mergedRowHeight,将其他n行的高度设置为n / mergedRowHeight。

4。将行合并回来。

所以结果如下:

result

代码是:

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