2009-08-03 5 views
1

J'importe des données dans des feuilles Excel à partir d'une base de données. Pour cela, j'utilise le lecteur de données. Le modèle de feuille Excel a quelques macros et quelques formules calculées et ce n'est pas la feuille de calcul Excel normale. donc je dois écrire les données dans la feuille Excel seulement si la cellule particulière est autorisée à écrire. Sinon, les données ne doivent pas être importées. Donc, pour cela, j'ai un fichier XML qui dit à partir de quelle colonne je devrais commencer à écrire et dans quelle ligne il devrait s'arrêter, je l'ai fait pour beaucoup de feuilles. Mais dans une feuille, la première cellule de la rangée est "en lecture seule" (verrouillée) et le reste est autorisé en écriture.Comment vérifier si une cellule est en lecture seule dans EXCEL en utilisant C#

Comme j'obtiens la ligne entière de la base de données à l'aide de Datareader, je suis obligé d'écrire dans les autres cellules, sans écrire dans la cellule verrouillée.

Je joins l'extrait de code pour référence.

Aidez-moi s'il vous plaît à le faire.

Sample ::

if (reader.HasRows) 
    { 
    minRow = 0; 
    minCol = 0; 
    Excel.Workbook SelWorkBook = excelAppln.Workbooks.Open(curfile, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, false, false, false); 
    Excel.Sheets excelSheets = SelWorkBook.Worksheets; 

Excel.Worksheet excelworksheet = (Excel.Worksheet)excelSheets.get_Item(CurSheetName); 

             // Process each result in the result set 
             while (reader.Read()) 
             { 
              // Create an array big enough to hold the column values 
              object[] values = new object[reader.FieldCount]; 

              // Add the array to the ArrayList 
              rowList.Add(values); 

              // Get the column values into the array 
              reader.GetValues(values); 

              int iValueIndex = 0; 

              // If the Reading Format is by ColumnByColumn 
              if (CurTaskNode.ReadFormat == "ColumnbyColumn") 
              { 
               minCol = 0; 
               // minRow = 0; 
               for (int iCol = 0; iCol < CurTaskNode.HeaderData.Length; iCol++) 
               { 

                // Checking whether the Header data exists or not 
                if (CurTaskNode.HeaderData[minCol] != "") 
                { 
                 // Assigning the Value from reader to the particular cell in excel sheet 
                 excelworksheet.Cells[CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + minCol] = values[iValueIndex]; 
                 iValueIndex++; 

                } 
                minCol++; 
               } 
               minRow++; 
              }SelWorkBook.Close(true, curfile, null); 

S'il vous plaît me aider à résoudre ce.

Merci,

Ramm

+0

Vous avez posté un code, mais vous n'avez pas expliqué ce qu'il fait ou pourquoi cela ne fonctionne pas pour vous? –

+0

Désolé, j'ai oublié. Ce morceau de code lit les données de la base de données si le lecteur contient des lignes. Il ouvre ensuite un nouveau fichier de modèle Excel préchargé et affecte les données du lecteur à l'objet Valeurs. Ensuite, pour la longueur de l'en-tête (HeaderData.Length) dans le fichier XML, il écrit dans chaque cellule Excel et enfin, il enregistre le fichier et se ferme. L'emplacement où les données sont écrites est excelworksheet.Cells [CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + minCol] = valeurs [iValueIndex]; // En fait une vérification doit être effectuée b4 que ce soit pour écrire dans la cellule. Je ne suis pas capable de le faire. Pls Help – Ramm

+0

Ok, j'ai posté une nouvelle réponse, essayez-le. –

Répondre

0

Ok, vous devez d'abord vérifier la propriété verrouillée de la première cellule, puis si elle est tranche verrouillé le tableau (de sorte que vous avez toute la ligne moins la première colonne), puis écrivez sur la feuille. Voici un code, pas exacte nécessairement, la fonction TRANCHE est juste pseudo-code, il y a un certain nombre de façons différentes de découper des tableaux en C#, utilisez la méthode de votre choix:

if (!excelworksheet.Cells[CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + 1].Locked) 
{ 
    excelworksheet.Cells[CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + minCol] = values[iValueIndex]; 
    iValueIndex++; 
} 
else 
{ 
    excelworksheet.Cells[CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + minCol] = values.SLICE(iValueIndex); 
    iValueIndex++; 
} 
+0

Salut Lance, ce ne marchait pas sur .. Si j'utilise cela, il dit plage ne peut pas être utilisé comme ça ... son objet ..mais utilisé comme une variable Comme j'utilise Datareader et il lit toute ligne de la base de données, il écrit également la ligne entière dans la feuille d'excel. donc, il va écrire les autres cellules dans cette ligne .. Mon req est passer seulement première cellule dans la première rangée. et écrire le reste des cellules dans la première rangée. À partir de la deuxième rangée, son normal ... écrit pour toutes les cellules de la deuxième rangée. S'il vous plaît aidez-moi à modifier le code pour cela. – Ramm

+0

Ok, je vais devoir regarder de plus près, mais ça pourrait me prendre un peu de temps. Je vais laisser la réponse pour le moment pour que personne ne la reproduise. –

Questions connexes