2012-03-05 2 views
4

Open XML을 처음 사용하고 Open XML SDK를 사용하여보고 응용 프로그램을 만들었습니다. 테이블에 데이터를 채우고 테이블 높이가 슬라이드 테두리 클론을 초과하면 슬라이드를 만들고 새 슬라이드에서 다음 데이터 집합을 채 웁니다. 모두 잘 작동하지만 일부 행에서 2 줄로 감싸는 데이터가있는 경우 정확한 위치에서 새 페이지로 전환되지 않습니다. 그 이유는 Open XML이 한 줄의 데이터가있을 때 행 높이와 같은 행 높이를 반환한다는 것입니다. 어쨌든 이것을 해결할 것입니까? 당신은 당신이 위의 모든 열이 고정되어 있다고 가정 할 수있는 경우OpenXML, PresentationML 둘러보기의 표 높이 및 행 높이

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; 

답변

1

나는 question과 매우 유사했으며 Open XML SDK를 통해 테이블을 채울 때 테이블의 높이가 업데이트되지 않는다는 것을 발견했습니다. 프리젠 테이션이 실제로 파워 포인트에서 열릴 때만 업데이트됩니다. 이것은 분명히 코드에서 새로운 슬라이드로 테이블을 나눌 때 도움이되지 않지만, 이것을 시도하면 answer이 도움이 될 것입니다.

+0

amura .. 당연히 나는 그 질문을 보았다 :). 그러나 우리는 텍스트 마진을위한 레이아웃 영역을 계산할 때 셀 마진 (margin), 패딩 (padding), 들여 쓰기 (indentation)를 고려해야합니다. 당신이 이것을 달성했다면 당신은 어떤 근원을 공유하는 것이 좋을까요? – Aneef

+0

패딩과 여백을 고려해야 할 때가 맞습니다. 솔루션을 찾지 못했기 때문에 그 질문에 대해 정답을 표시 한 적은 한번도 없었습니다. 고객에게 돌아가서이 제한 사항을 해결할 수있는 해결 방법을 찾았습니다. – amurra

1

: 여기

이 페이지 매김 논리를 수행하는 코드의 조각 (CreateTextCell 텍스트 셀을 만들고 반환하는 방법입니다) 첫 번째 열을 제외한 너비가 product.Name이고 글꼴 스타일이 같으면 표 높이> 테두리를 확인하는 대신 다음 방법을 사용할 수 있습니다.

먼저 PowerPoint에서 프레젠테이션을 열고 테이블이있는 슬라이드로 이동하십시오. 고정 너비 열 데이터를 입력하십시오. 그런 다음 첫 번째 열에서 줄 바꿈이 시작될 때까지 'XXXX ....'을 입력하고 줄 바꿈 전에 문자 수를 계산하십시오.이 숫자는 maxLengthBeforeBreak

두 번째로 위의 첫 번째 단계에서 행을 지우고 다음을 입력하십시오. 이 행을 복사하여 붙여넣고 슬라이드의 최대 행 수가 사용자에게 호소 할 때까지 슬라이드의 표를 채우십시오.이 행의 수는 maxTableRowsPerSlide

입니다. 당신이 행 각 슬라이드를 채울 때

지금, 당신은 rowCount 변수에 삽입 행의 수를 계산합니다. rowCount < maxTableRowsPerSlide는, 새로운 슬라이드를 시작하면서 행을 삽입합니다.

각 행에 대해 product.Name 길이가>maxLengthBeforeOverflow 인 경우 product.Name 길이를 maxLengthBeforeOverflow으로 나눠서이 행의 줄 바꿈을 늘릴 수 있습니다.

+0

응답 해 주셔서 감사합니다.하지만 문제는 모든 열 데이터가 동적으로 유도된다는 점입니다. 이는 단지 데이터 패턴에 불과합니다. 다른 시나리오도있을 수 있습니다. 기본적으로 나는 이것을 처리 할 공통적 인 방법이 필요하다. – Aneef