我一直在尝试修改名为" 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
答案 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" 上的看似随机的异常。