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);
}
}
我有一个 .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);
}
}