2009-07-01 22 views
3

J'utilise DataReader pour écrire des données dans des cellules excelsheet. Je n'ai aucun problème jusqu'à ce que la cellule ait des prédilections d'écriture. Mais dans un cas, une seule cellule est en lecture seule et les cellules restantes sont accessibles en écriture.comment écrire dans des cellules Excel en utilisant DataReader si une cellule particulière est "ReadOnly" en utilisant C#

Par exemple: 10 * 10 cellules, seule la première cellule est en lecture seule. donc, je devrais quitter cette cellule et l'écrire au reste des cellules. Mais avec le lecteur de données, il écrit toute la ligne à la fois .. alors comment puis-je l'obtenir en utilisant C#?

Team Leader (required) , , , , , , , , , 
, , , , , , , , , , 
, , , , , , , , , , 
, , , , , , , , , , 
, , , , , , , , , , 

Ainsi, la première cellule ne doit pas être écrite par le lecteur de données. S'il vous plaît aidez-moi à faire ce

if (reader.HasRows) 
{ 
    minRow = 0; 
    minCol = 0; 
    // 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++; 
     } 
    } 
} 

Merci, Ramm

Répondre

0

J'ai essayé beaucoup de choses à comprendre comment sauter crire sur une cellule Excel particulière en utilisant C#, mais ne pouvions pas y la logique appropriée.

mon exemple: Chef d'équipe (obligatoire) abcxyz User1 utilisateur2 Interface client Focal dfgidf user23 user3

chacun des noms ci-dessus doit être dans une cellule particulière ... mais dans le modèle Excel, première cellule (chef d'équipe (obligatoire)) est en lecture seule, donc je ne peux pas écrire dans cette cellule, donc ma feuille excel finale devrait montrer

      abcxyz User1 user2 
Customer Interface Focal dfgidf user23 user3..... 
..... 

j'ai essayé différentes logiques pour cela ... s'il vous plaît voir le code ci-dessous

Microsoft.Office.Interop.Excel.Workbook SelWorkBook = excelappln1.Workbooks.Open(
    curfile, 
    0, false, 5, "", "", false, 
    Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, 
    "", true, 
    false, 0, false, false, false); 

Microsoft.Office.Interop.Excel.Sheets excelSheets = SelWorkBook.Worksheets; 
Microsoft.Office.Interop.Excel.Worksheet excelworksheet =(Microsoft.Office.Interop.Excel.Worksheet)excelSheets.get_Item(CurSheetName); 

Microsoft.Office.Interop.Excel.Range excelRange = excelworksheet.UsedRange; 

if ((!excelworksheet.Cells[CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + minCol]).Locked) 
{ 
    // 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++; 
} 

mais l'erreur indique, dans l'instruction if Erreur 1 Opérateur '!' ne peut pas être appliqué à l'opérande de type 'objet'

alors, s'il vous plaît dites comment gérer ce cas.

Merci Ramm

1

trouvé sur Google alors peut-être il fonctionne/peut-être ne fonctionne pas: here, code looks the same as yours

Vous pouvez utiliser la propriété AllowEdit d'une gamme pour que vous puissiez faire:

// Assigning the Value from reader to the particular cell in excel sheet  
Excel.Range c = (Excel.Range)excelworksheet.Cells[CurTaskNode.DATA_MIN_ROW + minRow, CurTaskNode.DATA_MIN_COL + minCol]; 
if (c.AllowEdit) c.Value2 = values[iValueIndex]; 

au lieu de

// 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];