2010-05-07 7 views
1

Voici les informations de base. J'ai une application qui écrit dans un fichier Excel .xlsm et j'utilise C# et les bibliothèques d'objets interop Excel 12.0 pour le faire, ainsi que Visual Studio 2010. Je suis capable de changer les valeurs et les formules de la cellule, définir la police et le style de police, mettre les cellules verrouillées ou non, etc. La dernière chose que je dois faire est de définir la protection de la feuille pour interdire la sélection des cellules verrouillées.Comment définir les options de protection des cellules verrouillées dans Excel avec C# et Interop?

Quand je tente d'appeler ce code, comme un test de protection de la feuille générale ...

((Excel.Worksheet)excelApp.ThisWorkbook.Sheets[0]).Protect(Password: protectionPassword, AllowFormattingCells: false); 

... Je reçois l'exception Exception from HRESULT: 0x800A03EC me dit une exception COM était non gérée.

En outre, l'objet Interop Protection ne me donne pas l'option que j'ai mentionnée ci-dessus, bien que cette option soit disponible dans Excel lorsque je clique sur "Protect Sheet" sous l'onglet review. Donc, maintenant ma question: Comment est-ce que je protège la feuille désirée dans Excel avec l'option à AllowSelectLockedCells éteinte en utilisant Excel Interop en C#?

Répondre

5

Vous avez probablement résolu ce depuis qu'il a été demandé, mais au profit de ceux (comme moi) qui trébuchent sur ce des moteurs de recherche dans l'espoir d'une solution:

Trois points pour obtenir ce travail:

Fait référence à l'objet de classeur qui contient des macros, pas au classeur actuellement actif dans une instance Excel.
  • _Application.ThisWorkbook Pour cela, vous avez besoin de _Application.ActiveWorkbook.
  • index de feuille de calcul Excel commencent à 1, pas 0.
  • Pour empêcher les cellules verrouillées d'être sélectionné (les AllowSelectLockedCells que vous recherchez) vous devez d'abord définir la propriété EnableSelection-XlEnableSelection.xlUnlockedCells avant de verrouiller la feuille.

Ainsi, le suivant va faire ce que vous avez besoin:

((Excel.Worksheet)excelApp.ActiveWorkbook.Sheets[1]).EnableSelection = Excel.XlEnableSelection.xlUnlockedCells; 
((Excel.Worksheet)excelApp.ActiveWorkbook.Sheets[1]).Protect(Password: protectionPassword, AllowFormattingCells: false); 
+0

En fait, je ne résolu cela en utilisant Excel Interop. Merci beaucoup pour la solution. –

+0

EnableSelection est très important –