2010-10-04 9 views
0

J'utilise l'application Windows, dans cette application Windows j'ai exporté vue grille pour exceller avec succès. maintenant je veux calculer la somme des cellules dans la feuille excel dans une cellule particulière ... je l'ai essayé mais il va l'exception ... quelqu'un peut-il me dire ce que j'ai fait de mal? Comment résoudre ce problème? ou me dire toute autre solution pour le faire ..Calculer la somme des cellules dans Excel en utilisant C#

Merci à l'avance ...

Mon code est:

wksheet.get_Range (Type.Missing, strSumOfTargetCell + RowCount) .Formula = « = SUM ("+ strRowValue +": "+ strColumnRangeValue +") ";

+0

Quelle est l'exception? – bla

+0

Si vous avez exporté votre gridView avec succès pour exceller, pourquoi essayer encore de lire à partir d'Excel au lieu de lire à partir de gridview? –

Répondre

1

Tout d'abord, lisez mon commentaire. Deuxièmement, si vous calculez encore des cellules à partir d'Excel, à mon avis, vous devez écrire un code, qui lit le fichier .xlsx et calcule certaines valeurs. Voici l'exemple de code peut lire doc Excel, et se lie à DataTable.

votre code sera comme ceci. après avoir lu des cellules entières Excel, vous avez toutes les valeurs des cellules. (Lorsque vous créer objet [] = new ligne obejct [])

using (OpenFileDialog openFileFromDialog = new OpenFileDialog()) 
     { 
      openFileFromDialog.Filter = "Excel Document|*.xls"; 
      openFileFromDialog.Title = "Select FIle"; 
      openFileFromDialog.ShowDialog(); 
      if (String.IsNullOrEmpty(openFileFromDialog.FileName)) 
       return; 

      using (OleDbConnection connection = new OleDbConnection { ConnectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; 
         Data Source={0};Extended Properties=Excel 12.0;", openFileFromDialog.FileName) }) 
      { 
        using (DbCommand command = connection.CreateCommand()) 
        { 
         command.CommandText = String.Format("SELECT * FROM [{0}]", sheetName); 
         if (connection.State == ConnectionState.Closed) 
         { 
          connection.Open(); 
         } 
         using (DbDataReader dr = command.ExecuteReader()) 
         { 

          while (dr.Read()) 
          { 

           object[] row = new object[] 
             { 
             dr[1], 
             dr[2], 
             dr[3] 
             }; 
           YOURDATATABLE.Rows.Add(row); 
           } 
         } 
        } 
        } 
      } 

à la partie de yourdatatable.Rows.Add(), vous pouvez faire des calculs au lieu de faire de nouveaux dataTable tels que.

decimal Sum = 0; 
while(dr.Read()) 
{ 
Sum += (ConvertToDecimal(dr[1]) + ConvertToDecimal(dr[2])) * ConvertToDecimal(dr[3]) 
} 
Questions connexes