我有一个.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 - 垂直合并的单元格。问题是这些细胞也不会影响垂直合并的细胞。水平同时。有关如何让它们自动调整的任何想法?
答案 0 :(得分:0)
<强>更新强> Microsoft Excel不支持在合并的单元格上本机自动调整。 Aspose.Cells有时会在混合水平和垂直合并上产生意想不到的结果。您需要在Aspose forums中发布示例Excel文件和代码,以便支持人员可以详细查看。
我与Aspose一起担任开发者布道者。
答案 1 :(得分: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);
}
}