2017-03-27 1 views
0

Je dois sélectionner une collection de cellules dans une feuille de calcul. Je pourrais trouver comment sélectionner une gamme, mais pas quand les cellules sont "isolées".Sélectionner une collection de cellules

Par exemple "$ D 4 $", $ G $ 9" ...

Mon code:

var excelApp = Globals.ThisAddIn.Application; 

List<string> unlockedCells = new List<string>(); 
foreach (_Excel.Range cells in excelApp.ActiveSheet.UsedRange) 
{ 
    if (!cells.Locked) 
    { 
     unlockedCells.Add(cells.Address); 
    } 
} 

unlockedCells.ForEach(_c => 
{ 
    excelApp.Range[_c].Select(); 
}); 

Le problème ici est que chaque fois qu'une nouvelle gamme est sélectionnée, la sélection précédente est .. perdu

Une autre approche Il ne fonctionne pas, soulève exception Exception from HRESULT: 0x800A03EC at Microsoft.Office.Interop.Excel._Application.get_Range(Object Cell1, Object Cell2)

la gamme que je reçois est la suivante: "$D$8,$E$8,$D$9,$E$9,$D$10,$E$10,$D$11,$E$11,$D$12,$E$12"

StringBuilder output = new StringBuilder(); 
... 
output.Append(String.Format("{0},", cells.Address)); 
string rangeDef = output.ToString().Left(output.Length - 1); 
excelApp.Range[rangeDef].Select(); 

Comment pourrais-je y accéder?

version Office 2016

+0

Créez une chaîne de références de cellule dans votre boucle et sélectionnez ces cellules en utilisant la chaîne que vous avez créée après votre boucle. – ManishChristian

+0

@ManishChristian J'ai déjà essayé cette solution et je n'ai pas travaillé. Je vais modifier la question pour montrer ce que j'ai aussi fait. – blfuentes

+0

Voyez si la réponse de [** this **] (http://stackoverflow.com/a/6155286/1652222) pourrait fonctionner pour vous. – ManishChristian

Répondre

0
List<string> cells = new List<string>(); 
cells.Add("$C$4"); 
cells.Add("$D$5"); 
cells.Add("$H$10"); 

for (int idx = 0; idx < cells.Count; idx++) 
    cells[idx] = String.Format("'{0}'!{1}", (excelApp.ActiveSheet as _Excel.Worksheet).Name, cells[idx]); 
string rangeDef = String.Format("={0}", String.Join(";", cells)); 

var sheet = (excelApp.ActiveSheet as _Excel.Worksheet).get_Range(rangeDef, Type.Missing).Select(); 

Il semble qu'il me manquait le nom de la feuille de calcul.

0

Bien que le excelApp lui-même a une propriété Range, le classeur ou feuille de calcul est ambigu. Au lieu de cela, essayez de faire référence à la Range d'une certaine feuille de calcul:

StringBuilder output = new StringBuilder(); 
output.Append("C4,"); 
output.Append("D5,"); 
output.Append("E6,"); 
string rangeDef = output.ToString().Substring(0, output.Length - 1); 

Worksheet worksheet = excelApp.ActiveSheet; 
Range range = worksheet.Range[rangeDef]; 
range.Value = "test"; 

travaillé pour moi pendant un certain minimum de tests.

+0

J'ai essayé ceci. Aussi ne fonctionne pas, même erreur. Je soupçonne que ceci est en quelque sorte lié à la version de mon bureau. 2016. Une idée? – blfuentes