2014-09-10 3 views
1

OpenXML을 사용하여 내 보낸 Excel 통합 문서에서 그룹을 만들려고합니다.ClosedXML 개요

내 소스 데이터 테이블은 다음과 같다 : 나는

ws.Outline.SummaryVLocation = XLOutlineSummaryVLocation.Top; 
ws.Rows(1, 3).Group(); // Create an outline (level 2) for rows 1-4 
ws.Rows(4, 6).Group(); 

을 시도

각 그룹에 소계를 가진 국가가 윤곽 다음 제품을 만들고 싶습니다

Row  State Product Sales 
1  NY  A  100 
2  NY  A  200 
3  NY  B  300 
4  CA  A  100 
5  CA  A  200 
6  CA  B  300 

그러나 그것은 내가 원하는 것을 나에게주지 않고있어, 나는 부분합을 추가하는 옵션을 보지 못한다.

어떻게하면됩니까?

답변

2

사용하는 설명서의 코드 예제가 오래되었거나 잘못되었습니다.
2 ~ 4 행을 그룹화하려면 ws.Rows(3, 4).Group(); 코드를 사용해야합니다 (그림 참조). 이것은 Excel 자체와 일치합니다. 동일한 결과를 얻으려면 그룹 버튼을 클릭하기 전에 행 3과 4 만 선택해야합니다.

enter image description here

당신은 1 ~ 3 코드에서 같은 그룹 행하려고하면 일부와 확장에 당신은이 동작을 제어 할 수 있습니다 0 에는 행이 없기 때문에 오류에 이르게 행 0에서 당신은 그룹 모두 XLOutlineSummaryVLocation 속성 대신 상단의 Bottom를 사용하는 경우 그룹 행 2 ~ 4로 상위 두 행을 사용

  1. 당신은 엑셀 행 번호가 아니라 숫자를 사용할 필요가 모든이와 ws.Rows(2, 3).Group();

    두 더 많은 포인트가 말했다 귀하의 열 "행".

  2. 이 모든 그룹화 및 축소는 표시 목적으로 만 사용됩니다. 판매 수치를 요약하면 Excel에서 소계 함수를 사용해야합니다 (이 경우 다소 혼동스럽고 도움이되지 않습니다). 또는 C#에서 직접 열과 결과를 추가하십시오. 원하는 결과로 이어질해야이 코드를 사용하여

(아래 그림 참조)

ws.Outline.SummaryVLocation = XLOutlineSummaryVLocation.Top; 
ws.Cell(1, 5).SetValue("Product subtotals"); 
ws.Cell(1, 6).SetValue("State subtotals"); 

ws.Rows(3, 4).Group();      // group rows 2 to 4 (state NY), outline level 1 
ws.Cell(2, 6).SetFormulaA1("=SUM(D2:D4)"); // subtotal for all NY sales 
ws.Row(3).Group();       // group rows 2 and 3 (product A), outline level 2 
ws.Cell(2, 5).SetFormulaA1("=SUM(D2:D3)"); // subtotal for all NY, product A sales 
ws.Cell(4, 5).SetFormulaA1("=SUM(D4)");  // subtotal for all NY, product B sales 

ws.Rows(6, 7).Group();      // group rows 5 to 7 (state CA), outline level 1 
ws.Row(6).Group();       // group rows 5 and 6 (product A), outline level 2 
ws.CollapseRows(2);       // collapse group level 2 (products) 

enter image description here