0

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

不工作自动调整

4

2 回答 2

0

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

我与 Aspose 一起担任开发人员宣传员。

于 2015-02-27T12:18:23.290 回答
0

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

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);
    }
}
于 2015-03-03T11:13:25.647 回答