OpenXML, Высота представления таблицы PresentationML и Высота строки при переносе слов

Я новичок в Open Xml и создал приложение для создания отчетов с использованием Open Xml SDK. Он заполняет данные в таблицу, а когда высота таблицы превышает границу слайда, клонируйте слайд и заполняете следующий набор данных на новых слайдах и так далее. Все работает нормально, но когда некоторые строки содержат данные, которые переносятся в 2 строки, не удается перейти на новую страницу в том же месте. Кажется, причина в том, что Open Xml по-прежнему возвращает высоту строки, такую ​​же, как высота строки, когда есть одна строка данных. Есть ли способ решить это?

Вот фрагмент кода, который выполняет логику разбиения на страницы (CreateTextCell - это метод, который создает текстовую ячейку и возвращает):

  var tbl = current.Slide.Descendants<A.Table>().First();
                var tr = new A.TableRow();
                tr.Height = 200000;
                tr.Append(CreateTextCell(product.Name));
                tr.Append(CreateTextCell(product.ProductNumber));
                tr.Append(CreateTextCell(product.Size));
                tr.Append(CreateTextCell(String.Format("{0:00}", product.ListPrice)));
                tr.Append(CreateTextCell(product.SellStartDate.ToShortDateString()));
                tbl.Append(tr);
                totalHeight += tr.Height;



                if (totalHeight > pageBorder)
                    overflow = true;

2 ответа

Решение

У меня был очень похожий вопрос, и я обнаружил, что высота таблицы не обновляется при заполнении таблицы с помощью Open XML SDK. Он обновляется только тогда, когда презентация действительно открывается в Power Point. Это, очевидно, не поможет вам разобраться в коде, когда нужно разделить таблицу на новый слайд, но если вы попробуете этот ответ, это может помочь.

Если вы можете предположить, что все ваши столбцы выше фиксированной ширины, за исключением первого столбца, где product.Name используется, и ваш стиль шрифта такой же, тогда вы можете использовать следующий метод вместо проверки высоты таблицы> границы.

Сначала откройте свою презентацию в PowerPoint и перейдите к слайду с таблицей. Введите в свой столбец фиксированной ширины данных. Затем в первом столбце введите "XXXX....", пока не произойдет разрыв строки. Подсчитайте количество символов до переноса строки. Это число будет maxLengthBeforeBreak

Во-вторых, очистите строку с первого шага выше и введите аналогичную строку, которая не разрывается. Скопируйте и вставьте эту строку вниз и заполните таблицу на слайде, пока у вас не появится максимальное количество строк для слайда, которое выглядит привлекательным для пользователя. Это количество строк будет maxTableRowsPerSlide

Теперь, когда вы заполняете каждый слайд строками, посчитайте количество строк, которые вы вставили в rowCount переменная. Вставьте строки в то время как rowCount < maxTableRowsPerSlide, затем начните новый слайд.

И для каждого ряда - если длина product.Name это> maxLengthBeforeOverflow Вы можете увеличить rowCount разделив product.Name длина по maxLengthBeforeOverflow чтобы получить число строк, которые обертывают этот ряд.

Другие вопросы по тегам