Почему моя кросс-таблица обрезается в Excel?

Я пытаюсь создать электронную таблицу Excel с помощью BIRT. Электронная таблица представляет собой кросс-таблицу, в которой два объекта сопоставляются друг с другом. Количество строк и столбцов является динамическим на основе значений в базе данных MySQL. В настоящее время у меня есть рабочая реализация отчета для вывода в PDF. Сейчас я пытаюсь создать вторую версию отчета для Excel.

Я скопировал дизайн отчета и начал настраивать его для работы с Excel. Все выглядит хорошо, но после заголовка отображаются только первые 3 столбца. Все строки отображаются правильно.

Я пробовал следующее:

  • Я попытался установить для каждого элемента на странице значение «Видимый» для параметра «Переполнение». Это не подействовало.
  • Я попытался установить высоту и ширину главной страницы до смехотворно больших значений. Вся информация отображается правильно, но я надеюсь на решение без жестко заданных значений. В будущем ширина данных может снова превысить мое произвольное значение и будет отключена.

Я ограничен следующими способами:

  • Я не могу переключать механизмы отчетности (мне нужно использовать BIRT).
  • Я не могу переключать эмиттеры Excel.

В этой записи блога упоминается моя проблема: http://www.spudsoft.co.uk/2011/10/the-spudsoft-birt-excel-emitters/, но он не предлагает другого решения, кроме переключателя эмиттера. Конкретная цитата: «У файлов также есть проблемы с макетом страницы, которые я не мог обойти (особенно широкие отчеты были бы обрезаны)».

Помимо одной записи в блоге мой googlefu подвел меня. Любая помощь приветствуется! Спасибо!


person radicaledward101    schedule 26.07.2012    source источник
comment
Я бы посоветовал загрузить образец файла где-нибудь с выводом BIRT, каким вы его видите в Excel и каким вы хотели бы его видеть, чтобы мы могли с чем-то работать. Избегайте личных / конфиденциальных данных и публикуйте ссылку для просмотра / скачивания   -  person Apostolos55    schedule 02.01.2013
comment
К сожалению, я больше не в компании, в которой работал, когда задал этот вопрос. Я бы определенно сделал это, если бы был. Поскольку это не так, у меня больше нет доступа к коду, который вызывал проблему, или к любому результату. Я считаю, что в итоге мы использовали решение сколь угодно большой ширины. Я не был полностью удовлетворен, но в то время это работало достаточно хорошо.   -  person radicaledward101    schedule 19.01.2013
comment
Этот вопрос следует закрыть, как правило, BIRT экспортирует все столбцы в Excel, даже со встроенным эмиттером. Это разовый вопрос по конкретной проблеме в одном отчете, где отчет недоступен для решения проблемы. Следовательно, на этот вопрос нет ответа.   -  person James Jenkins    schedule 06.03.2013
comment
Я думаю, вы обнаружите, что для любого значительно широкого отчета некоторые столбцы не будут отображаться, если это не будет исправлено в новой версии BIRT. Примечание. Вполне возможно, что данные действительно присутствуют в файловой структуре, но не отображаются правильно в Excel. Я не уверен, какова политика SO в этой ситуации. Время от времени я буду проверять, как продвигается вопрос, но не думаю, что у меня будет время обновить его примером. Если его нужно закрыть, ничего страшного. Однако я не закрою его, если кто-то не покажет мне вескую причину для этого.   -  person radicaledward101    schedule 14.03.2013
comment
Таким образом, одним из решений может быть способ динамического изменения ширины главной страницы. Когда для параметра «Тип» установлено значение «Пользовательский», в настоящее время единственные параметры «наведи и щелкни» требуют определенных значений (числовые цифры разрешены только во всплывающих окнах) для любого из 8 типов единиц (например, «в»). (с использованием BIRT 4.2.1)   -  person James Jenkins    schedule 19.03.2013
comment
@JamesJenkins Это именно то, что я искал, но не смог найти способ сделать это.   -  person radicaledward101    schedule 20.03.2013
comment
Эти два сообщения на форумах сообщества Eclipse с ответами Джейсона Уэтерсби предоставили путь к изменению ширины главной страницы в зависимости от количества столбцов. Создание на их основе ответа на публикацию здесь - это нечто большее, чем я хочу сейчас попытаться. eclipse.org/forums/index.php/t/392881 eclipse.org/forums/index.php/mv/tree / 118884 / # page_top   -  person James Jenkins    schedule 20.03.2013
comment
@JamesJenkins Похоже, хорошее начало. Если кто-то еще столкнется с этой проблемой, надеюсь, это поможет ему найти решение! Спасибо за вашу помощь в этом.   -  person radicaledward101    schedule 03.04.2013
comment
@ radicaledward101, я работаю над документированием решения для настройки ширины главной страницы на основе количества столбцов с помощью BIRT 4.2.1. У меня есть отчет с перекрестными таблицами (из выборочной базы данных), который варьируется от 1 до 30 столбцов в зависимости от значений (даты в параметре). Я не могу воссоздать проблему не отображения всех значений. Я использовал элемент отчета Cross Tab, он автоматически подстраивается под элементы в доступном пространстве, я не вижу никаких вариантов для изменения ширины столбца (вы могли бы сделать это с сгруппированной таблицей). Для этого решения я собираюсь продолжить работу с элементом кросс-таблицы.   -  person James Jenkins    schedule 16.04.2013
comment
@JamesJenkins Спасибо за всю вашу работу над этим!   -  person radicaledward101    schedule 08.05.2013


