2016-02-25 1 views
3

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

То, что я хочу сделать, это цикл через все клетки, как показано в коде ниже, а затем, если ячейка содержит сводную таблицу, я хочу, чтобы хранить информацию строки и столбца этой ячейки в целое значение, как, например:

int rowCount = xlRange.Rows.Count; 
int colCount = xlRange.Columns.Count; 

Excel.Range cell = null; 

for (int iRow = 1; iRow < rowCount; iRow++) 
{ 
    for (int iCol = 1; iCol <= colCount; iCol++) 
    { 
     /* This line of code is probably wrong */ 
     cell = xlRange.Cells[iRow, iCol] as Excel.Range; 

     if(/*Cell contains PivotTable*/) 
     { 
      int rowLocation = iRow; 
      int colLocation = iCol; 
     } 
    } 
} 

Я пытался смотреть на MSDN и других но не могут найти методов обнаружения, если ячейка содержит сводную таблицу.

Любая помощь приветствуется, спасибо.

ответ

4

Вот код для справки. Определите общий диапазон, занятый сводными таблицами на листе, и проверьте, является ли ячейка частью диапазона.

private Excel.Range IdentifyPivotRanges(Excel.Range xlRange) 
{ 
    Excel.Range pivotRanges = null; 
    Excel.PivotTables pivotTables = xlRange.Worksheet.PivotTables(); 
    int pivotCount = pivotTables.Count; 
    for (int i = 1; i <= pivotCount; i++) 
    { 
     Excel.Range tmpRange = xlRange.Worksheet.PivotTables(i).TableRange2; 
     if (pivotRanges == null) pivotRanges = tmpRange; 
     pivotRanges = this.Application.Union(pivotRanges, tmpRange); 
    } 
    return pivotRanges; 
} 

private void CheckCellsForPivot(Excel.Range xlRange) 
{ 
    Excel.Range pivotRange = IdentifyPivotRanges(xlRange); 
    int rowCount = xlRange.Rows.Count; 
    int colCount = xlRange.Columns.Count; 
    for (int iRow = 1; iRow <= rowCount; iRow++) 
    { 
     for (int iCol = 1; iCol <= colCount; iCol++) 
     { 
      var cell = xlRange.Cells[iRow, iCol]; 
      if (Application.Intersect(pivotRange, cell) != null) 
      { 
       int rowLocation = iRow; 
       int colLocation = iCol; 
      } 
     } 
    } 
} 
+0

Спасибо за ваш ответ, немного настройка этого решения решила мою проблему – Alex

1

взгляд здесь есть несколько примеров о пробегает по списку сводных таблиц

pivotSheet.Activate(); 
Microsoft.Office.Interop.Excel.PivotTables pivotTables = 
     (Microsoft.Office.Interop.Excel.PivotTables)pivotSheet.PivotTables(missing); 
int pivotTablesCount = pivotTables.Count; 

Refreshing an Excel Pivot table from C#

+0

Спасибо за ваш ответ, я уже посмотрел на это, но я не мог понять получения ячейки, которая содержит сводную таблицу с помощью этого, вы могли бы поместить ответ в контексте моего вопроса, если возможно пожалуйста? – Alex

+0

Каждая сводная таблица имеет местоположение ..... https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.pivottable.location.aspx...Первые элементы таблицы здесь https: //msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.pivottable_members.aspx. Я также нашел это в своих путешествиях. Очень приятно показывать вам все диапазоны для сводных таблиц. Http://peltiertech.com/referencing-pivot-table-ranges-in-vba/ – Ggalla1779

 Смежные вопросы

  • Нет связанных вопросов^_^