Ajout de données à un fichier Excel à l'aide de C#

Je suis assez nouveau avec C# et je suis en train d'exporter des données à partir d'un DataGridView en C# dans un fichier Excel. Les apports de la datagridview sont remplis par l'utilisateur.

Actuellement, mon programme peut créer un fichier excel avec les valeurs de la datagridview avec la date donnée, comme son nom de fichier.

Mon problème est que je n'arrive pas à trouver un moyen d'ajouter les données de la gridview SI le fichier existe déjà, il remplace l'actuel fichier excel à la place.

Toute aide/conseils/suggestions est très apprécié.

Merci 🙂

Voici mon code:

Microsoft.Office.Interop.Excel.Application xlApp;          
Microsoft.Office.Interop.Excel.Workbook xlWorkBook; 
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
Microsoft.Office.Interop.Excel.Sheets xlBigSheet;
Microsoft.Office.Interop.Excel.Sheets xlSheet;
object misValue;
String newPath;
private void buttonOK_Click(object sender, EventArgs e)
{
createXLSfile();
}
private void createXLSfile(){
String cDate = datePicker.Value.ToShortDateString();
String cMonth = datePicker.Value.ToString("MMMM");
String cYear = datePicker.Value.ToString("yy");
String cDay = datePicker.Value.ToString("dd");
String fName = cDay + "-" + cMonth+ "-" + cYear + ".xls";
String mainPath = @"C:\Users\User1\Desktop\" + cYear;
String folderPath = System.IO.Path.Combine(mainPath, cMonth);
String excelPath = System.IO.Path.Combine(folderPath, fName);
System.IO.Directory.CreateDirectory(mainPath);
System.IO.Directory.CreateDirectory(folderPath);
String fNameOnly = Path.GetFileNameWithoutExtension(excelPath);
String extension = Path.GetExtension(excelPath);
String path = Path.GetDirectoryName(excelPath);
newPath = excelPath;
if(File.Exists(newPath))
{
existingFile();
}else
{
newFile();
}
MessageBox.Show("Submitted");
}
private void newFile()
{
xlApp = new Microsoft.Office.Interop.Excel.Application();
xlApp.Visible = true;
misValue = System.Reflection.Missing.Value;
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
xlWorkSheet = xlWorkBook.Sheets["Sheet1"];
xlWorkSheet = xlWorkBook.ActiveSheet;
xlWorkSheet.Name = "Sheet1";
xlWorkSheet.Cells[2, 1] = "Header1";
xlWorkSheet.Cells[2, 2] = "Header2";
xlWorkSheet.Cells[2, 3] = "Total";
getData();
xlWorkBook.SaveAs(newFullPath, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue,
misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(xlApp);
}
private void existingFile()
{
xlApp = new Microsoft.Office.Interop.Excel.Application();
xlApp.Visible = true;
xlWorkBook = xlApp.Workbooks.Open(newPath, 0, 
false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
"", true, false, 0, true, false, false);
xlBigSheet = xlWorkBook.Worksheets;
string x = "Sheet1";
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBigSheet.get_Item(x);
getData();
xlWorkBook.SaveAs(newPath, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,
misValue, misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,
misValue, misValue, misValue,
misValue, misValue);
xlWorkBook.Close(misValue, misValue, misValue);
xlWorkBook = null;
xlApp.Quit();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
private void getData()
{
double a,b,c,d,total = 0;
int lastRow_ = 3;
foreach(DataGridViewRow r in dataGridView1.Rows)
{
if(!r.IsNewRow)
{
a = Convert.ToDouble(r.Cells[2].Value);
b = Convert.ToDouble(r.Cells[3].Value);
c = Convert.ToDouble(r.Cells[4].Value);
d = Convert.ToDouble(r.Cells[5].Value);
total = a + b + c + d;
xlWorkSheet.Cells[lastRow_, 1] = "Hi";
xlWorkSheet.Cells[lastRow_, 2] = "Hello";
xlWorkSheet.Cells[lastRow_, 3] = Convert.ToString(total);
lastRow_ = xlWorkSheet.Cells.Find(
"*",
xlWorkSheet.Cells[1, 1],
misValue,
Microsoft.Office.Interop.Excel.XlLookAt.xlPart,
Microsoft.Office.Interop.Excel.XlSearchOrder.xlByRows,
Microsoft.Office.Interop.Excel.XlSearchDirection.xlPrevious,
misValue,
misValue,
misValue).Row + 1;
}
}
total = 0;
}

Mise à jour 1:
Toujours bloqué.
Essaie de suivre ce lien:
https://www.codeproject.com/articles/5123/opening-and-navigating-excel-with-c

SORTIE

Ajout de données à un fichier Excel à l'aide de C#

Ajout de données à un fichier Excel à l'aide de C#

  • Il y a quelques choses dans votre affiché le code qui ne compile pas, donc je m'interroge sur votre relevé de compte que vous êtes en mesure d'exporter les DataGridView à un nouveau fichier excel. La ligne: String mainPath = "@C:\Users\User1\Desktop\"" + cYear; est incorrect... le " @ " est hors de place et un supplément ’”’citation est à la fin... devrait être String mainPath = @"C:\Users\User1\Desktop\" + cYear; Également la ligne: System.IO.Directory.Create(folderPath); est incorrecte, Create DNE... devrait être: System.IO.Directory.CreateDirectory(mainPath); Enfin de l'aide.
  • Vous pouvez ajouter la ligne: xlApp.Visible = true; pendant le débogage de la création du fichier excel. Cela vous permettra de VOIR ce qui se passe dans votre code, étape par étape, et peut révéler certains des problèmes que vous rencontrez. Juste une pensée.
  • merci pour l'aide, c'est juste une simulation de code que j'ai créé ici depuis mon programme principal est trop grand. Il n'y a pas de problème avec mon répertoire et j'ai fait ce que vous avez dit. Il remplace le fichier excel au lieu de l'ajoutant dans le fichier. Avez-vous des suggestions à ce sujet?
  • J'ai nettoyé le code en question. merci pour la sortir
  • Permettez-moi de voir si j'ai eu ce droit. Depuis votre programme principal code est trop gros à poste... puis la partie que vous avez un problème avec... au lieu de copier/coller le code que vous re-tapé à créer une “maquette” de la version avec des erreurs? Donc les erreurs que j'ai souligné plus haut, ne sont pas vraiment dans votre code? Si c'est le cas, alors pourquoi perdez-vous d'autres temps? Poste le code (pas une “maquette” de la version) qui ne fonctionne pas. Sinon, comme à votre affiché “se moquer de” code de la réponse est... il a des erreurs, et il ne fonctionne pas, puisqu'il est “faux” code n'a aucun sens pour les autres de les tester et de déboguer ou vous aider à trouver de vos erreurs.
  • J'ai testé le code et il fonctionne exactement comme mon principal, la seule différence est, ma principale dispose d'environ 30columns j'ai donc décidé d'être "smart" pour couper les colonnes vers le bas, juste un peu et de le poster ici, je suppose que ce n'est pas la bonne chose à faire? mais oui, ce code crée un fichier excel et ÉCRASE un fichier excel existant. savez-vous ou avez des suggestions sur l'AJOUTANT à la place? merci pour votre aide
  • Le code que vous avez posté ne pouvait pas travailler comme il y a une erreur de compilation dans le getData() méthode.
  • J'ai ajouté de la sortie sur ma question

InformationsquelleAutor DisplayName | 2017-01-25