2016-11-25 3 views
0

테이블 머리글 그룹을 구성하기 위해 여러 셀 시퀀스를 병합하고 싶습니다.Interop.Excel을 사용하여 C#으로 셀을 병합합니다.

 appExcel.DisplayAlerts = false; 

     int columnCellIndex = 1; 
     foreach(var captionGroupInfo in extraCaptionGroupings) 
     { 
     Microsoft.Office.Interop.Excel.Range currRange = newWorksheet.Range[newWorksheet.Cells[1, columnCellIndex], 
     newWorksheet.Cells[1, columnCellIndex + captionGroupInfo.Item2]]; 
     currRange.Value2 = captionGroupInfo.Item1; 
     currRange.Select(); 
     currRange.Merge(Missing.Value); 

     columnCellIndex += captionGroupInfo.Item2; 
     } 
     } 

그래서 대신 :

| ||  Dog 1 ||  Dog 2 ||  Cat  || Hamster 1 || Hamster 2 || 
-------------------------------------------------------------------------------------- 
| Id ||Name|Owner|Age||Name|Owner|Age||Name|Owner|Age||Nam|Owner|Age||Name|Owner|Age|| 

I를

다음
List<Tuple<string, int>> 

내가 지금까지 가지고 무엇에
는 내가 병합 된 셀의 값에 대한 정보를 유지하고 열 스팬의 get

|           Dogs          | 
| Id ||Name|Owner|Age|Name|Owner|Age||Name|Owner|Age||Nam|Owner|Age|Name|Owner|Age|| 

1의 모든 셀을 병합하는 것으로 보입니다.
내가 뭘 잘못하고 있는지 아이디어가 있습니까? 비록 columnCellIndex를 1 씩 증가 시키더라도 여전히 결과는 내가 기대하는 바가 아니다.

+0

예상되는 결과는 무엇입니까? 귀하의 질문을 이해하지 못했습니다 – user1519979

+0

우리는 2 마리의 개, 1 마리의 고양이와 2 마리의 햄스터가 있다고 가정 해 봅시다. 각 동물 (3 셀)의 정보를 스팬하는 5 개의 병합 된 헤더 셀이있는 행을 만들고 싶습니다. 대신 모든 정보를 스팬 한 병합 된 셀이 하나뿐입니다. –

+0

이 행은 행 1의 열을 1에서 5까지 병합합니다.'Range currRange = workSheet.Range [workSheet.Cells [1,1], workSheet.Cells [1, 5]]; currRange.Merge (Missing.Value);'병합 할 코드가 있는데, 얻는 값은 꺼져 있고 그들은'captionGroupInfo.Item2'에서 나온 것처럼 보입니다. 그래서 나는 거기를보고 시작할 것입니다. – JohnG

답변

1

값이 captionGroupInfo.Item2 인 것을 볼 수 없기 때문에 여기에서 추측합니다. 표시된 출력 결과에서 첫 번째 열을 병합하지 않는다고 추측합니다. 병합되지 않은 단일 열처럼 보입니다. 그래서 columnCellIndex = 1로 설정할 때; 그런 다음 첫 번째 열에서 시작합니다. 따라서 시작 열 인덱스를 2로 변경 했으므로 셀 병합을 시작하려는 위치가 표시됩니다. 그런 다음 병합 범위를 가져올 때 결말 열 인덱스 값을 1 씩 뺍니다. 그렇지 않으면 우리가 1 열이 아닌 2 열에서 시작했기 때문에 범위가 1에서 많을 것입니다. captionGroupInfo.Item2에서 3 개의 셀 병합, 3 개의 셀 병합, 5 개의 셀 병합, 5 등의 반환 값을 테스트했을 때 이러한 변경 사항이 적용되어 정상적으로 작동했습니다. 이러한 변화와 함께 예상대로 작동했습니다. 희망이 도움이됩니다.

int columnCellIndex = 2; 
foreach (var captionGroupInfo in extraCaptionGroupings) 
{ 
    Microsoft.Office.Interop.Excel.Range currRange = newWorksheet.Range[newWorksheet.Cells[1, columnCellIndex], 
                     newWorksheet.Cells[1, columnCellIndex + captionGroupInfo.Item2 - 1]]; 
    currRange.Value2 = captionGroupInfo.Item1; 
    currRange.Select(); 
    currRange.Merge(Missing.Value); 
    columnCellIndex += captionGroupInfo.Item2; 
} 
+0

니스! 고마워. 나는 그것이 사소한 것이었지만 그것을 이해할 수 없다는 것을 알았다. :) –