Метод EPPlus - AutoFitColumns() завершается ошибкой, если столбец имеет объединенные ячейки

мне было интересно, придумал ли кто-нибудь обходной путь к этой проблеме. Я заметил, что метод AutoFitColumns() не работает на столбцах с Объединенными ячейками. Я включил базовый пример кода ниже:

var cellRange = worksheet.Cells[1, column, 2, column];
cells.Merge = true;
cells.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
cells.Value = "Some Text Goes Here";
worksheet.Cells.AutoFitColumns();

результирующий лист будет иметь ячейки в строках 1 и 2, объединенные (правильно) для столбца в переменной столбца, но эта конкретная ячейка игнорируется методом AutoFitColumns ().

любая помощь будет оценили.

1 ответов


в принципе...

AutoFitColumns is документирована игнорировать объединенные ячейки. Это не провал, по крайней мере, в смысле дефектности.

AutoFit в Excel также игнорирует объединенные ячейки.

по-видимому, через Excel 2007,вы не можете использовать функцию автозапуска для строк или столбцов, содержащих объединенные ячейки на всех.

Я тестировал только с Excel 2013, который, кажется, ведет себя иначе:

  • автоматическая подгонка строки игнорирует все ячейки, объединенные в этой строке.

  • автоматическая подгонка столбца игнорирует все объединенные ячейки столбца в этом столбце.

другими словами, Вы можете использовать AutoFit в строках и столбцах с Объединенными ячейками, он просто проигнорирует любые ячейки, которые были объединены по тому же измерению, которое вы автоматически подгоняете.

желаемый эффект AutoFit с Объединенными ячейками r/t? (+ обходные пути)

наконец, я не уверен, вижу ли я, как имеет смысл автоматически приспосабливаться к объединенной ячейке. Например, предположим, что у вас есть объединенная ячейка в A1: B1 с содержимым, которое заполняет ширину двух столбцов по умолчанию.

если вы автоматически вписываетесь в столбец A, что должно произойти? Предполагается ли, что столбец A станет достаточно широким, чтобы соответствовать всем A1: B1, как будто объединенная ячейка существует только в A1, верхней левой исходной ячейке? Это может быть разумно, поскольку я не могу сразу увидеть, может ли странное поведение подразумеваться в некоторых обстоятельствах.

если что-то подобное желательно, я бы вставил содержимое, автоматически подогнал, и только затем слияние.

но что, если вы хотите автоматически вписаться в столбец B в такой ситуации:

enter image description here

здесь вы можете захотеть, чтобы столбец B был достаточно широким, чтобы все содержимое в A1:B1 отображалось. (Содержание-это просто текст " well hello мир.")

боюсь, для этого нет единого лайнера. Вот один из способов сделать это:

  1. вставьте содержимое в еще не включенную верхнюю левую ячейку.

  2. сохранить текущую ширину столбца этой ячейки.

  3. автоподбор колонны.

  4. сохранить новую ширину столбца.

  5. сбросьте ширину столбца до того, что вы сохранили в шаге 2.

  6. объединить ячейки, которые вы хотите объединить.

  7. общая ширина всех ваших Объединенных столбцов, кроме последнего.

  8. вычесть эту сумму из ширины, сохраненной на шаге 4.

  9. установите ширину последнего объединенного столбца в результат шага 8.

в целом, можно разделить общее авто-монтажная ширина от Шаг 4 среди объединенных столбцов как вам будет угодно.

чтобы сделать все это, вы захотите использовать ExcelColumn.AutoFit и ExcelColumn.WidthExcelWorksheet.Column чтобы захватить ExcelColumn объекты).

но самое простое...

если ваш контент статичен(или, по крайней мере, динамичен, но не слишком переменен по длине), вы можете просто установить разумную фиксированную ширину(ы) для рассматриваемого столбца (ов), распределенную так, как вы хотите.