2016-11-25 3 views
0

Я хотел бы объединить несколько последовательностей ячеек, чтобы сформировать группировки заголовков таблиц.
Я храню информацию о стоимости объединенной ячейки и его продолжительность колонки вОбъединить ячейки excel с C# с помощью Interop.Excel

List<Tuple<string, int>> 

Вот то, что я до сих пор:

 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 получить

|           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 хомячка. Я хотел бы построить строку с 5 объединенными ячейками заголовка, которые охватывают информацию каждого животного (3 ячейки). Вместо этого я получаю только одну объединенную ячейку, охватывающую всю информацию. –

+0

Эта строка объединяет столбцы 1-го столбца с 1 по 5 'Диапазон 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 при получении диапазона для слияния. В противном случае диапазон будет ОДНО для многих, потому что мы начали в столбце 2, а не в столбце 1. С этими изменениями он работал нормально, когда я тестировал возвращаемые значения от captionGroupInfo.Item2, где они слияли 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

Ницца! Большое спасибо. Я знал, что это что-то тривиальное, но я не мог понять. :) –