2009-01-23 7 views
20

J'essaie d'ouvrir un fichier Excel et de remplir ses cellules avec des données? J'ai fait le codage suivant jusqu'ici.C#: Comment accéder à une cellule Excel?

Actuellement, je suis à ce stade avec le code suivant mais je recevais des erreurs:

Microsoft.Office.Interop.Excel.ApplicationClass appExcel = 
       new Microsoft.Office.Interop.Excel.ApplicationClass(); 
try 
{ 
    // is there already such a file ? 
    if (System.IO.File.Exists("C:\\csharp\\errorreport1.xls")) 
    { 
     // then go and load this into excel 
     Microsoft.Office.Interop.Excel.Workbooks.Open(
      "C:\\csharp\\errorreport1.xls", true, false, 
      Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
      Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
      Missing.Value, Missing.Value, Missing.Value, Missing.Value); 
    } 
    else 
    { 
     // if not go and create a workbook: 
     newWorkbook = appExcel.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); 
     Microsoft.Office.Interop.Excel._Worksheet excelWorksheet = 
      (Microsoft.Office.Interop.Excel._Worksheet) 
       newWorkBook.Worksheets.get_Item(1); 
    } 
i++; 
j = 1; 

j++; 
objsheet.Cells(i, j).Value = "Tabelle: " + rs.Fields["Table_Name"]; 
j++; 
objsheet.Cells(i, j).Value = "kombinationsschluessel:FALL " 
           + rs3.Fields[1].Value; 
j++; 
objsheet.Cells(i, j).Value = "Null Value: "; 
j++; 
objsheet.Cells(i, j).Value = "Updated with 888"; 

Ce sont les 2 premiers erreurs que je reçois:

Error 1 An object reference is required for the nonstatic field, method, or 
     property 'Microsoft.Office.Interop.Excel.Workbooks.Open(string, object, 
     object, object, object, object, object, object, object, object, object, 
     object, object, object, object)' 

Error 2 The name 'newWorkbook' does not exist in the current context 

Répondre

20

Si vous essayez pour automatiser Excel, vous ne devriez probablement pas ouvrir un document Word et utiliser l'automatisation de Word;)

Vérifiez cela, il devrait g et vous avez commencé,

http://www.codeproject.com/KB/office/package.aspx

Et voici un code. Il est pris d'une partie de mon code et a beaucoup de choses supprimées, donc il ne fait rien et peut ne pas compiler ou fonctionner exactement, mais il devrait vous aider à démarrer. Il est orienté vers la lecture, mais devrait vous orienter dans la bonne direction.

Microsoft.Office.Interop.Excel.Worksheet sheet = newWorkbook.ActiveSheet; 

if (sheet != null) 
{ 
    Microsoft.Office.Interop.Excel.Range range = sheet.UsedRange; 
    if (range != null) 
    { 
     int nRows = usedRange.Rows.Count; 
     int nCols = usedRange.Columns.Count; 
     foreach (Microsoft.Office.Interop.Excel.Range row in usedRange.Rows) 
     { 
      string value = row.Cells[0].FormattedValue as string; 
     } 
    } 
} 

Vous pouvez également faire

Microsoft.Office.Interop.Excel.Sheets sheets = newWorkbook.ExcelSheets; 

if (sheets != null) 
{ 
    foreach (Microsoft.Office.Interop.Excel.Worksheet sheet in sheets) 
    { 
      // Do Stuff 
    } 
} 

Et si vous avez besoin d'insérer des lignes/colonnes

// Inserts a new row at the beginning of the sheet 
Microsoft.Office.Interop.Excel.Range a1 = sheet.get_Range("A1", Type.Missing); 
a1.EntireRow.Insert(Microsoft.Office.Interop.Excel.XlInsertShiftDirection.xlShiftDown, Type.Missing); 
+0

désolé mauvais code affiché, je l'ai corrigé – tksy

3

Je pense que vous devez déclarer la feuille associée!

Essayez quelque chose comme ça

objsheet(1).Cells[i,j].Value; 
+0

où avez-vous trouvé ceci? Et deux points est une mauvaise pratique .. – nawfal

1

Comment je travaille pour automatiser Bureau/Excel:

  1. Enregistrer une macro, cela va générer un modèle VBA
  2. Modifier le modèle VBA il sera correspondre à mes besoins
  3. Convertir en VB.Net (Un petit pas pour les hommes)
  4. Leave it in VB.Net, Much more facile que de le faire en utilisant C#
+1

de la question, il le veut en C#, mais oui ce serait bien pour VB.Net. –

1

Essayez:

Excel.Application oXL; 
Excel._Workbook oWB; 
Excel._Worksheet oSheet; 
Excel.Range oRng; 

oXL = new Excel.Application(); 
oXL.Visible = true; 
oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value)); 

oSheet = (Excel._Worksheet)oWB.Worksheets; 
oSheet.Activate(); 

oSheet.Cells[3, 9] = "Some Text" 
+0

ce n'est pas correct, OP demande comment ouvrir un classeur, pas comment en créer un nouveau ... (vous utilisez la méthode .add). –

1

simple.

Pour ouvrir un classeur. utilisation xlapp.workbooks.Open()

où vous avez déjà déclaré et instanitated xlApp comme si .. Excel.Application xlApp = new Excel.Applicaton();

Les paramètres sont corrects.

Ensuite, assurez-vous d'utiliser la propriété Value2 lors de l'affectation d'une valeur à la cellule à l'aide de la propriété cells ou de l'objet range.

1

Cela fonctionne bien pour moi

 Excel.Application oXL = null; 
     Excel._Workbook oWB = null; 
     Excel._Worksheet oSheet = null; 

     try 
     { 
      oXL = new Excel.Application(); 
      string path = @"C:\Templates\NCRepTemplate.xlt"; 
      oWB = oXL.Workbooks.Open(path, 0, false, 5, "", "", 
       false, Excel.XlPlatform.xlWindows, "", true, false, 
       0, true, false, false); 

      oSheet = (Excel._Worksheet)oWB.ActiveSheet; 
      oSheet.Cells[2, 2] = "Text"; 
1

Vous pouvez utiliser le code ci-dessous; cela fonctionne bien pour moi:

newWorkbook = appExcel.Workbooks.Add(); 
Questions connexes