无法将更改保存到Excel文件(C#/)

我一直在试图修改一个名为“Hoja de Resultados”的Excel文件,每次在Visual Studio(C#)中添加三个不同的variables(Puntuacion = Score,Fecha = Date,Hora = Time)。 Excel表格链接到一个DataGridView窗口,每更新一次值就更新一次。 问题是,当Excel表格中的行less于3行时,程序将停止修改XLSX,有时会在“Program.cs”中引发看似随机的exception。

string Direccion = "G:\\Archivos\\Programación\\Visual Basic\\UVG\\Microcontroladores - Proyecto Final Comunicación Serial\\Hoja de Resultados.xlsx"; Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook Hoja = ExcelApp.Workbooks.Open(Direccion); Microsoft.Office.Interop.Excel.Worksheet HojaActiva = ExcelApp.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet; Excel.Range Rango = HojaActiva.UsedRange; int Posicion = Rango.Rows.Count; int NuevaPosicion = Posicion + 1; HojaActiva.Cells[NuevaPosicion, 1] = Puntuacion; HojaActiva.Cells[NuevaPosicion, 2] = Fecha; HojaActiva.Cells[NuevaPosicion, 3] = Hora; Hoja.Saved = true; ExcelApp.DisplayAlerts = false; ExcelApp.ScreenUpdating = false; ExcelApp.Visible = false; ExcelApp.UserControl = false; ExcelApp.Interactive = false; Hoja.Close(true, Type.Missing, Type.Missing); Marshal.ReleaseComObject(Hoja); Marshal.ReleaseComObject(HojaActiva); ExcelApp.Quit(); 

对不起,如果它是部分西class牙语。 但是对于一些指导:

  • Hoja =工作簿
  • HojaActiva = ActiveWorkbook

你的Excel文件没有更新的原因是因为你没有保存在代码中的任何地方。 为了解决您的储蓄问题,

改变这一行:

 Hoja.Saved = true; 

 Hoja.Save(); 

当你写Hoja.Saved = true; 它告诉Excel没有任何更改要保存,无论是否如此,并且可以安全地退出。 因此它实际上并没有保存任何东西。 您必须显式调用Save()方法。

你的代码中的另一个可能的问题是,如果活动范围不是从最上面开始的。 行int NuevaPosicion = Posicion + 1; 假定你的input从第一行开始,但情况可能并非如此。 我会build议改变这一行:

 //This way it doesn't matter where the range starts. // Rows.Row returns the row on which the active range begins. int NuevaPosicion = Posicion + Rango.Rows.Row; 

现在,新的数据将始终附加到工作表的末尾。

除了上述两点,我不能复制你的问题, 在Excel表格上less于3行 ,你发布的代码似乎运行在我能想到的所有条件没有问题。 尝试上面的更改,看看是否可以解决您的其他问题。 如果没有,请更新您的问题来更清楚地描述“Program.cs”中看似随机的exception