Ответы (1)


Здесь есть два вопроса. Первый относительно простой, второй - сложный.

1. Почему моя кросс-таблица обрезается в Excel?

2. Как динамически настроить ширину эталонной страницы в зависимости от количества столбцов в отчете во время выполнения?

A1: Перекрестная вкладка обрезается, потому что ширина столбцов была установлена ​​вручную, при этом количество столбцов будет увеличиваться за пределы установленной ширины эталонной страницы. Каждый раз, когда вы берете элемент дизайна отчета и настраиваете его, BIRT предполагает, что вы знаете, что делаете, и не отменяет ваши настройки.

Решение состоит в том, чтобы воссоздать элемент отчета (таблица или кросс-таблица) и не изменять вручную какие-либо размеры. При запуске в HTML или Excel все столбцы будут автоматически настроены для отображения с доступной шириной главной страницы.

Снимок экрана BIRT 4.2 Cross Tab, Report Item с шириной мастер-страницы 2 дюйма и 30 столбцами

Два дюйма на 30 столбцов

A2: Это непросто, и сейчас я не буду давать ответ. Я укажу на решение и обозначу пару препятствий. Правильное решение этого вопроса должно включать работающее решение с использованием образца базы данных.

(начиная с BIRT 4.2.1)

Challenge1 - ширина главной страницы устанавливается BIRT Report Scripting в событиях, предшествующих чтобы сообщить о завершении элемента таблицы или кросс-таблицы. Вы не можете просто подсчитать, сколько столбцов в отчете;

Если хотите посчитать, столбцы -

Дизайн отчета инициализировать

 columnCount = 0;

Кросс-таблица, onCreate

 columnCount ++;

В моем исследовании было предложено два пути для подсчета столбцов до создания элемента кросс-таблицы. Или

  1. Запустите набор данных в beforeFactory (это означает два запроса к базе данных, один для подсчета и один для отчета), затем получите счет и используйте его.

  2. Вычислите значение в исходном запросе и соберите его в наборе данных onFetch.

Я использовал параметр набора данных onFetch, используя вычисляемый столбец, но не смог заставить его работать.

Challenge2 - свойство Width главной страницы должно быть установлено в дизайне отчета или до него, до Render. Наиболее часто рекомендуется использовать beforeFactory. Кроме того, свойство «Ширина» главной страницы доступно только в том случае, если для «Типа» главной страницы установлено значение «Пользовательский», в своих попытках я устанавливал это вручную в редакторе свойств Общие.

Передача значений из onFetch в beforeFactory должна выполняться с помощью PersistentGlobalVariable, которая может передавать только строки, а не целые числа. Я нашел множество способов, чтобы это не сработало. Даже передача «12 дюймов» в PersistentGlobalVariable не позволяет настроить ширину эталонной страницы.

Любой из этих кодов в beforeFactory будет регулировать ширину мастер-страницы (когда Type = Custom).

Передайте значение

reportContext.getReportRunnable().designHandle.getDesignHandle().findMasterPage("Simple MasterPage").setProperty("width","12in");

Рассчитайте значение и передайте его

increaseWidth = 20;
reportContext.getReportRunnable().designHandle.getDesignHandle().findMasterPage( "Simple MasterPage").setProperty("width",((2+increaseWidth)+"in"));

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

person James Jenkins    schedule 19.04.2013