programing

엑셀에서 내 크로스탭이 왜 끊기는 거지?

bestprogram 2023. 5. 17. 23:31

엑셀에서 내 크로스탭이 왜 끊기는 거지?

BIRT를 이용하여 엑셀 스프레드시트를 만들려고 합니다.스프레드시트는 두 개체를 함께 매핑하는 크로스 탭입니다.행과 열의 수는 MySQL 데이터베이스의 값에 따라 동적입니다.현재 저는 PDF 출력을 위한 보고서를 실행하고 있습니다.이제 엑셀용 보고서의 두 번째 버전을 작성하려고 합니다.

저는 보고서 디자인을 복사하여 엑셀 작업에 맞게 조정하기 시작했습니다.모든 것이 정상으로 보이지만 머리글 뒤에는 처음 3개의 열만 표시됩니다.모든 행이 올바르게 나타납니다.

다음을 시도해 보았습니다.

  • 페이지의 모든 요소에서 Overflow를 Visible로 설정했습니다.효과가 없었습니다.
  • 마스터 페이지의 높이와 너비를 터무니없이 큰 값으로 설정해 보았습니다.모든 정보가 올바르게 표시되었지만 하드 코딩된 값이 없는 해결책을 기대하고 있습니다.나중에 데이터 폭이 다시 제 임의 값을 초과하여 끊어질 수 있습니다.

나는 다음과 같은 방식으로 제약을 받습니다.

  • 보고 엔진을 전환할 수 없습니다(BIRT를 사용해야 함).
  • 엑셀 이미터를 바꿀 수 없습니다.

이 블로그 항목은 제 문제를 언급하고 있습니다: http://www.spudsoft.co.uk/2011/10/the-spudsoft-birt-excel-emitters/ . 그러나 이미터 스위치 이외의 해결책을 제공하지 않습니다.구체적인 인용구는 "파일에도 페이지 레이아웃에 문제가 있어 해결할 수 없습니다(특히 광범위한 보고서가 잘립니다)."입니다.

하나의 블로그 엔트리를 넘어서 구글푸는 나를 실패시켰습니다.어떤 도움이든 감사합니다!감사해요!

여기 두 가지 질문이 있습니다.첫 번째는 비교적 쉽고, 두 번째는 복잡합니다.

1. Excel에서 내 크로스 탭이 잘리는 이유는 무엇입니까?

2. 런타임에 보고서의 열 수에 따라 마스터 페이지 너비를 동적으로 조정하려면 어떻게 해야 합니까?

A1: 열 너비가 수동으로 설정되어 마스터 페이지의 설정된 너비를 초과하여 열 수가 확장되므로 십자 탭이 잘립니다.보고서 설계 요소를 파악하고 조정할 때마다 BIRT는 사용자가 자신의 작업을 알고 있으며 설정을 재정의하지 않는다고 가정합니다.

이 솔루션은 보고서 요소(표 또는 교차 탭)를 재생성하고 크기를 수동으로 조정하지 않는 것입니다.HTML 또는 Excel에서 실행하면 모든 열이 사용 가능한 마스터 페이지 너비에 표시되도록 자동으로 설정됩니다.

2인치 마스터 페이지 너비와 30개 열이 있는 BIRT 4.2 Cross 탭, 보고서 항목의 스크린샷

2인치 x 30개 열

A2: 이것은 쉽지 않고, 지금은 답을 제공하지 않을 것입니다.해결책을 제시하고 몇 가지 장애물을 파악하겠습니다.이 질문에 대한 올바른 해결책에는 샘플 데이터베이스를 사용하는 작동하는 해결책이 포함되어야 합니다.

(BIRT 4.2.1 기준)

과제 1 - 보고서 테이블 또는 교차 탭 항목이 완료되기 전 이벤트에서 마스터 페이지 너비가 BIRT 보고서 스크립팅으로 설정됩니다.보고서에 몇 개의 열이 있는지 단순히 셀 수는 없습니다.

카운트할 경우 열 -

보고서 설계 초기화

 columnCount = 0;

교차 탭, 작성 시

 columnCount ++;

제가 조사한 바로는 Cross Tab 항목이 생성되기 전에 열을 세는 두 가지 경로가 제안되어 있습니다.어느 하나

  1. beforeFactory의 데이터 세트(데이터베이스에 대한 쿼리 두 개, 카운트할 쿼리 하나, 보고서에 대한 쿼리 하나)를 실행한 다음 카운트를 가져와 사용합니다.

  2. 초기 쿼리에서 값을 계산하고 Fetch의 데이터 세트에서 값을 수집합니다.

계산된 열을 사용하여 Fetch의 데이터 세트 옵션을 따라갔지만 작동하지 않았습니다.

과제 2 - 보고서 설계 이전, 렌더링 전에 마스터 페이지의 너비 속성을 설정해야 합니다.비포 팩토리가 가장 자주 추천되는 제품입니다.또한 마스터 페이지의 너비 속성은 마스터 페이지 "유형"이 "사용자 정의"로 설정된 경우에만 사용할 수 있으며, 속성 편집기 일반에서 수동으로 설정합니다.

onFetch에서 foreFactory로 값 전달은 정수가 아닌 문자열만 전달할 수 있는 PersistentGlobalVariable을 사용하여 수행해야 합니다.저는 이것이 작동하지 않을 수 있는 모든 방법을 찾았습니다.PersistentGlobalVariable에서 "12in"을 전달하는 것조차 마스터 페이지를 조정하지 못했습니다. 너비

공장 이전의 이러한 코드 중 하나는 마스터 페이지 너비를 조정합니다(유형 = 사용자 지정인 경우).

값 전달

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

값을 계산하여 전달합니다.

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

결국 저는 보고서 실행 시 생성되는 숫자 열에 전달되는 마스터 페이지 너비를 조정하는 기능 보고서를 찾거나 만들 수 없었습니다.저는 가능하다고 생각하지만, 그렇게 하는 것은 제 능력 밖의 일입니다.

언급URL : https://stackoverflow.com/questions/11672583/why-is-my-crosstab-being-cut-off-in-excel