2017-03-20 1 views
1

Je veux générer un fichier Excel à partir de mon application C#, que les utilisateurs pourront remplir plus tard. J'utilise Microsoft.Office.Interop.Excel.Génération d'un fichier Excel avec des valeurs déroulantes pré-évoluées avec C# 's Microsoft.Office.Interop.Excel

Je lance Excel et alimenter les cellules d'en-tête en utilisant le code ci-dessous:

var excelApp = new Excel.Application {Visible = true}; 
var workbook = excelApp.Workbooks.Add(Missing.Value); 
var workSheet = (Excel.Worksheet) workbook.Worksheets.Item[1]; 

headers.Select((s, i) => new Tuple<string, int>(s, i)).ToList().ForEach 
    (
    h => { workSheet.Cells[1, h.Item2 + 1] = h.Item1; } 
    ); 

Comment puis-je préciser que la première des cellules de colonne doivent avoir une liste déroulante contenant des valeurs préremplis?

J'ai essayé des tas de choses disponibles en ligne, comme le trouve ci-dessous here, sans chance:

var dropDownRange = workSheet.Range["A2"].Resize[64000]; 
dropDownRange.Value = Values; 
dropDownRange = dropDownRange.Offset[0, 1]; 
dropDownRange.Validation.Delete(); 
dropDownRange.Validation.Add(Excel.XlDVType.xlValidateList, Excel.XlDVAlertStyle.xlValidAlertInformation, Type.Missing, "=DropDownList"); 

Répondre

1

Le paramètre de formule attend une chaîne séparée par des virgules des valeurs lors de l'application d'une validation limitant à une liste . Voici un exemple qui crée un menu déroulant avec trois valeurs:

var items = new List<string>() { "Item 1", "Item 2", "Item 3" }; 
var formattedItems = string.Join(", ", items.ToArray()); 

var dropDownRange = workSheet.Range["A2"].EntireColumn; 
dropDownRange.Validation.Delete(); 
dropDownRange.Validation.Add(Excel.XlDVType.xlValidateList, 
    Excel.XlDVAlertStyle.xlValidAlertInformation, 
    Excel.XlFormatConditionOperator.xlBetween, 
    formattedItems, 
    Type.Missing); 

Aussi, si vous devez par défaut les cellules à une valeur que vous pouvez faire ceci:

dropDownRange.Value = "Item 2"; 

ou mieux encore:

dropDownRange.Value = items[1];