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

时间:2017-11-20 03:22:28

标签: c# excel datagridview interop

我一直在尝试修改名为" Hoja de Resultados"在Visual Studio(C#)中每次添加三个不同的变量(Puntuacion = Score,Fecha = Date,Hora = Time)。 Excel工作表链接到DataGridView窗口,每次更改值时都会更新。问题是,当excel表上的行少于3行时,程序会停止修改XLSX,有时会在" Program.cs"上抛出一个看似随机的异常。

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();
  

很抱歉,如果它部分使用西班牙语。但是为了一些指导:

     
      
  • Hoja =工作簿
  •   
  • HojaActiva = ActiveWorkbook
  •   

1 个答案:

答案 0 :(得分:1)

您的Excel文件未更新的原因是您未将其保存在代码中的任何位置。要解决您的保存问题,

更改此行:

Hoja.Saved = true;

Hoja.Save();

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

代码中的另一个可能问题是活动范围是否从最顶层开始。行int NuevaPosicion = Posicion + 1;假定您的输入在行one上开始,可能不是这种情况。我建议将该行更改为:

//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表上的少于3行复制您的问题,您发布的代码似乎在我能想到的所有条件下都没有问题。尝试进行上述更改,看看是否能解决您的其他问题。如果没有,请更新您的问题,以更明确地描述" Program.cs" 上的看似随机的异常。